Commit fd04bb3b by Damien George

### Add some example scripts for pyboard (some can run on PC).

parent 7b21c2d8
 # 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
 # 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)
examples/lcd.py 0 → 100644
 # 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
 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)
 @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()
examples/pyb.py 0 → 100644
 # 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
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!