Skip to content

Instantly share code, notes, and snippets.

@dglaude
Last active December 22, 2023 06:05
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 dglaude/0ad2d2bb37798f4c83ba471b3aac7ea4 to your computer and use it in GitHub Desktop.
Save dglaude/0ad2d2bb37798f4c83ba471b3aac7ea4 to your computer and use it in GitHub Desktop.
Playing an wav audio file on button press with "Feather RP2040 Prop-Maker" (update Debounce)
import supervisor
supervisor.set_next_code_file(None, reload_on_error=True)
import board
import audiocore
import audiobusio
import audiomixer
from digitalio import DigitalInOut, Direction, Pull
from adafruit_debouncer import Debouncer
# enable external power pin to provides power to the external components
external_power = DigitalInOut(board.EXTERNAL_POWER)
external_power.direction = Direction.OUTPUT
external_power.value = True
# i2s playback
level_play = 0.5
wave_file = open("Merry-Xmas-Piano.wav", "rb")
wave = audiocore.WaveFile(wave_file)
audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1, bits_per_sample=16, samples_signed=True)
mixer.voice[0].level = 0
audio.play(mixer)
# servo control
play_ringtone = False
# boot button
switch = DigitalInOut(board.BUTTON)
switch.direction = Direction.INPUT
switch.pull = Pull.UP
# external button
switch_ext_ = DigitalInOut(board.EXTERNAL_BUTTON)
switch_ext_.direction = Direction.INPUT
switch_ext_.pull = Pull.UP
# Make the external switch a debounced switch with minimum 50 ms
switch_ext = Debouncer(switch_ext_, interval=0.05)
switch_state = False
while True:
if play_ringtone:
if not(mixer.voice[0].playing):
play_ringtone = False
mixer.voice[0].level = 0.0
print("Stopped playing")
else:
if (not switch.value or not switch_ext.value) and switch_state is False:
play_ringtone = True
switch_state = True
mixer.voice[0].play(wave, loop=False)
mixer.voice[0].level = level_play
print("Starting playing")
if (switch.value or switch_ext.value) and switch_state is True:
switch_state = False
@dglaude
Copy link
Author

dglaude commented Dec 3, 2023

This piece of code just play a wave file completely once when someone press the "boot" button (for testing) or the "external" button.
It is then ready to play it again at the next press.

This is used as a xmas ring music for a doorbell.
This can be connected to a button on the front door, however I use it with a relay activated by that doorbell button.

@dglaude
Copy link
Author

dglaude commented Dec 22, 2023

On multiple occasion, the Xmas sound started, so I added a 50ms debounce on the external button.
I don't know yet how effective it is, should it be shorter or longer???

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment