Speaker: Introduce audio playback
Introduce the Speaker class to play audio from the SD card when detecting tags. The only audio supported is WAV. Audio playback is handled via interrupts, so it might try to read from the SD card at the same time as the LCD class is trying to read new frames. Update the LCD animation code to temporarily disable audio interrupts while reading from the SD card.
This commit is contained in:
parent
b0753ada9f
commit
224bc7a6d5
6 changed files with 124 additions and 6 deletions
13
src/main.cpp
13
src/main.cpp
|
@ -5,6 +5,7 @@
|
|||
#include "Com.h"
|
||||
#include "LCD.h"
|
||||
#include "RFID.h"
|
||||
#include "Speaker.h"
|
||||
|
||||
__attribute__((noreturn)) int main() {
|
||||
pinMode(pin_DBG_LED_1, OUTPUT);
|
||||
|
@ -40,7 +41,6 @@ __attribute__((noreturn)) int main() {
|
|||
Serial.begin(115200);
|
||||
Com::sendComment("System is powered up, running set-up.");
|
||||
|
||||
/* TODO: Setups once module structure is up. */
|
||||
RFID rfid;
|
||||
digitalWrite(pin_NFC1_RST, HIGH);
|
||||
rfid.init();
|
||||
|
@ -52,17 +52,28 @@ __attribute__((noreturn)) int main() {
|
|||
digitalWrite(pin_LCD_RST, HIGH);
|
||||
lcd.init();
|
||||
|
||||
/* Don't enable the amp here, only do it when playing to save some power. */
|
||||
Speaker::init();
|
||||
Speaker speaker;
|
||||
|
||||
Com::sendComment("All modules initialized, entering main loop.");
|
||||
|
||||
/* Main loop */
|
||||
while (true) {
|
||||
int8_t tagEvent;
|
||||
|
||||
/* Display first, in case the RFID communication delays it too much. */
|
||||
lcd.checkAndDisplay();
|
||||
speaker.checkPlayingAndDisable();
|
||||
|
||||
tagEvent = rfid.checkTags();
|
||||
if (tagEvent) {
|
||||
tagEvent = 4;
|
||||
Com::sendFigUpdate(tagEvent);
|
||||
/* Start the audio first because of the possible WAV parsing delay. */
|
||||
speaker.playNewSound(tagEvent);
|
||||
lcd.startNewAnim(tagEvent);
|
||||
|
||||
}
|
||||
|
||||
/* TODO: Drop delay, WFE+timer interrupt(s) ? */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue