# Maps a number from one range to another. def map_range(x, in_min, in_max, out_min, out_max): mapped = (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min if out_min <= out_max: return max(min(mapped, out_max), out_min) return min(max(mapped, out_max), out_min) # Wait before starting up time.sleep(3) play_file("i-gotta-have-more-cowbell.wav") # a pause between audio clips time.sleep(1) play_file("only-prescription-more-cowbell.wav") while seesaw.digital_read(SWITCH): pass print("Ready for playing audio") time.sleep(1) f = open("fear11.wav", "rb") wav = audioio.WaveFile(f) a.play(wav) while True: if seesaw.digital_read(SWITCH): break # time to bail! pot = seesaw.analog_read(MORECOW) print(pot) eyecolor = (int(map_range(pot, 0, 1023, 255,
time.sleep(0.5) myservo.angle = LOOKRIGHT ss.digital_write(LED_1, False) ss.digital_write(LED_2, True) time.sleep(0.5) myservo.angle = LOOKATPERSON # reset LEDs ss.digital_write(LED_1, False) ss.digital_write(LED_2, False) selection = None # wait until while not selection: if not ss.digital_read(BUTTON_1): selection = "Yanny" ss.digital_write(LED_1, True) myservo.angle = LOOKLEFT break if not ss.digital_read(BUTTON_2): selection = "Laurel" ss.digital_write(LED_2, True) myservo.angle = LOOKRIGHT break # if we havent selected, wait until they do! if a.playing and time.monotonic() - t > 15.5: a.pause() # now we have a selection! with open(logfile, "a") as fp:
while True: # pause button B if buttonb.value: while buttonb.value: pass paused = not paused # reset button A if buttona.value: while buttona.value: pass pixels.fill((0, 0, 0)) reset() if not seesaw.digital_read(TOP_SENSOR): play_file("madeit.wav") for i in range(20): rainbow() reset() #print(seesaw.touch_read(0)) #print(seesaw.touch_read(3)) if seesaw.touch_read(0) > TOUCH_THRESH: while seesaw.touch_read(0) > TOUCH_THRESH: pass last_a_time = time.monotonic() if seesaw.touch_read(3) > TOUCH_THRESH: while seesaw.touch_read(3) > TOUCH_THRESH: pass last_b_time = time.monotonic()
# microservo usually is 400/2500 (tower pro sgr2r) my_servo = servo.Servo(pwm, min_pulse=400, max_pulse=2500) # Starting servo locations my_servo.angle = MOUTH_START # Audio playback object and helper to play a full file a = audioio.AudioOut(board.A0) def play_file(wavfile): print("Playing", wavfile) with open(wavfile, "rb") as f: wav = audiocore.WaveFile(f) a.play(wav) while a.playing: my_servo.angle = MOUTH_END time.sleep(.15) my_servo.angle = MOUTH_START time.sleep(.15) while True: if seesaw.digital_read(SWITCH) and not buttona.value and not buttonb.value: continue play_file(random.choice(wavefiles)) # wait for buttons to be released while buttona.value or buttonb.value or not seesaw.digital_read(SWITCH): pass
class MonsterM4sk: """Represents a single Monster M4sk The terms "left" and "right" are always used from the perspective of looking out of the mask. The right screen is the one USB port directly above it. """ def __init__(self, i2c=None): """ :param i2c: The I2C bus to use, will try board.I2C() if not supplied """ displayio.release_displays() if i2c is None: i2c = board.I2C() # set up on-board seesaw self._ss = Seesaw(i2c) # set up seesaw pins self._ss.pin_mode(SS_TFTRESET_PIN, self._ss.OUTPUT) # left sceen reset # buttons abolve left eye self._ss.pin_mode(SS_SWITCH1_PIN, self._ss.INPUT_PULLUP) self._ss.pin_mode(SS_SWITCH2_PIN, self._ss.INPUT_PULLUP) self._ss.pin_mode(SS_SWITCH3_PIN, self._ss.INPUT_PULLUP) # light sensor near left eye self._ss.pin_mode(SS_LIGHTSENSOR_PIN, self._ss.INPUT) # Manual reset for left screen self._ss.digital_write(SS_TFTRESET_PIN, False) time.sleep(0.01) self._ss.digital_write(SS_TFTRESET_PIN, True) time.sleep(0.01) # Left backlight pin, on the seesaw self._ss.pin_mode(SS_BACKLIGHT_PIN, self._ss.OUTPUT) # backlight on full brightness self._ss.analog_write(SS_BACKLIGHT_PIN, 255) # Left screen spi bus left_spi = busio.SPI(board.LEFT_TFT_SCK, MOSI=board.LEFT_TFT_MOSI) left_tft_cs = board.LEFT_TFT_CS left_tft_dc = board.LEFT_TFT_DC left_display_bus = displayio.FourWire( left_spi, command=left_tft_dc, chip_select=left_tft_cs # Reset on Seesaw ) self.left_display = ST7789(left_display_bus, width=240, height=240, rowstart=80) # right backlight on board self.right_backlight = pulseio.PWMOut( board.RIGHT_TFT_LITE, frequency=5000, duty_cycle=0 ) # full brightness self.right_backlight.duty_cycle = 65535 # right display spi bus right_spi = busio.SPI(board.RIGHT_TFT_SCK, MOSI=board.RIGHT_TFT_MOSI) right_tft_cs = board.RIGHT_TFT_CS right_tft_dc = board.RIGHT_TFT_DC right_display_bus = displayio.FourWire( right_spi, command=right_tft_dc, chip_select=right_tft_cs, reset=board.RIGHT_TFT_RST, # reset on board ) self.right_display = ST7789( right_display_bus, width=240, height=240, rowstart=80 ) # setup accelerometer if i2c is not None: int1 = digitalio.DigitalInOut(board.ACCELEROMETER_INTERRUPT) try: self._accelerometer = adafruit_lis3dh.LIS3DH_I2C( i2c, address=0x19, int1=int1 ) except ValueError: self._accelerometer = adafruit_lis3dh.LIS3DH_I2C(i2c, int1=int1) # touchio on nose self.nose = touchio.TouchIn(board.NOSE) # can be iffy, depending on environment and person. # User code can tweak if needed. self.nose.threshold = 180 @property def acceleration(self): """Accelerometer data, +/- 2G sensitivity. This example initializes the mask and prints the accelerometer data. .. code-block:: python import adafruit_monsterm4sk mask = adafruit_monsterm4sk.MonsterM4sk(i2c=board.I2C()) print(mask.acceleration) """ return ( self._accelerometer.acceleration if self._accelerometer is not None else None ) @property def light(self): """Light sensor data. This example initializes the mask and prints the light sensor data. .. code-block:: python import adafruit_monsterm4sk mask = adafruit_monsterm4sk.MonsterM4sk(i2c=board.I2C()) print(mask.light) """ return self._ss.analog_read(SS_LIGHTSENSOR_PIN) @property def buttons(self): """Buttons dictionary. This example initializes the mask and prints when the S9 button is pressed down. .. code-block:: python import adafruit_monsterm4sk mask = adafruit_monsterm4sk.MonsterM4sk(i2c=board.I2C()) while True: if mask.buttons["S9"]: print("Button S9 pressed!") """ return { "S9": self._ss.digital_read(SS_SWITCH1_PIN) is False, "S10": self._ss.digital_read(SS_SWITCH2_PIN) is False, "S11": self._ss.digital_read(SS_SWITCH3_PIN) is False, } @property def boop(self): """Nose touch sense. This example initializes the mask and prints when the nose touch pad is being touched. .. code-block:: python import adafruit_monsterm4sk mask = adafruit_monsterm4sk.MonsterM4sk(i2c=board.I2C()) while True: if mask.boop: print("Nose touched!") """ return self.nose.value
score_opponent += 1 text_area2.text = str(score_opponent) start_reaction = time.monotonic() reaction = True if score_player > 9: # level up score_player = 0 score_opponent = 0 text_area1.text = "0" text_area2.text = "0" level += 1 print("level up :", level) text_area4.text = str(level) if score_opponent > 9: gameover = True print("Game Over") print("Level", level) print("Score :", score_player, "-", score_opponent) group.append(gameover_group) gameover_group.hidden = False while True: if ss.digital_read(9) == False or ss.digital_read( 10) == False or ss.digital_read(11) == False: reinitialize_game() break else: show_game_over() time.sleep(.01) pass time.sleep(0.07)
encoder = adafruit_irremote.GenericTransmit(header=[9500, 4500], one=[550, 550], zero=[550, 1700], trail=0) ss = Seesaw(i2c_bus) ss.pin_mode(9, ss.INPUT_PULLUP) last_x = 0 last_y = 0 while True: x = ss.analog_read(2) y = ss.analog_read(3) b = ss.digital_read(9) if not b: encoder.transmit(pulseout, [255, 2, 191, 64]) time.sleep(.01) if (abs(x - last_x) > 3) or (abs(y - last_y) > 3): # print(x, y) last_x = x last_y = y if x > 500 and y > 995: # cpx.pixels.fill((50, 0, 0)) encoder.transmit(pulseout, [255, 2, 255, 0]) time.sleep(.01) # forward if x < 10 and y > 500: # cpx.pixels.fill((0, 50, 0))