summaryrefslogtreecommitdiffstatshomepage
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/accellog.py14
-rw-r--r--examples/conwaylife.py43
-rw-r--r--examples/lcd.py36
-rw-r--r--examples/ledangle.py22
-rw-r--r--examples/mandel.py32
-rw-r--r--examples/pyb.py11
6 files changed, 146 insertions, 12 deletions
diff --git a/examples/accellog.py b/examples/accellog.py
new file mode 100644
index 0000000000..81f44f19a8
--- /dev/null
+++ b/examples/accellog.py
@@ -0,0 +1,14 @@
+# log the accelerometer values to a file, 1 per second
+
+f = open('motion.dat', 'w') # open the file for writing
+
+for i in range(60): # loop 60 times
+ time = pyb.time() # get the current time
+ accel = pyb.accel() # get the accelerometer data
+
+ # write time and x,y,z values to the file
+ f.write('{} {} {} {}\n'.format(time, accel[0], accel[1], accel[2]))
+
+ pyb.delay(1000) # wait 1000 ms = 1 second
+
+f.close() # close the file
diff --git a/examples/conwaylife.py b/examples/conwaylife.py
new file mode 100644
index 0000000000..fb62ce69e8
--- /dev/null
+++ b/examples/conwaylife.py
@@ -0,0 +1,43 @@
+# do 1 iteration of Conway's Game of Life
+def conway_step():
+ for x in range(128): # loop over x coordinates
+ for y in range(32): # loop over y coordinates
+ # count number of neigbours
+ num_neighbours = (lcd.get(x - 1, y - 1) +
+ lcd.get(x, y - 1) +
+ lcd.get(x + 1, y - 1) +
+ lcd.get(x - 1, y) +
+ lcd.get(x + 1, y) +
+ lcd.get(x + 1, y + 1) +
+ lcd.get(x, y + 1) +
+ lcd.get(x - 1, y + 1))
+
+ # check if the centre cell is alive or not
+ self = lcd.get(x, y)
+
+ # apply the rules of life
+ if self and not (2 <= num_neighbours <= 3):
+ lcd.reset(x, y) # not enough, or too many neighbours: cell dies
+ elif not self and num_neighbours == 3:
+ lcd.set(x, y) # exactly 3 neigbours around an empty cell: cell is born
+
+# randomise the start
+def conway_rand():
+ lcd.clear() # clear the LCD
+ for x in range(128): # loop over x coordinates
+ for y in range(32): # loop over y coordinates
+ if pyb.rand() & 1: # get a 1-bit random number
+ lcd.set(x, y) # set the pixel randomly
+
+# loop for a certain number of frames, doing iterations of Conway's Game of Life
+def conway_go(num_frames):
+ for i in range(num_frames):
+ conway_step() # do 1 iteration
+ lcd.show() # update the LCD
+
+# PC testing
+import lcd
+import pyb
+lcd = lcd.LCD(128, 32)
+conway_rand()
+conway_go(100)
diff --git a/examples/lcd.py b/examples/lcd.py
new file mode 100644
index 0000000000..3303337bfb
--- /dev/null
+++ b/examples/lcd.py
@@ -0,0 +1,36 @@
+# LCD testing object for PC
+# uses double buffering
+class LCD:
+ def __init__(self, width, height):
+ self.width = width
+ self.height = height
+ self.buf1 = [[0 for x in range(self.width)] for y in range(self.height)]
+ self.buf2 = [[0 for x in range(self.width)] for y in range(self.height)]
+
+ def clear(self):
+ for y in range(self.height):
+ for x in range(self.width):
+ self.buf1[y][x] = self.buf2[y][x] = 0
+
+ def show(self):
+ print('') # blank line to separate frames
+ for y in range(self.height):
+ for x in range(self.width):
+ self.buf1[y][x] = self.buf2[y][x]
+ for y in range(self.height):
+ row = ''.join(['*' if self.buf1[y][x] else ' ' for x in range(self.width)])
+ print(row)
+
+ def get(self, x, y):
+ if 0 <= x < self.width and 0 <= y < self.height:
+ return self.buf1[y][x]
+ else:
+ return 0
+
+ def reset(self, x, y):
+ if 0 <= x < self.width and 0 <= y < self.height:
+ self.buf2[y][x] = 0
+
+ def set(self, x, y):
+ if 0 <= x < self.width and 0 <= y < self.height:
+ self.buf2[y][x] = 1
diff --git a/examples/ledangle.py b/examples/ledangle.py
new file mode 100644
index 0000000000..35c9148a49
--- /dev/null
+++ b/examples/ledangle.py
@@ -0,0 +1,22 @@
+def led_angle(seconds_to_run_for):
+ # make LED objects
+ l1 = pyb.Led(1)
+ l2 = pyb.Led(2)
+
+ for i in range(20 * seconds_to_run_for):
+ # get x-axis
+ accel = pyb.accel()[0]
+
+ # turn on LEDs depending on angle
+ if accel < -10:
+ l1.on()
+ l2.off()
+ elif accel > 10:
+ l1.off()
+ l2.on()
+ else:
+ l1.off()
+ l2.off()
+
+ # delay so that loop runs at at 1/50ms = 20Hz
+ pyb.delay(50)
diff --git a/examples/mandel.py b/examples/mandel.py
index b13b7d87f8..996132a915 100644
--- a/examples/mandel.py
+++ b/examples/mandel.py
@@ -1,14 +1,22 @@
-@micropython.native
-def in_set(c):
- z = 0
- for i in range(40):
- z = z*z + c
- if abs(z) > 60:
- return False
- return True
+def mandelbrot():
+ # returns True if c, complex, is in the Mandelbrot set
+ @micropython.native
+ def in_set(c):
+ z = 0
+ for i in range(40):
+ z = z*z + c
+ if abs(z) > 60:
+ return False
+ return True
-for v in range(31):
- line = []
+ lcd.clear()
for u in range(91):
- line.append('*' if in_set((u / 30 - 2) + (v / 15 - 1) * 1j) else ' ')
- print(''.join(line))
+ for v in range(31):
+ if in_set((u / 30 - 2) + (v / 15 - 1) * 1j):
+ lcd.set(u, v)
+ lcd.show()
+
+# PC testing
+import lcd
+lcd = lcd.LCD(128, 32)
+mandelbrot()
diff --git a/examples/pyb.py b/examples/pyb.py
new file mode 100644
index 0000000000..5e24f40e4a
--- /dev/null
+++ b/examples/pyb.py
@@ -0,0 +1,11 @@
+# pyboard testing functions for PC
+
+def delay(n):
+ pass
+
+rand_seed = 1
+def rand():
+ global rand_seed
+ # for these choice of numbers, see P L'Ecuyer, "Tables of linear congruential generators of different sizes and good lattice structure"
+ rand_seed = (rand_seed * 653276) % 8388593
+ return rand_seed