Пример #1
0
# 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,
Пример #2
0
    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:
Пример #3
0
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()
Пример #4
0
# 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
Пример #5
0
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
Пример #6
0
            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)
Пример #7
0
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))