Big Mouth Billy Bass player that takes raw wavefiles and decision list text files from an SD card
Dependencies: SDFileSystem mbed BillyBass
main.cpp
- Committer:
- bikeNomad
- Date:
- 2013-06-20
- Revision:
- 16:82a1bdc3320f
- Parent:
- 14:79b3fd23c7b5
File content as of revision 16:82a1bdc3320f:
#include "billybass.hpp" #include "SDFileSystem.h" #include "song.hpp" #include "player.hpp" #include "action.hpp" #include <ctype.h> // tailPin, mouthPin, bodyPin inverted // BillyBass testBass(LED_RED, LED_GREEN, LED_BLUE, true); // tailPin, mouthPin, bodyPin BillyBass bass1(BASS1_TAIL, BASS1_MOUTH, BASS1_BODY); // tailPin, mouthPin, bodyPin BillyBass bass2(BASS2_TAIL, BASS2_MOUTH, BASS2_BODY); DigitalIn button1(BASS1_BUTTON); // J3/4 DigitalIn button2(BASS2_BUTTON); // J3/2 // Analog: // GND J3/14 // VrefH J3/16 AnalogOut speaker(PTE30); // J10/11 // MOSI, MISO, SCLK, CS, name SDFileSystem sd(SD_MOSI, SD_MISO, SD_SCLK, SD_CS, SD_NAME); Serial pc(USBTX, USBRX); Timer t; void serialIrqHandler() { int c = pc.getc(); bool isLower = islower(c); c = toupper(c); DigitalOut *out = 0; float elapsed = t.read(); t.reset(); pc.printf("%d %f\r\n", (int)!isLower, elapsed); switch (c) { case 'H': case 'B': out = bass1.outputNamed("body"); break; case 'T': out = bass1.outputNamed("tail"); break; case 'M': out = bass1.outputNamed("mouth"); default: break; } if (out) { if (isLower) out->write(0); else out->write(1); } } int main() { SongPlayer player; pc.baud(SERIAL_BAUD); t.start(); pc.attach(serialIrqHandler); button1.mode(PullUp); button2.mode(PullUp); fprintf(stderr, "*** REBOOT ***\r\n"); for (;;) { // read the directory DIR *bassDir = 0; while (!bassDir) { if ((bassDir = opendir(BASS_DIRECTORY)) != 0) break; pc.printf("Error opening " BASS_DIRECTORY "\r\n"); wait(1.0); } while (dirent *d = readdir(bassDir)) { Song *song = Song::newSong(d->d_name); if (song) { fprintf(stderr, "Waiting to play %s\r\n", song->getSampleFileName()); while (!(!button1 || !button2)) wait(0.1); player.playEntireSong(song); fprintf(stderr, "total length: %f done: %u\r\n", player.timeInSong, player.actionsDone); } } closedir(bassDir); fprintf(stderr, "Done.\r\n"); } }