Beispiel #1
0
def init():
    global _i2c, _tick, _page, keys

    if _i2c is not None:
        return

    _i2c = busio.I2C(sda=board.SDA0, scl=board.SCL0, frequency=600000)
    _i2c.try_lock()
    _tick = time.monotonic()

    _matrix_write(0x03, 0x00, 0x03)
    _matrix_write(0x00, 0x00)
    _i2c.writeto(0x50, b'\x00\x7f\xfe\x7f\xfe\x7f\xfe\x7f\xfe\x7f\xfe'
                 b'\x7f\xfe\x7f\xfe\x7f\xfe\x7f\xfe\x7f\xfe\x7f\xfe')

    #_accel_write(0x24, 0x80)  # reboot
    #time.sleep(0.005)
    _accel_write(0x20, 0x37)  # enable, data rate 400Hz
    _accel_write(0x23, 0x88)  # HiRes & BDU
    _accel_write(0x1f, 0x80)  # ADCs

    keys = gamepad.GamePad(
        digitalio.DigitalInOut(board.X),
        digitalio.DigitalInOut(board.DOWN),
        digitalio.DigitalInOut(board.LEFT),
        digitalio.DigitalInOut(board.RIGHT),
        digitalio.DigitalInOut(board.UP),
        digitalio.DigitalInOut(board.O),
        digitalio.DigitalInOut(board.S),
        digitalio.DigitalInOut(board.Z),
    ).get_pressed

    brightness(7)
Beispiel #2
0
 def init_buttons(self):
     for butt in [
             board.BUTTON_SW1, board.BUTTON_SW2, board.BUTTON_SW3,
             board.BUTTON_SW4
     ]:
         self.buttons.append(digitalio.DigitalInOut(butt))
     self.pad = gamepad.GamePad(*self.buttons)
Beispiel #3
0
def init():
    global _i2c, _buffer, _temp, _tick, _page, _gamepad

    _tick = time.monotonic()
    _buffer = bytearray(17)

    if _i2c is not None:
        return

    _i2c = busio.I2C(sda=board.SDA, scl=board.SCL, frequency=600000)
    _i2c.try_lock()
    _temp = bytearray(2)
    _page = None
    _keys = 0
    _last_keys = 0

    _register(0x03, 0x00, 0x03)
    _register(0x00, 0x00)
    _i2c.writeto(
        0x50, b'\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'
        b'\xff\xff\xff\xff\xff\xff')

    _gamepad = gamepad.GamePad(
        digitalio.DigitalInOut(board.K_X),
        digitalio.DigitalInOut(board.K_DOWN),
        digitalio.DigitalInOut(board.K_LEFT),
        digitalio.DigitalInOut(board.K_RIGHT),
        digitalio.DigitalInOut(board.K_UP),
        digitalio.DigitalInOut(board.K_O),
    )

    brightness(7)
Beispiel #4
0
 def gamepad(self):
     if not self._gamepad:
         import gamepad
         self._gamepad = gamepad.GamePad(
             self._up, self._left, self._down, self._right, self._action
         )
     return self._gamepad
Beispiel #5
0
    def __init__(self):
        self._a = digitalio.DigitalInOut(board.BUTTON_A)
        self._a.switch_to_input(pull=digitalio.Pull.DOWN)
        self._b = digitalio.DigitalInOut(board.BUTTON_B)
        self._b.switch_to_input(pull=digitalio.Pull.DOWN)
        self.gamepad = gamepad.GamePad(self._a, self._b)

        # Define switch:
        self._switch = digitalio.DigitalInOut(board.SLIDE_SWITCH)
        self._switch.switch_to_input(pull=digitalio.Pull.UP)

        # Define LEDs:
        self._led = digitalio.DigitalInOut(board.D13)
        self._led.switch_to_output()
        self._pixels = neopixel.NeoPixel(board.NEOPIXEL, 10)

        # Define sensors:
        self._temp = adafruit_thermistor.Thermistor(
            board.TEMPERATURE, 10000, 10000, 25, 3950
        )
        self._light = Photocell(board.LIGHT)

        # Define touch:
        # Initially, self._touches stores the pin used for a particular touch. When that touch is
        # used for the first time, the pin is replaced with the corresponding TouchIn object.
        # This saves a little RAM over using a separate read-only pin tuple.
        # For example, after `cp.touch_A2`, self._touches is equivalent to:
        # [None, board.A1, touchio.TouchIn(board.A2), board.A3, ...]
        # Slot 0 is not used (A0 is not allowed as a touch pin).
        self._touches = [
            None,
            board.A1,
            board.A2,
            board.A3,
            board.A4,
            board.A5,
            board.A6,
            board.TX,
        ]
        self._touch_threshold_adjustment = 0

        # Define acceleration:
        self._i2c = busio.I2C(board.ACCELEROMETER_SCL, board.ACCELEROMETER_SDA)
        self._int1 = digitalio.DigitalInOut(board.ACCELEROMETER_INTERRUPT)
        self._lis3dh = adafruit_lis3dh.LIS3DH_I2C(
            self._i2c, address=0x19, int1=self._int1
        )
        self._lis3dh.range = adafruit_lis3dh.RANGE_8_G

        # Define audio:
        self._speaker_enable = digitalio.DigitalInOut(board.SPEAKER_ENABLE)
        self._speaker_enable.switch_to_output(value=False)
        self._sample = None
        self._sine_wave = None
        self._sine_wave_sample = None

        # Initialise tap:
        self._detect_taps = 1
        self.detect_taps = 1
Beispiel #6
0
    def initialize(self):
        self.pad = gamepad.GamePad()

        self.pad.on_axischange += self.on_axischange
        self.pad.on_connect += self.on_connect
        self.pad.on_disconnect += self.on_disconnect
        self.pad.on_buttondown += self.on_buttondown
        self.pad.on_buttonup += self.on_buttonup
    def __init__(self):
        # Define I2C:
        self._i2c = board.I2C()

        # Define touch:
        # Initially, self._touches stores the pin used for a particular touch. When that touch is
        # used for the first time, the pin is replaced with the corresponding TouchIn object.
        # This saves a little RAM over using a separate read-only pin tuple.
        # For example, after `clue.touch_2`, self._touches is equivalent to:
        # [board.D0, board.D1, touchio.TouchIn(board.D2)]
        self._touches = [board.D0, board.D1, board.D2]
        self._touch_threshold_adjustment = 0

        # Define buttons:
        self._a = digitalio.DigitalInOut(board.BUTTON_A)
        self._a.switch_to_input(pull=digitalio.Pull.UP)
        self._b = digitalio.DigitalInOut(board.BUTTON_B)
        self._b.switch_to_input(pull=digitalio.Pull.UP)
        self._gamepad = gamepad.GamePad(self._a, self._b)

        # Define LEDs:
        self._white_leds = digitalio.DigitalInOut(board.WHITE_LEDS)
        self._white_leds.switch_to_output()
        self._pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
        self._red_led = digitalio.DigitalInOut(board.L)
        self._red_led.switch_to_output()

        # Define audio:
        self._mic = audiobusio.PDMIn(
            board.MICROPHONE_CLOCK,
            board.MICROPHONE_DATA,
            sample_rate=16000,
            bit_depth=16,
        )
        self._sample = None
        self._samples = None
        self._sine_wave = None
        self._sine_wave_sample = None

        # Define sensors:
        # Accelerometer/gyroscope:
        self._accelerometer = adafruit_lsm6ds.LSM6DS33(self._i2c)

        # Magnetometer:
        self._magnetometer = adafruit_lis3mdl.LIS3MDL(self._i2c)

        # DGesture/proximity/color/light sensor:
        self._sensor = adafruit_apds9960.apds9960.APDS9960(self._i2c)

        # Humidity sensor:
        self._humidity = adafruit_sht31d.SHT31D(self._i2c)

        # Barometric pressure sensor:
        self._pressure = adafruit_bmp280.Adafruit_BMP280_I2C(self._i2c)

        # Create displayio object for passing.
        self.display = board.DISPLAY
Beispiel #8
0
 def __init__(self):
     self._i2c = board.I2C()
     self._touches = [board.D0, board.D1, board.D2]
     self._touch_threshold_adjustment = 0
     self._a = digitalio.DigitalInOut(board.BUTTON_A)
     self._a.switch_to_input(pull=digitalio.Pull.UP)
     self._b = digitalio.DigitalInOut(board.BUTTON_B)
     self._b.switch_to_input(pull=digitalio.Pull.UP)
     self._gamepad = gamepad.GamePad(self._a, self._b)
Beispiel #9
0
 def __init__(self):
     self.buttons = gamepad.GamePad(
         digitalio.DigitalInOut(board.BUTTON_X),
         digitalio.DigitalInOut(board.BUTTON_DOWN),
         digitalio.DigitalInOut(board.BUTTON_LEFT),
         digitalio.DigitalInOut(board.BUTTON_RIGHT),
         digitalio.DigitalInOut(board.BUTTON_UP),
         digitalio.DigitalInOut(board.BUTTON_O),
         digitalio.DigitalInOut(board.BUTTON_Z),
     )
     self.last_z_press = None
