Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@jgarber
Last active April 2, 2021 17:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jgarber/316da4e208ab656ee8affe2b8a661e62 to your computer and use it in GitHub Desktop.
Save jgarber/316da4e208ab656ee8affe2b8a661e62 to your computer and use it in GitHub Desktop.
Dog's talking buttons
# This script requires a Raspberry Pi 2, 3 or Zero. Circuit Python must
# be installed and it is strongly recommended that you use the latest
# release of Raspbian.
import os
import board
import digitalio
import pygame
from tasko import Loop
dirname = os.path.dirname(os.path.abspath(__file__))
button_pins = ['D23', 'D24', 'D25', 'D16', 'D26']
led_pins = ['D17', 'D27', 'D22', 'D5', 'D6']
sounds = ['walk', 'play', 'toby', 'potty', 'food']
buttons = [{} for i in range(len(button_pins))]
for i, button in enumerate(buttons):
pin = digitalio.DigitalInOut(getattr(board, button_pins[i]))
pin.direction = digitalio.Direction.INPUT
pin.pull = digitalio.Pull.UP
button['button'] = pin
pin = digitalio.DigitalInOut(getattr(board, led_pins[i]))
pin.direction = digitalio.Direction.OUTPUT
button['led'] = pin
button['sound'] = sounds[i]
pygame.mixer.init()
pygame.mixer.music.load(dirname + "/hello.mp3")
speakerVolume = "1"
pygame.mixer.music.set_volume(float(speakerVolume))
pygame.mixer.music.play()
async def blink(led):
for n in range (5):
led.value = True
await loop.sleep(0.5)
led.value = False
await loop.sleep(0.5)
def play(button):
filename = button['sound'] + '.mp3'
led = button['led']
pygame.mixer.music.load(os.path.join(dirname, filename))
pygame.mixer.music.play()
loop.add_task(blink(led))
async def read_sensors():
for button in buttons:
if not button['button'].value:
play(button)
loop = Loop()
loop.schedule(hz=100, coroutine_function=read_sensors)
loop.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment