Skip to content
Snippets Groups Projects
Select Git revision
  • bbbbc263173cd22873f9a36d4786e8dd7f97f724
  • wip-bootstrap default
  • dualcore
  • ch3/leds
  • ch3/time
  • master
6 results

parse.c

Blame
    • Damien George's avatar
      eee1e884
      py: Downcase all MP_OBJ_IS_xxx macros to make a more consistent C API. · eee1e884
      Damien George authored
      These macros could in principle be (inline) functions so it makes sense to
      have them lower case, to match the other C API functions.
      
      The remaining macros that are upper case are:
      - MP_OBJ_TO_PTR, MP_OBJ_FROM_PTR
      - MP_OBJ_NEW_SMALL_INT, MP_OBJ_SMALL_INT_VALUE
      - MP_OBJ_NEW_QSTR, MP_OBJ_QSTR_VALUE
      - MP_OBJ_FUN_MAKE_SIG
      - MP_DECLARE_CONST_xxx
      - MP_DEFINE_CONST_xxx
      
      These must remain macros because they are used when defining const data (at
      least, MP_OBJ_NEW_SMALL_INT is so it makes sense to have
      MP_OBJ_SMALL_INT_VALUE also a macro).
      
      For those macros that have been made lower case, compatibility macros are
      provided for the old names so that users do not need to change their code
      immediately.
      eee1e884
      History
      py: Downcase all MP_OBJ_IS_xxx macros to make a more consistent C API.
      Damien George authored
      These macros could in principle be (inline) functions so it makes sense to
      have them lower case, to match the other C API functions.
      
      The remaining macros that are upper case are:
      - MP_OBJ_TO_PTR, MP_OBJ_FROM_PTR
      - MP_OBJ_NEW_SMALL_INT, MP_OBJ_SMALL_INT_VALUE
      - MP_OBJ_NEW_QSTR, MP_OBJ_QSTR_VALUE
      - MP_OBJ_FUN_MAKE_SIG
      - MP_DECLARE_CONST_xxx
      - MP_DEFINE_CONST_xxx
      
      These must remain macros because they are used when defining const data (at
      least, MP_OBJ_NEW_SMALL_INT is so it makes sense to have
      MP_OBJ_SMALL_INT_VALUE also a macro).
      
      For those macros that have been made lower case, compatibility macros are
      provided for the old names so that users do not need to change their code
      immediately.
    conwaylife.py 1.60 KiB
    #import essential libraries
    import lcd
    import pyb
    
    # 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
            pyb.delay(300)
    
    # PC testing
    lcd = lcd.LCD(128, 32)
    conway_rand()
    conway_go(1000)