Beispiel #10
0
    def __init__(self):
        import gamepad

        self.buttons = gamepad.GamePad(
            digitalio.DigitalInOut(board.BTNA),
            digitalio.DigitalInOut(board.BTNB),
            digitalio.DigitalInOut(board.MENU),
            digitalio.DigitalInOut(board.MENU),
            digitalio.DigitalInOut(board.RIGHT),
            digitalio.DigitalInOut(board.DOWN),
            digitalio.DigitalInOut(board.UP),
            digitalio.DigitalInOut(board.LEFT),
        )
Beispiel #11
0
    def __init__(self):
        # Define I2C:
        self._i2c = cutebot._i2c

        # Define buttons:
        self._a = digitalio.DigitalInOut(board.BUTTON_A)
        self._a.switch_to_input(pull=digitalio.Pull.UP)
        self._b = digitalio.DigitalInOut(board.BUTTON_B)
        self._b.switch_to_input(pull=digitalio.Pull.UP)
        self._gamepad = gamepad.GamePad(self._a, self._b)

        # Define LEDs:
        self._white_leds = digitalio.DigitalInOut(board.WHITE_LEDS)
        self._white_leds.switch_to_output()
        self._pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
        self._red_led = digitalio.DigitalInOut(board.L)
        self._red_led.switch_to_output()

        # Define audio:
        self._mic = audiobusio.PDMIn(
            board.MICROPHONE_CLOCK,
            board.MICROPHONE_DATA,
            sample_rate=16000,
            bit_depth=16,
        )
        self._sample = None
        self._samples = None
        self._sine_wave = None
        self._sine_wave_sample = None

        # Define sensors:
        # Accelerometer/gyroscope:
        self._accelerometer = adafruit_lsm6ds.lsm6ds33.LSM6DS33(self._i2c)

        # Magnetometer:
        self._magnetometer = adafruit_lis3mdl.LIS3MDL(self._i2c)

        # DGesture/proximity/color/light sensor:
        self._sensor = adafruit_apds9960.apds9960.APDS9960(self._i2c)

        # Humidity sensor:
        self._humidity = adafruit_sht31d.SHT31D(self._i2c)

        # Barometric pressure sensor:
        self._pressure = adafruit_bmp280.Adafruit_BMP280_I2C(self._i2c)

        # Create displayio object for passing.
        self.display = board.DISPLAY
Beispiel #12
0
def init():
    global _tick, _display, _gamepad

    if _tick is not None:
        return

    _tick = time.monotonic()

    _gamepad = gamepad.GamePad(
        digitalio.DigitalInOut(board.X),
        digitalio.DigitalInOut(board.DOWN),
        digitalio.DigitalInOut(board.LEFT),
        digitalio.DigitalInOut(board.RIGHT),
        digitalio.DigitalInOut(board.UP),
        digitalio.DigitalInOut(board.O),
    )

    spi = busio.SPI(clock=board.SCK, MOSI=board.MOSI)
    dc = digitalio.DigitalInOut(board.DC)
    _display = st7735.ST7735R(spi, dc)
    _display.fill(0)
Beispiel #13
0
            self.last_audio.stop()

    def mute(self, value=True):
        self.mute_pin.value = not value


dc = digitalio.DigitalInOut(board.D10)
cs = digitalio.DigitalInOut(board.D9)
cs.switch_to_output(value=True)
spi = busio.SPI(clock=board.SCK, MOSI=board.MOSI, MISO=board.MISO)

display = ili9341.ILI9341(spi, dc, cs, 0)

backlight = pulseio.PWMOut(board.D11)
backlight.duty_cycle = 2**14

# buttons = gamepad.GamePad(
#     digitalio.DigitalInOut(board.X),
#     digitalio.DigitalInOut(board.DOWN),
#     digitalio.DigitalInOut(board.LEFT),
#     digitalio.DigitalInOut(board.RIGHT),
#     digitalio.DigitalInOut(board.UP),
#     digitalio.DigitalInOut(board.O),
# )

buttons = gamepad.GamePad(digitalio.DigitalInOut(board.D8), spi)

audio = Audio()

