this hurts
Dependencies: FFT
Diff: main.cpp
- Revision:
- 1:5dd6801bb0d6
- Parent:
- 0:d6c9b09b4042
- Child:
- 2:a6e81c45ef48
--- a/main.cpp Wed Dec 02 18:02:03 2020 +0000 +++ b/main.cpp Wed Dec 02 23:39:20 2020 +0000 @@ -17,22 +17,179 @@ DigitalOut myled(LED1); // mbed LED -void fft_calc_thread(void const* args) { - //something - //pull the array off of sd card - //vTealfft(arr, 1024); +// delete later +int sample[12][8] = { + 34085,32666,29810,29823,27514,24175,24468,32559, + 36401,33075,29037,21933,20189,21751,20975,20087, + 17530,27723,30891,21128,19982,15446,12413,13597, + 15776,14233,15622,16334,15485,17136,16389,17954, + 20349,18486,23377,34447,34400,34681,33107,31171, + 30007,33640,37007,38136,39187,38169,51831,52041, + 47831,48634,44189,43878,44743,46468,43170,47172, + 53518,52294,54825,51992,49619,48147,47901,48413, + 46049,49090,47590,46154,45423,41223,41782,54695, + 57452,51210,52462,59096,56711,52268,49364,42865, + 41483,37964,39215,35908,31570,28332,24492,23121, + 22874,18154,15541,15263,12463,12198,13301,9951 +}; + +// states for display output +const int on[8][8] = +{1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1}; + +const int high[8][8] = +{0, 0, 0, 1, 1, 0, 0, 0, +0, 0, 0, 1, 1, 0, 0, 0, +0, 0, 1, 1, 1, 1, 0, 0, +0, 1, 1, 1, 1, 1, 1, 0, +0, 1, 1, 1, 1, 1, 1, 0, +1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1}; + +const int med[8][8] = +{0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 1, 1, 0, 0, 0, +0, 0, 1, 1, 1, 1, 0, 0, +0, 0, 1, 1, 1, 1, 0, 0, +0, 1, 1, 1, 1, 1, 1, 0, +1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1}; + +const int low[8][8] = +{0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 1, 1, 1, 1, 0, 0, +0, 1, 1, 1, 1, 1, 1, 0, +1, 1, 1, 1, 1, 1, 1, 1}; + +const int off[8][8] = +{0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0}; + +void display_thread(void const* args) { + + int state = 0; + matrix.begin(0x70); + while(1) { - myled = 1; - wait(0.2); - myled = 0; - wait(0.2); + for (int a = 0; a < 12; a++) { + for (int b = 0; b < 8; b++) { + + // grab the FFT frequencies; + int freq = sample[a][b]; + + // determine state based on the FFT output range + if (freq >= 0 && freq < 10000) { + state = 5; // OFF + } else if (freq >= 10000 && freq < 25000) { + state = 4; // LOW + } else if (freq >= 25000 && freq < 40000) { + state = 3; // MED + } else if (freq >= 40000 && freq < 55000) { + state = 2; // HIGH + } else if (freq >= 55000) { + state = 1; // ON + } + + // switch statement based on the state + switch (state) { + case(1): // CASE HIGHEST + matrix.clear(); + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 8; j++) { + if (on[i][j] == 1) { + matrix.drawPixel(i, j, LED_ON); + } + } + } + matrix.writeDisplay(); + wait(1); + break; + + case(2): // CASE HIGH + matrix.clear(); + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 8; j++) { + if (high[i][j] == 1) { + matrix.drawPixel(i, j, LED_ON); + } + } + } + matrix.writeDisplay(); + wait(1); + + case(3): // CASE MEDIUM + matrix.clear(); + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 8; j++) { + if (med[i][j] == 1) { + matrix.drawPixel(i, j, LED_ON); + } + } + } + matrix.writeDisplay(); + wait(1); + break; + + case(4): // CASE LOW + matrix.clear(); + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 8; j++) { + if (low[i][j] == 1) { + matrix.drawPixel(i, j, LED_ON); + } + } + } + matrix.writeDisplay(); + wait(1); + break; + + case(5): // CASE OFF + matrix.clear(); + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 8; j++) { + if (off[i][j] == 1) { + matrix.drawPixel(i, j, LED_ON); + } + } + } + matrix.writeDisplay(); + wait(1); + break; + + default: + break; + } + + + } + } } } void speaker_thread(void const* args) { while(1) - { + { + // check helper function for new song in GUI // grab file here and put together string // string song_title = "/sd/" + "" + ".wav"; @@ -53,18 +210,13 @@ { Thread th1(speaker_thread); - Thread th2(fft_calc_thread); - - matrix.begin(0x70); + Thread th2(display_thread); + while(1) { - for (int i = 0; i < 8; i++) { - for (int j = 0; j < 8; j++) { - matrix.clear(); - matrix.drawPixel(i, j, LED_ON); - matrix.writeDisplay(); - wait(.5); - } - } + myled = 1; + wait(0.2); + myled = 0; + wait(0.2); Thread::wait(100); }