this hurts

Dependencies:   FFT

Revision:
1:5dd6801bb0d6
Parent:
0:d6c9b09b4042
Child:
2:a6e81c45ef48
diff -r d6c9b09b4042 -r 5dd6801bb0d6 main.cpp
--- 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);
     }