#battery = analogio.AnalogIn(board.BATTERY)
Beispiel #14
0
GPIO #27 (13) GP8  - Joystick down
"""

print("BUTTONS (Konami code)")

B_A = 1 << 0
B_B = 1 << 1
B_LEFT = 1 << 2
B_UP = 1 << 3
B_RIGHT = 1 << 4
B_DOWN = 1 << 5

pad = gamepad.GamePad(
    digitalio.DigitalInOut(board.GP7),
    digitalio.DigitalInOut(board.GP17),
    digitalio.DigitalInOut(board.GP9),
    digitalio.DigitalInOut(board.GP27),
    digitalio.DigitalInOut(board.GP26),
    digitalio.DigitalInOut(board.GP8),
)

konami = [
    B_UP, B_UP, B_DOWN, B_DOWN, B_LEFT, B_RIGHT, B_LEFT, B_RIGHT, B_B, B_A
]
position = 0

while True:
    buttons = pad.get_pressed()
    if buttons != 0:
        if konami[position] == buttons:
            dots[position % 3] = (0, 0, 0)
            position += 1
Beispiel #15
0
import board
import digitalio
import gamepad
import time

pad = gamepad.GamePad(
    digitalio.DigitalInOut(board.PA11),
    digitalio.DigitalInOut(board.PA12),
    digitalio.DigitalInOut(board.PA24),
    digitalio.DigitalInOut(board.PA25),
)

prev_buttons = 0

while True:
    buttons = pad.get_pressed()

    if buttons != prev_buttons:
        for i in range(0, 4):
            bit = (1 << i)
            if (buttons & bit) != (prev_buttons & bit):
                print('Button %d %s' %
                      (i + 1, 'pressed' if buttons & bit else 'released'))

        prev_buttons = buttons

    time.sleep(0.1)
Beispiel #16
0
def check_for_quit():
    pad = gamepad.GamePad(digitalio.DigitalInOut(board.BUTTON_SW3))
    buttons = pad.get_pressed()
    if buttons & 1:
       exit()
Beispiel #17
0
        canvas = self.matrix.CreateFrameCanvas()
        self.player.draw(canvas)
        for i in range(len(self.rocks)):
            self.rocks[i].draw(canvas)
        offset_canvas = self.matrix.SwapOnVSync(canvas)

    def run(self):
        while True:
            if (self.gamepad.buttons[gamepad.leftCode]):
                self.player.orientation -= 0.125
            elif (self.gamepad.buttons[gamepad.rightCode]):
                self.player.orientation += 0.125
            elif (self.gamepad.buttons[gamepad.upCode]):
                self.player.xvel += 0.0125 * math.cos(self.player.orientation)
                self.player.yvel += 0.0125 * math.sin(self.player.orientation)

            for i in range(len(self.rocks)):
                if self.player.collision(self.rocks[i]):
                    self.player = SpaceShip()
                    break
            self.moveObjects()
            self.drawFrame()

if __name__ == "__main__":
    gamepad_thread = gamepad.GamePad("/dev/input/event0")
    gamepad_thread.setDaemon(True)
    gamepad_thread.start()

    asteroids = Asteroids(gamepad_thread)
    asteroids.run()
Beispiel #18
0
GAMEMENU[4] = ["Clean"]
GAMEMENU[5] = ["Doctor"]
GAMEMENU[6] = ["Discipline"]
GAMEMENU[7] = ["Display Stats"]
GAMEMENU[8] = ["Sound"]
GAMEMENU[9] = ["Lights"]

button_pins = (board.LEFT_BUTTON, board.MIDDLE_BUTTON, board.RIGHT_BUTTON)
B_LEFT = 1 << 0;
B_MID = 1 << 1;
B_RIGHT = 1 << 2;
buttons = [digitalio.DigitalInOut(pin) for pin in button_pins]
for button in buttons:
    button.direction = digitalio.Direction.INPUT
    button.pull = digitalio.Pull.DOWN
pad = gamepad.GamePad(buttons[0], buttons[1], buttons[2])

class VirtualPetGame:
    def __init__(self):
        # Main frame buffer
        self.fb = VPB.VirtualPetFramebuf(SCRWIDTH, SCRHEIGHT)
        self.splash()
        self.fb.clearDisplay();

        self.speaker_enable = digitalio.DigitalInOut(board.SPEAKER_ENABLE)
        self.speaker_enable.switch_to_output(value=False)

        # Initialize frequently used animation screens
        # Avoids reading them from file every time
        with open ("VirtualPet/assets/petWalkLeft1.txt", "r") as myfile:
            try:
Beispiel #19
0
import neopixel_write

K_X = 0x01
K_DOWN = 0x02
K_LEFT = 0x04
K_RIGHT = 0x08
K_UP = 0x10
K_O = 0x20

dc = digitalio.DigitalInOut(board.MISO)
spi = busio.SPI(clock=board.SCK, MOSI=board.MOSI)
spi.try_lock()
spi.configure(baudrate=100000, polarity=0, phase=0)
time.sleep(0.2)
display = st7735r.ST7735R(spi, dc, 0b110)
spi.configure(baudrate=23000000, polarity=0, phase=0)
buttons = gamepad.GamePad(
    digitalio.DigitalInOut(board.D5),
    digitalio.DigitalInOut(board.D11),
    digitalio.DigitalInOut(board.D12),
    digitalio.DigitalInOut(board.D9),
    digitalio.DigitalInOut(board.D10),
    digitalio.DigitalInOut(board.D6),
)
try:
    pin = digitalio.DigitalInOut(board.NEOPIXEL)
    pin.switch_to_output()
    neopixel_write.neopixel_write(pin, b'\x00\x00\x00')
except Exception:
    pass
Beispiel #20
0
    def stop(self):
        if self.last_audio:
            self.last_audio.stop()

    def mute(self, value=True):
        self.mute_pin.value = not value


dc = digitalio.DigitalInOut(board.DC)
cs = digitalio.DigitalInOut(board.CS)
cs.switch_to_output(value=1)
spi = busio.SPI(clock=board.SCK, MOSI=board.MOSI)
spi.try_lock()
spi.configure(baudrate=24000000, polarity=0, phase=0)
cs.value = 0
display = st7735r.ST7735R(spi, dc, 0b101)

buttons = gamepad.GamePad(
    digitalio.DigitalInOut(board.X),
    digitalio.DigitalInOut(board.DOWN),
    digitalio.DigitalInOut(board.LEFT),
    digitalio.DigitalInOut(board.RIGHT),
    digitalio.DigitalInOut(board.UP),
    digitalio.DigitalInOut(board.O),
)

audio = Audio()

battery = analogio.AnalogIn(board.BATTERY)
Beispiel #21
0
        except Exception as er:
            print(str(er))
            time.sleep(5)
    print("Bluetooth connection error")
    pad_led.blink(on_time=0.2, off_time=0.2, n=2)


if __name__ == '__main__':
    xbox_time = 0
    menu_time = 0
    pad = None
    pad_button.when_pressed = connect_gamepad
    while True:
        try:
            time.sleep(2)
            pad = gamepad.GamePad()

            pad.attach_axis(gamepad.AXIS_GAS, my_car.on_forward)
            pad.attach_axis(gamepad.AXIS_BRAKE, my_car.on_reverse)
            pad.attach_axis(gamepad.AXIS_X, my_car.on_steering_wheel)
            pad.attach_axis(gamepad.AXIS_Z, my_car.on_camera_rotate)
            pad.attach_axis(gamepad.AXIS_HAT0Y, my_car.on_light)
            pad.attach_button(gamepad.BTN_B, my_car.on_brake)

            pad.open()

            print("Connected, starting GamePad loop")
            pad_led.on()
            my_car.on_connected()
            connected = True
"""

