Big Mouth Billy Bass player that takes raw wavefiles and decision list text files from an SD card
Dependencies: SDFileSystem mbed BillyBass
main.cpp@8:1dd2bb31dec6, 2013-06-18 (annotated)
- Committer:
- bikeNomad
- Date:
- Tue Jun 18 00:07:56 2013 +0000
- Revision:
- 8:1dd2bb31dec6
- Parent:
- 7:ce27f959813b
- Child:
- 9:99213347474f
don't store songs in list.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bikeNomad | 5:5b846ef42702 | 1 | #include "billybass.hpp" |
bikeNomad | 7:ce27f959813b | 2 | #include "SDFileSystem.h" |
bikeNomad | 5:5b846ef42702 | 3 | #include "song.hpp" |
bikeNomad | 5:5b846ef42702 | 4 | #include "player.hpp" |
bikeNomad | 5:5b846ef42702 | 5 | #include "action.hpp" |
bikeNomad | 0:0944c3654ded | 6 | |
bikeNomad | 0:0944c3654ded | 7 | // Power: |
bikeNomad | 0:0944c3654ded | 8 | // Power GND J9/14 |
bikeNomad | 0:0944c3654ded | 9 | // Vin (6V) J9/16 |
bikeNomad | 0:0944c3654ded | 10 | |
bikeNomad | 7:ce27f959813b | 11 | // tailPin, mouthPin, bodyPin |
bikeNomad | 7:ce27f959813b | 12 | BillyBass testBass(LED_RED, LED_GREEN, LED_BLUE); |
bikeNomad | 7:ce27f959813b | 13 | |
bikeNomad | 7:ce27f959813b | 14 | // tailPin, mouthPin, bodyPin |
bikeNomad | 7:ce27f959813b | 15 | // J3/2, J3/1, J3/3 |
bikeNomad | 7:ce27f959813b | 16 | BillyBass realBass(PTA13, PTC12, PTC13); |
bikeNomad | 0:0944c3654ded | 17 | |
bikeNomad | 0:0944c3654ded | 18 | DigitalIn pushbutton(PTD5); // J3/4 |
bikeNomad | 0:0944c3654ded | 19 | |
bikeNomad | 0:0944c3654ded | 20 | // Analog: |
bikeNomad | 0:0944c3654ded | 21 | // GND J3/14 |
bikeNomad | 0:0944c3654ded | 22 | // VrefH J3/16 |
bikeNomad | 5:5b846ef42702 | 23 | AnalogOut speaker(PTE30); // J10/11 |
bikeNomad | 0:0944c3654ded | 24 | |
bikeNomad | 5:5b846ef42702 | 25 | // PTD0 D10 - Used for CS of SPI |
bikeNomad | 5:5b846ef42702 | 26 | // PTD2 D11 - Used for MOSI of SPI |
bikeNomad | 5:5b846ef42702 | 27 | // PTD3 D12 - Used for MISO of SPI |
bikeNomad | 0:0944c3654ded | 28 | // PTC5 J1/9 Used for SCLK of SPI |
bikeNomad | 0:0944c3654ded | 29 | |
bikeNomad | 7:ce27f959813b | 30 | // MOSI, MISO, SCLK, CS, name |
bikeNomad | 0:0944c3654ded | 31 | SDFileSystem sd(PTD2, PTD3, PTC5, PTD0, SD_NAME); |
bikeNomad | 7:ce27f959813b | 32 | |
bikeNomad | 0:0944c3654ded | 33 | Serial pc(USBTX, USBRX); |
bikeNomad | 0:0944c3654ded | 34 | |
bikeNomad | 8:1dd2bb31dec6 | 35 | void biggestAllocation() |
bikeNomad | 8:1dd2bb31dec6 | 36 | { |
bikeNomad | 8:1dd2bb31dec6 | 37 | size_t blksize = 16384; |
bikeNomad | 8:1dd2bb31dec6 | 38 | char *m; |
bikeNomad | 8:1dd2bb31dec6 | 39 | |
bikeNomad | 8:1dd2bb31dec6 | 40 | while (blksize > 0 && (m = (char *)malloc(blksize)) == 0) { |
bikeNomad | 8:1dd2bb31dec6 | 41 | blksize -= 1024; |
bikeNomad | 8:1dd2bb31dec6 | 42 | } |
bikeNomad | 8:1dd2bb31dec6 | 43 | |
bikeNomad | 8:1dd2bb31dec6 | 44 | char *heaptop = m + blksize; |
bikeNomad | 8:1dd2bb31dec6 | 45 | fprintf(stderr, "biggest: %u, heaptop: %p, current SP: %p, room: %u\r\n", |
bikeNomad | 8:1dd2bb31dec6 | 46 | blksize, |
bikeNomad | 8:1dd2bb31dec6 | 47 | heaptop, |
bikeNomad | 8:1dd2bb31dec6 | 48 | __current_sp(), |
bikeNomad | 8:1dd2bb31dec6 | 49 | (char *)__current_sp() - heaptop); |
bikeNomad | 8:1dd2bb31dec6 | 50 | |
bikeNomad | 8:1dd2bb31dec6 | 51 | free(m); |
bikeNomad | 8:1dd2bb31dec6 | 52 | } |
bikeNomad | 8:1dd2bb31dec6 | 53 | |
bikeNomad | 8:1dd2bb31dec6 | 54 | void dumpHeap() |
bikeNomad | 8:1dd2bb31dec6 | 55 | { |
bikeNomad | 8:1dd2bb31dec6 | 56 | biggestAllocation(); |
bikeNomad | 8:1dd2bb31dec6 | 57 | __heapstats((__heapprt)fprintf,stderr); |
bikeNomad | 8:1dd2bb31dec6 | 58 | __heapvalid((__heapprt)fprintf,stderr, 0); |
bikeNomad | 8:1dd2bb31dec6 | 59 | } |
bikeNomad | 8:1dd2bb31dec6 | 60 | |
bikeNomad | 0:0944c3654ded | 61 | int main() |
bikeNomad | 0:0944c3654ded | 62 | { |
bikeNomad | 3:00b4c1aadd30 | 63 | SongPlayer player; |
bikeNomad | 5:5b846ef42702 | 64 | pc.baud(SERIAL_BAUD); |
bikeNomad | 7:ce27f959813b | 65 | |
bikeNomad | 8:1dd2bb31dec6 | 66 | fprintf(stderr, "*** REBOOT ***\r\n"); |
bikeNomad | 8:1dd2bb31dec6 | 67 | fprintf(stderr, "sizeof Action=%u, Song=%u\r\n", sizeof(Action), sizeof(Song)); |
bikeNomad | 8:1dd2bb31dec6 | 68 | dumpHeap(); |
bikeNomad | 8:1dd2bb31dec6 | 69 | Song *song = Song::newSong("6_1_sciencefish.raw"); |
bikeNomad | 8:1dd2bb31dec6 | 70 | delete song; |
bikeNomad | 8:1dd2bb31dec6 | 71 | dumpHeap(); |
bikeNomad | 8:1dd2bb31dec6 | 72 | song = Song::newSong("2_1_i_hardly_slept.raw"); |
bikeNomad | 8:1dd2bb31dec6 | 73 | dumpHeap(); |
bikeNomad | 8:1dd2bb31dec6 | 74 | delete song; |
bikeNomad | 8:1dd2bb31dec6 | 75 | dumpHeap(); |
bikeNomad | 8:1dd2bb31dec6 | 76 | song = Song::newSong("1_1_a_sound.raw"); |
bikeNomad | 8:1dd2bb31dec6 | 77 | dumpHeap(); |
bikeNomad | 8:1dd2bb31dec6 | 78 | delete song; |
bikeNomad | 8:1dd2bb31dec6 | 79 | song = Song::newSong("4_1_GoodEvening.raw"); |
bikeNomad | 8:1dd2bb31dec6 | 80 | dumpHeap(); |
bikeNomad | 8:1dd2bb31dec6 | 81 | delete song; |
bikeNomad | 8:1dd2bb31dec6 | 82 | song = Song::newSong("5_1_listen_kid_THISONE.raw"); |
bikeNomad | 8:1dd2bb31dec6 | 83 | dumpHeap(); |
bikeNomad | 8:1dd2bb31dec6 | 84 | delete song; |
bikeNomad | 8:1dd2bb31dec6 | 85 | Song::newSong("3_1_BoatingThemeSong.raw"); |
bikeNomad | 8:1dd2bb31dec6 | 86 | dumpHeap(); |
bikeNomad | 8:1dd2bb31dec6 | 87 | delete song; |
bikeNomad | 3:00b4c1aadd30 | 88 | |
bikeNomad | 0:0944c3654ded | 89 | // read the directory |
bikeNomad | 7:ce27f959813b | 90 | DIR *bassDir = 0; |
bikeNomad | 7:ce27f959813b | 91 | while (!bassDir) { |
bikeNomad | 7:ce27f959813b | 92 | if ((bassDir = opendir(BASS_DIRECTORY)) != 0) |
bikeNomad | 7:ce27f959813b | 93 | break; |
bikeNomad | 7:ce27f959813b | 94 | pc.printf("Error opening " BASS_DIRECTORY "\r\n"); |
bikeNomad | 7:ce27f959813b | 95 | wait(1.0); |
bikeNomad | 7:ce27f959813b | 96 | } |
bikeNomad | 7:ce27f959813b | 97 | |
bikeNomad | 8:1dd2bb31dec6 | 98 | closedir(bassDir); |
bikeNomad | 0:0944c3654ded | 99 | } |
bikeNomad | 8:1dd2bb31dec6 | 100 |