For complete info on the sound board, see https://learn.adafruit.com/adafruit-audio-fx-sound-board/overview
This is a simple test of a direct trigger of the Audio FX Sounds Board from an Arduino.
For my test, I used an Arduino Pro Mini running at 3.3v & 8mHz. Digital pin #4 of the Arduino was connected to trigger pin #0 of the Sound Board, and I tied them to a common ground. I powered the Sound Board via a USB external battery for the initial tests, and the Arduino via the FTDI cable. For later tests, I powered the Sound Board via the Arduino's VCC (3v) pin directly.
The Audio FX board pins are triggered when connected to ground (they're set up this way so they'll work with simple normally open push buttons connected directly to the board's ground). This has a couple of implications:
- To trigger a given pin on the Audio FX board, we need to bring the Arduino pin tied to it to
LOW
, then back toHIGH
. - I've found that adding a delay of 100ms after setting to
LOW
is long enough for the Audio FX board to register the trigger event with my 3v3 Arduino. The documentation stats that the board should be able to detect the trigger in 50ms. Not sure if the discrepency is due to the slower clock speed (8mHz) on the Arduino. I'll try it with a 5v Arduino running at 16mHz to see if that has any effect.- It turns out even 100ms might not be enough. In another project that I've got going, I had to hold the pin
LOW
for 250ms to consistently get a trigger to fire.
- It turns out even 100ms might not be enough. In another project that I've got going, I had to hold the pin
- When the board is first powered on, the Arduino pins get set to
OUTPUT
mode. When that happens, the pins are triggered, causing the sounds to play. I'm not sure of the best way to suppress this, but it bears investigating. UPDATE: I don't think this is actually the case. I added a button to trigger the beginning of the playback. There is no trigger until that button is pressed. Yay! - Don't forget to tie the sound board and Arduino's ground together! :)
@jnagy197163 ah I think I see. The Sound FX Board may not be exactly what you want, though I think you could get what you’re looking for (sort of). You don’t have any way to sync the components of the sound to this board directly, but you could feed it’s line level output on the R/L pins to an ADC or two (one per channel if it’s stereo, or either channel into a single ADC if it’s mono). You can then use that to read the gain on the output sound. Depending on the audio track you’re workin with, this might produce an interesting effect if you take the read values and use them to drive the LED pin’s PWM output.
If you were going to use my code above to try this, you’d have to make some changes. This code makes liberal use of
delay()
, which basically suspends the execution of the microcontroller for a period of time (in other words,delay()
blocks the CPU). You’d what to use a non-blocking method, such as amillis()
based counter (see https://github.com/stonehippo/sploder/blob/master/include/TimingHelpers.h for an example of code that implements such a timer, and https://github.com/stonehippo/sploder/blob/master/src/sploder.cpp for some code that uses it). This is because you’ll probably want to read the ADC on each pass through the Arduinoloop()
. You need a very simple version of “multi-tasking” to do this, trigger the sound, and animate the CPU.You have other options that could give you the effect you want. For example, you could create an animation for the LED that’s independent of the sounds level, but is triggered at the same time. It you look in the Sploder code I linked to above, there’s a “breathing” animation for the LED when it’s in one state, which is implemented in a non-blocking fashion.
I hope this helps. Let me know if you need some help with the code or circuits. I’m betting that you’re doing something for Halloween, and probably want to get it done soon. ;-)