B_Player2 = 1 << 0
B_Player1 = 1 << 1
B_ButtonB = 1 << 2
B_ButtonA = 1 << 3
B_ButtonY = 1 << 4
B_ButtonX = 1 << 5
B_Start = 1 << 6
B_Select = 1 << 7

pad = gamepad.GamePad(
    digitalio.DigitalInOut(board.GP9),
    digitalio.DigitalInOut(board.GP27),
    digitalio.DigitalInOut(board.GP11),
    digitalio.DigitalInOut(board.GP18),
    digitalio.DigitalInOut(board.GP12),
    digitalio.DigitalInOut(board.GP17),
    digitalio.DigitalInOut(board.GP14),
    digitalio.DigitalInOut(board.GP16),
)

while True:
    buttons = pad.get_pressed()
    if buttons & B_Player1:
        print("1")
    elif buttons & B_Player2:
        print("2")
    elif buttons & B_ButtonB:
        print("B")
    elif buttons & B_ButtonA:
        print("A")
    def mute(self, mute):
        pass


displayio.release_displays()
_tft_spi = busio.SPI(clock=board.SCK, MOSI=board.MOSI)
_tft_spi.try_lock()
_tft_spi.configure(baudrate=24000000)
_tft_spi.unlock()
_fourwire = displayio.FourWire(_tft_spi,
                               command=board.A3,
                               chip_select=board.A2,
                               reset=board.A4)
