-
Notifications
You must be signed in to change notification settings - Fork 775
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2640 from adafruit/HAL9000_RP2040_PropMaker
Adding files for HAL9000 Propmaker
- Loading branch information
Showing
18 changed files
with
79 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
# SPDX-FileCopyrightText: 2023 Phil Burgess for Adafruit Industries | ||
# | ||
# SPDX-License-Identifier: MIT | ||
|
||
""" | ||
HAL 9000 demo project for Adafruit Prop Maker Feather RP2040 and "Massive | ||
Arcade Button with LED - 100mm red." This simply monitors for button presses | ||
and then randomly plays one WAV file from the CIRCUITPY filesystem. | ||
No soldering required; using quick-connects, LED and button can be wired | ||
to screw terminals on the Prop Maker Feather board. | ||
NOTE: WAV FILES MUST BE 16-BIT. This will be fixed (allowing 8-bit WAVs if | ||
desired) in CircuitPython 9.0. | ||
""" | ||
|
||
# pylint: disable=import-error | ||
import os | ||
import random | ||
import time | ||
import audiocore | ||
import audiobusio | ||
import board | ||
import digitalio | ||
import pwmio | ||
|
||
|
||
# HARDWARE SETUP ----------------------------------------------------------- | ||
|
||
# LED+ is wired to "Neo" pin on screw terminal header, LED- to GND. | ||
# The LED inside the button is NOT a NeoPixel, just a normal passive LED, | ||
# but that's okay here -- the "Neo" pin can also function like a simple | ||
# 5V digital output or PWM pin. | ||
led = pwmio.PWMOut(board.EXTERNAL_NEOPIXELS) | ||
led.duty_cycle = 65535 # LED ON by default | ||
|
||
# Button is wired to GND and "Btn" on screw terminal header: | ||
button = digitalio.DigitalInOut(board.EXTERNAL_BUTTON) | ||
button.direction = digitalio.Direction.INPUT | ||
button.pull = digitalio.Pull.UP | ||
|
||
# Enable power to audio amp, etc. | ||
external_power = digitalio.DigitalInOut(board.EXTERNAL_POWER) | ||
external_power.direction = digitalio.Direction.OUTPUT | ||
external_power.value = True | ||
|
||
# I2S audio out | ||
audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA) | ||
|
||
# Find all Wave files in CIRCUITPY storage: | ||
wavefiles = [ | ||
file | ||
for file in os.listdir("/sounds/") | ||
if (file.endswith(".wav") and not file.startswith("._")) | ||
] | ||
print("Audio files found:", wavefiles) | ||
|
||
# FUNCTIONS ---------------------------------------------------------------- | ||
|
||
|
||
def play_file(filename): | ||
"""Plays a WAV file in its entirety (function blocks until done).""" | ||
print("Playing", filename) | ||
with open(f"/sounds/{filename}", "rb") as file: | ||
audio.play(audiocore.WaveFile(file)) | ||
# Randomly flicker the LED a bit while audio plays | ||
while audio.playing: | ||
led.duty_cycle = random.randint(5000, 30000) | ||
time.sleep(0.1) | ||
led.duty_cycle = 65535 # Back to full brightness | ||
|
||
|
||
# MAIN LOOP ---------------------------------------------------------------- | ||
|
||
|
||
# Loop simply watches for a button press (button pin pulled to GND, thus | ||
# False) and then plays a random WAV file. Because the WAV-playing function | ||
# will take a few seconds, this doesn't even require button debouncing. | ||
while True: | ||
if button.value is False: | ||
play_file(random.choice(wavefiles)) |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.