display = displayio.Display(_fourwire,
                            _INIT_SEQUENCE,
                            width=160,
                            height=128,
                            rotation=0,
                            backlight_pin=board.A5)
display.auto_brightness = True
buttons = gamepad.GamePad(
    digitalio.DigitalInOut(board.SCL),
    digitalio.DigitalInOut(board.D12),
    digitalio.DigitalInOut(board.D11),
    digitalio.DigitalInOut(board.D9),
    digitalio.DigitalInOut(board.D10),
    digitalio.DigitalInOut(board.D7),
    digitalio.DigitalInOut(board.SDA),
)
audio = DummyAudio()
Beispiel #24
0
import board
import digitalio
import gamepad
import time

B_UP = 1 << 0
B_DOWN = 1 << 1

pad = gamepad.GamePad(
    digitalio.DigitalInOut(board.D10),
    digitalio.DigitalInOut(board.D11),
)

y = 0
while True:
    buttons = pad.get_pressed()
    if buttons & B_UP:
        y -= 1
        print(y)
    elif buttons & B_DOWN:
        y += 1
        print(y)
    time.sleep(0.1)
    while buttons:
        # Wait for all buttons to be released.
        buttons = pad.get_pressed()
        time.sleep(0.1)
Beispiel #25
0
import board
import digitalio
import gamepad
import time

pad = gamepad.GamePad(
    digitalio.DigitalInOut(board.P0_11),
    digitalio.DigitalInOut(board.P0_12),
    digitalio.DigitalInOut(board.P0_24),
    digitalio.DigitalInOut(board.P0_25),
)

prev_buttons = 0

while True:
    buttons = pad.get_pressed()

    if buttons != prev_buttons:
        for i in range(0, 4):
            bit = (1 << i)
            if (buttons & bit) != (prev_buttons & bit):
                print('Button %d %s' %
                      (i + 1, 'pressed' if buttons & bit else 'released'))

        prev_buttons = buttons

    time.sleep(0.1)
"""

B_Up     = 1 << 0
B_Down   = 1 << 1
B_Left   = 1 << 2
B_Right  = 1 << 3
B_Start  = 1 << 4
B_Select = 1 << 5
B_A      = 1 << 6
B_B      = 1 << 7

pad = gamepad.GamePad(
    digitalio.DigitalInOut(board.GP9),
    digitalio.DigitalInOut(board.GP8),
    digitalio.DigitalInOut(board.GP6),
    digitalio.DigitalInOut(board.GP7),
    digitalio.DigitalInOut(board.GP10),
    digitalio.DigitalInOut(board.GP11),
    digitalio.DigitalInOut(board.GP13),
    digitalio.DigitalInOut(board.GP14),
)

while True:
    buttons = pad.get_pressed()
    if buttons & B_Up:
        print("UP")
    elif buttons & B_Down:
        print("DOWN")
    elif buttons & B_Left:
        print("LEFT")
    elif buttons & B_Right:
        print("RIGHT")
text_grid.y = 48
text = terminalio.Terminal(text_grid, terminalio.FONT)
screen = displayio.Bitmap(10, 20, 6)
preview = displayio.Bitmap(4, 4, 6)
bricks = displayio.Group(scale=8)
bricks.append(displayio.TileGrid(screen, pixel_shader=palette, x=0, y=-4))
bricks.append(displayio.TileGrid(preview, pixel_shader=palette, x=12, y=0))
root = displayio.Group()
root.append(bricks)
root.append(text_grid)
board.DISPLAY.show(root)
buttons = gamepad.GamePad(
    digitalio.DigitalInOut(board.BUTTON_O),
    digitalio.DigitalInOut(board.BUTTON_X),
    digitalio.DigitalInOut(board.BUTTON_Z),
    digitalio.DigitalInOut(board.BUTTON_DOWN),
    digitalio.DigitalInOut(board.BUTTON_LEFT),
    digitalio.DigitalInOut(board.BUTTON_RIGHT),
    digitalio.DigitalInOut(board.BUTTON_UP),
)

brick = None
score = 0
next_brick = Brick(random.randint(0, 4))
tick = time.monotonic()
while True:
    if brick is None:
        text.write("\r\n%08d" % score)
        next_brick.draw(preview, 0)
        brick = next_brick
        brick.x = screen.width // 2