Senior Design: Sound Monitor / 4951

Dependencies:   LCD_fonts SPI_TFT_ILI9341 CMSIS_DSP_401_without_cm4 mbed-src SDFileSystem wavfile

Committer:
linx0576
Date:
Sat Dec 12 23:10:09 2015 +0000
Revision:
7:09354ea16403
Parent:
6:005ff6a49217
Child:
8:057ff6060e39
merge skywire and sd with menu

Who changed what in which revision?

UserRevisionLine numberNew contents of line
linx0576 0:52568bab75f8 1 #include <math.h>
linx0576 0:52568bab75f8 2 #include "stdio.h"
linx0576 0:52568bab75f8 3 #include "mbed.h"
linx0576 0:52568bab75f8 4 #include "SPI_TFT_ILI9341.h"
linx0576 0:52568bab75f8 5 #include "string"
linx0576 0:52568bab75f8 6 #include "Arial12x12.h"
linx0576 0:52568bab75f8 7 #include "Arial24x23.h"
linx0576 0:52568bab75f8 8 #include "arm_math.h"
zsaiyed 4:e1ec41710eb4 9 #include "SDFileSystem.h"
linx0576 6:005ff6a49217 10 //#include "main.h"
linx0576 6:005ff6a49217 11 #define samplenum 128
linx0576 6:005ff6a49217 12
linx0576 3:7edb43f86069 13 DigitalIn ain1(PC_9);
linx0576 3:7edb43f86069 14 DigitalIn ain2(PB_15);
linx0576 3:7edb43f86069 15 DigitalIn ain3(PC_7);
linx0576 3:7edb43f86069 16 DigitalIn ain4(PC_6);
linx0576 3:7edb43f86069 17 DigitalIn ain5(PC_8);
linx0576 6:005ff6a49217 18
linx0576 0:52568bab75f8 19 /** External Input and Output buffer Declarations for FFT Bin Example **/
linx0576 1:f1f3dfff9107 20 //static float32_t testInput_f32_10khz[num];
linx0576 1:f1f3dfff9107 21
linx0576 0:52568bab75f8 22 /** Global variables for FFT Bin Example **/
linx0576 6:005ff6a49217 23
linx0576 0:52568bab75f8 24 uint32_t ifftFlag = 0;
linx0576 0:52568bab75f8 25 uint32_t doBitReverse = 1;
linx0576 0:52568bab75f8 26
linx0576 0:52568bab75f8 27 /* Reference index at which max energy of bin ocuurs */
linx0576 0:52568bab75f8 28 uint32_t refIndex = 213, testIndex = 0;
linx0576 6:005ff6a49217 29
linx0576 0:52568bab75f8 30 extern unsigned char p1[]; // the mbed logo
linx0576 6:005ff6a49217 31 const float32_t a[samplenum] = { -0.865129623056441, -2.655020678073846, 0.600664612949661, 0.080378093886515, -2.899160484012034, 2.563004262857762, 3.078328403304206, 0.105906778385130,
linx0576 0:52568bab75f8 32 0.048366940168201, -0.145696461188734, -0.023417155362879, 2.127729174988954, -1.176633086028377, 3.690223557991855, -0.622791766173194, 0.722837373872203,
linx0576 0:52568bab75f8 33 2.739754205367484, -0.062610410524552, -0.891296810967338, -1.845872258871811, 1.195039415434387, -2.177388969045026, 1.078649103637905, 2.570976050490193,
linx0576 0:52568bab75f8 34 -1.383551403404574, 2.392141424058873, 2.858002843205065, -3.682433899725536, -3.488146646451150, 1.323468578888120, -0.099771155430726, 1.561168082500454,
linx0576 0:52568bab75f8 35 1.025026795103179, 0.928841900171200, 2.930499509864950, 2.013349089766430, 2.381676148486737, -3.081062307950236, -0.389579115537544, 0.181540149166620,
linx0576 0:52568bab75f8 36 -2.601953341353208, 0.333435137783218, -2.812945856162965, 2.649109640172910, -1.003963025744654, 1.552460768755035, 0.088641345335247, -2.519951327113426,
linx0576 0:52568bab75f8 37 -4.341348988610527, 0.557772429359965, -1.671267412948494, 0.733951350960387, 0.409263788034864, 3.566033071952806, 1.882565173848352, -1.106017073793287,
linx0576 0:52568bab75f8 38 0.154456720778718, -2.513205795512153, 0.310978660939421, 0.579706500111723, 0.000086383683251, -1.311866980897721, 1.840007477574986, -3.253005768451345,
linx0576 0:52568bab75f8 39 1.462584328739432, 1.610103610851738, 0.761914676858907, 0.974541361089834, 0.686845845885983, 1.849153122025191, 0.787800410401453, -1.187438909666279,
linx0576 0:52568bab75f8 40 -0.754937911044720, 0.084373858395232, -2.600269011710521, -0.962982842142644, -0.369328108540868, 0.810791418361879, 3.587016488699641, -0.520776145083723,
linx0576 0:52568bab75f8 41 0.640249919627884, 1.103122489464969, 2.231779881455556, -1.308035392685241, 0.424070304330106, -0.200383932651189, -2.365526783356541, -0.989114757436628,
linx0576 0:52568bab75f8 42 2.770807688959777, -0.444172737462307, 0.079760979374078, -0.005199118412183, -0.664712668309527, -0.624171857561896, 0.537306979007338, -2.575955675497642,
linx0576 0:52568bab75f8 43 1.562363235756780, 1.814069369848895, -1.293428583392509, -1.026188449495686, -2.981771815588717, -4.223468103075124, 2.672674782004045, -0.856096801117735,
linx0576 0:52568bab75f8 44 0.048517345512563, -0.026860721136222, 0.392932277758187, -1.331740855093099, -1.894292129477081, -1.425006468460681, -2.721772427617057, -1.616831100216806,
linx0576 0:52568bab75f8 45 3.551177651488947, -0.069685667896087, -3.134634907409102, -0.263627598944639, -1.650469945991350, -2.203580339374399, -0.872203246123242, 1.230782812607287,
linx0576 0:52568bab75f8 46 0.257288860093291, 1.989083106173137, -1.985638729453261, -1.416185105842892, -1.131097688325772, -2.245130805416057, -1.938873996219074, 2.043608361562645,
linx0576 0:52568bab75f8 47 };
linx0576 6:005ff6a49217 48 const float32_t b[samplenum] = { -0.865129623056441, -2.655020678073846, 0.600664612949661, 0.080378093886515, -2.899160484012034, 2.563004262857762, 3.078328403304206, 0.105906778385130,
linx0576 0:52568bab75f8 49 0.048366940168201, -0.145696461188734, -0.023417155362879, 2.127729174988954, -1.176633086028377, 3.690223557991855, -0.622791766173194, 0.722837373872203,
linx0576 0:52568bab75f8 50 2.739754205367484, -0.062610410524552, -0.891296810967338, -1.845872258871811, 1.195039415434387, -2.177388969045026, 1.078649103637905, 2.570976050490193,
linx0576 0:52568bab75f8 51 -1.383551403404574, 2.392141424058873, 2.858002843205065, -3.682433899725536, -0.369328108540868, 0.810791418361879, 3.587016488699641, -0.520776145083723,
linx0576 0:52568bab75f8 52 0.640249919627884, 1.103122489464969, 2.231779881455556, -1.308035392685241, 0.424070304330106, -0.200383932651189, -2.365526783356541, -0.989114757436628,
linx0576 0:52568bab75f8 53 2.770807688959777, -0.444172737462307, 0.079760979374078, -0.005199118412183, -0.664712668309527, -0.624171857561896, 0.537306979007338, -2.575955675497642,
linx0576 0:52568bab75f8 54 1.562363235756780, 1.814069369848895, -1.293428583392509, -1.026188449495686, -2.981771815588717, -4.223468103075124, 2.672674782004045, -0.856096801117735,
linx0576 0:52568bab75f8 55 0.048517345512563, -0.026860721136222, 0.392932277758187, -1.331740855093099, -1.894292129477081, -1.425006468460681, -2.721772427617057, -1.616831100216806,
linx0576 0:52568bab75f8 56 3.551177651488947, -0.069685667896087, -3.134634907409102, -0.263627598944639, -1.650469945991350, -2.203580339374399, -0.872203246123242, 1.230782812607287,
linx0576 0:52568bab75f8 57 0.257288860093291, 1.989083106173137, -1.985638729453261, -1.416185105842892, -1.131097688325772, -2.245130805416057, -1.938873996219074, 2.043608361562645,
linx0576 0:52568bab75f8 58 -3.488146646451150, 1.323468578888120, -0.099771155430726, 1.561168082500454, 1.025026795103179, 0.928841900171200, 2.930499509864950, 2.013349089766430,
linx0576 0:52568bab75f8 59 2.381676148486737, -3.081062307950236, -0.389579115537544, 0.181540149166620, -2.601953341353208, 0.333435137783218, -2.812945856162965, 2.649109640172910,
linx0576 0:52568bab75f8 60 -1.003963025744654, 1.552460768755035, 0.088641345335247, -2.519951327113426, -4.341348988610527, 0.557772429359965, -1.671267412948494, 0.733951350960387,
linx0576 0:52568bab75f8 61 0.409263788034864, 3.566033071952806, 1.882565173848352, -1.106017073793287, 0.154456720778718, -2.513205795512153, 0.310978660939421, 0.579706500111723,
linx0576 0:52568bab75f8 62 0.000086383683251, -1.311866980897721, 1.840007477574986, -3.253005768451345, 1.462584328739432, 1.610103610851738, 0.761914676858907, 0.974541361089834,
linx0576 0:52568bab75f8 63 0.686845845885983, 1.849153122025191, 0.787800410401453, -1.187438909666279, -0.754937911044720, 0.084373858395232, -2.600269011710521, -0.962982842142644,
linx0576 0:52568bab75f8 64 };
linx0576 6:005ff6a49217 65 float32_t subOutput, SquareOutput; //321321
linx0576 6:005ff6a49217 66 float32_t a1, b1;
linx0576 6:005ff6a49217 67 float32_t SubOutMSE, SquareOutMSE, SubOutST, SquareOutST;
linx0576 6:005ff6a49217 68 int h=0; // 321 h = hr, m = min, for interval
linx0576 6:005ff6a49217 69 int m=0;
linx0576 6:005ff6a49217 70 int i=h;
linx0576 6:005ff6a49217 71 int j=m;
linx0576 6:005ff6a49217 72
linx0576 2:afdb1aaa7608 73 //SPI_TFT_ILI9341 TFT(D11, D12, D13, D10, D8, D9, "TFT"); // mosi, miso, sclk, cs, reset, dc
linx0576 2:afdb1aaa7608 74 SPI_TFT_ILI9341 TFT(PC_3, PC_2, PB_10, PB_12, PA_8, PA_11, "TFT"); // mosi, miso, sclk, cs, reset, dc
zsaiyed 4:e1ec41710eb4 75 SDFileSystem sd(PB_5, PB_4, PB_3, PC_11, "sd"); // mosi, miso, sclk, cs
linx0576 7:09354ea16403 76
linx0576 7:09354ea16403 77 DigitalOut skywire_en(PA_6);
linx0576 7:09354ea16403 78 //DigitalOut skywire_rts(PA_7);
linx0576 7:09354ea16403 79 Serial skywire(PA_0,PA_1);
linx0576 7:09354ea16403 80
linx0576 7:09354ea16403 81 volatile int rx_in=0;
linx0576 7:09354ea16403 82 volatile int rx_out=0;
linx0576 7:09354ea16403 83 const int buffer_size = 255;
linx0576 7:09354ea16403 84 char rx_buffer[buffer_size+1];
linx0576 7:09354ea16403 85 char rx_line[buffer_size];
linx0576 7:09354ea16403 86
linx0576 7:09354ea16403 87 void read_line()
linx0576 7:09354ea16403 88 {
linx0576 7:09354ea16403 89 int i;
linx0576 7:09354ea16403 90 i = 0;
linx0576 7:09354ea16403 91 // Start Critical Section - don't interrupt while changing global buffer variables
linx0576 7:09354ea16403 92 __disable_irq();
linx0576 7:09354ea16403 93 // Loop reading rx buffer characters until end of line character
linx0576 7:09354ea16403 94 while ((i==0) || ((rx_line[i-1] != '\r') && (rx_line[i-1] != '\n'))) {
linx0576 7:09354ea16403 95 // Wait if buffer empty
linx0576 7:09354ea16403 96 if (rx_in == rx_out) {
linx0576 7:09354ea16403 97 // End Critical Section - need to allow rx interrupt to get new characters for buffer
linx0576 7:09354ea16403 98 __enable_irq();
linx0576 7:09354ea16403 99 while (rx_in == rx_out) {
linx0576 7:09354ea16403 100 }
linx0576 7:09354ea16403 101 // Start Critical Section - don't interrupt while changing global buffer variables
linx0576 7:09354ea16403 102 __disable_irq();
linx0576 7:09354ea16403 103 }
linx0576 7:09354ea16403 104 rx_line[i] = rx_buffer[rx_out];
linx0576 7:09354ea16403 105 i++;
linx0576 7:09354ea16403 106 rx_out = (rx_out + 1) % buffer_size;
linx0576 7:09354ea16403 107 }
linx0576 7:09354ea16403 108 // End Critical Section
linx0576 7:09354ea16403 109 __enable_irq();
linx0576 7:09354ea16403 110 rx_line[i-1] = 0;
linx0576 7:09354ea16403 111 return;
linx0576 7:09354ea16403 112 }
linx0576 7:09354ea16403 113
linx0576 7:09354ea16403 114 int WaitForResponse(char* response)
linx0576 7:09354ea16403 115 {
linx0576 7:09354ea16403 116 do {
linx0576 7:09354ea16403 117 do {
linx0576 7:09354ea16403 118 read_line();
linx0576 7:09354ea16403 119 } while ((unsigned char)rx_line[0] <= 32);
linx0576 7:09354ea16403 120 // debug_pc.printf("Waiting for: %s, Received: %s\r\n", response, rx_line);
linx0576 7:09354ea16403 121 } while (strncmp(rx_line, response, strlen(response)));
linx0576 7:09354ea16403 122 return 0;
linx0576 7:09354ea16403 123 }
linx0576 7:09354ea16403 124
linx0576 7:09354ea16403 125 void Skywire_Rx_interrupt()
linx0576 7:09354ea16403 126 {
linx0576 7:09354ea16403 127 // Loop just in case more than one character is in UART's receive FIFO buffer
linx0576 7:09354ea16403 128 // Stop if buffer full
linx0576 7:09354ea16403 129 while ((skywire.readable()) && (((rx_in + 1) % buffer_size) != rx_out)) {
linx0576 7:09354ea16403 130 rx_buffer[rx_in] = skywire.getc();
linx0576 7:09354ea16403 131 rx_in = (rx_in + 1) % buffer_size;
linx0576 7:09354ea16403 132 }
linx0576 7:09354ea16403 133 return;
linx0576 7:09354ea16403 134 }
linx0576 7:09354ea16403 135
linx0576 0:52568bab75f8 136 int main()
linx0576 1:f1f3dfff9107 137 {
linx0576 6:005ff6a49217 138 /* int stage=0;
linx0576 3:7edb43f86069 139 int menu=0;
linx0576 3:7edb43f86069 140 float32_t mean=0;
linx0576 3:7edb43f86069 141 float32_t mse=0;
linx0576 3:7edb43f86069 142 float32_t st=0;
linx0576 3:7edb43f86069 143 TFT.claim(stdout); // send stdout to the TFT display
linx0576 3:7edb43f86069 144 TFT.claim(stderr); // send stderr to the TFT display
linx0576 3:7edb43f86069 145 TFT.set_orientation(2); // comment out = "||" include = "="
linx0576 3:7edb43f86069 146 TFT.background(Black); // set background to black
linx0576 3:7edb43f86069 147 TFT.foreground(White); // set chars to white
linx0576 0:52568bab75f8 148 TFT.cls(); // clear the screen
linx0576 6:005ff6a49217 149 */
linx0576 6:005ff6a49217 150
linx0576 6:005ff6a49217 151 float32_t mean=0; //321321
linx0576 6:005ff6a49217 152 float32_t mse=0;
linx0576 6:005ff6a49217 153 float32_t st=0;
linx0576 6:005ff6a49217 154
linx0576 6:005ff6a49217 155
linx0576 6:005ff6a49217 156 int stage=0;
linx0576 6:005ff6a49217 157 int menu=0;
linx0576 6:005ff6a49217 158 int config=0;
linx0576 6:005ff6a49217 159 int set=0;
linx0576 6:005ff6a49217 160 int comp=0;
linx0576 6:005ff6a49217 161 float32_t stmean=0;
linx0576 6:005ff6a49217 162 float32_t stmse=0;
linx0576 6:005ff6a49217 163 float32_t stst=0;
linx0576 6:005ff6a49217 164 char log[10][32];
linx0576 6:005ff6a49217 165 float32_t mselog[10] = {NULL};
linx0576 6:005ff6a49217 166 set_time(1448935737); // Set RTC time to Dec 01 2015 02:09 AM
linx0576 6:005ff6a49217 167 int pu, pd, ps; // LL left & right
linx0576 6:005ff6a49217 168 TFT.claim(stdout); // send stdout to the TFT display
linx0576 6:005ff6a49217 169 TFT.claim(stderr); // send stderr to the TFT display
linx0576 6:005ff6a49217 170 TFT.set_orientation(2);
linx0576 6:005ff6a49217 171 TFT.background(Black); // set background to black
linx0576 6:005ff6a49217 172 TFT.foreground(White); // set chars to white
linx0576 6:005ff6a49217 173 TFT.cls(); // clear the screen
linx0576 3:7edb43f86069 174
linx0576 3:7edb43f86069 175
linx0576 1:f1f3dfff9107 176 while(1)
linx0576 6:005ff6a49217 177 {
linx0576 6:005ff6a49217 178 if (stage==0) { //menu
linx0576 1:f1f3dfff9107 179 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 180 TFT.locate(19,60);
linx0576 6:005ff6a49217 181 TFT.foreground(White);
linx0576 6:005ff6a49217 182 printf("Configuration");
linx0576 6:005ff6a49217 183 TFT.locate(50,110);
linx0576 6:005ff6a49217 184 TFT.printf("Waveform");
linx0576 6:005ff6a49217 185 TFT.locate(95,160);
linx0576 6:005ff6a49217 186 TFT.printf("Log");
linx0576 6:005ff6a49217 187 // wait_LowPow(3); // Wait 3s in low power mode, seems just hold display
linx0576 6:005ff6a49217 188 if (set==0) {
linx0576 6:005ff6a49217 189 TFT.locate(70,260);
linx0576 6:005ff6a49217 190 TFT.foreground(DarkGrey);
linx0576 6:005ff6a49217 191 printf("START");
linx0576 6:005ff6a49217 192 }
linx0576 6:005ff6a49217 193 if (set==1) {
linx0576 6:005ff6a49217 194 TFT.locate(70,260);
linx0576 6:005ff6a49217 195 TFT.foreground(White);
linx0576 6:005ff6a49217 196 printf("START");
linx0576 1:f1f3dfff9107 197 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 198 TFT.locate(30, 240);
linx0576 6:005ff6a49217 199 printf("interval: %i hr %i min", h, m);
linx0576 6:005ff6a49217 200 }
linx0576 6:005ff6a49217 201
linx0576 6:005ff6a49217 202 if (menu==0) { //Configuration
linx0576 6:005ff6a49217 203 TFT.rect(13,55,225,85,Green);
linx0576 6:005ff6a49217 204 TFT.rect(13,105,225,135,Black);
linx0576 6:005ff6a49217 205 pu = ain1.read();
linx0576 6:005ff6a49217 206 pd = ain2.read();
linx0576 6:005ff6a49217 207 ps = ain3.read();
linx0576 6:005ff6a49217 208 if (pd==1) {
linx0576 6:005ff6a49217 209 wait(0.5);
linx0576 6:005ff6a49217 210 menu=1;
linx0576 6:005ff6a49217 211 }
linx0576 6:005ff6a49217 212 if (ps==1) {
linx0576 6:005ff6a49217 213 wait(0.5);
linx0576 6:005ff6a49217 214 TFT.cls();
linx0576 6:005ff6a49217 215 stage=1;
linx0576 6:005ff6a49217 216 }
linx0576 6:005ff6a49217 217 }
linx0576 6:005ff6a49217 218
linx0576 6:005ff6a49217 219 if (menu==1) { //waveform
linx0576 6:005ff6a49217 220 TFT.rect(13,55,225,85,Black);
linx0576 6:005ff6a49217 221 TFT.rect(13,105,225,135,Green);
linx0576 6:005ff6a49217 222 TFT.rect(13,155,225,185,Black);
linx0576 6:005ff6a49217 223 pu = ain1.read();
linx0576 6:005ff6a49217 224 pd = ain2.read();
linx0576 6:005ff6a49217 225 ps = ain3.read();
linx0576 6:005ff6a49217 226 if (pu==1) {
linx0576 6:005ff6a49217 227 wait(0.5);
linx0576 6:005ff6a49217 228 menu=0;
linx0576 6:005ff6a49217 229 }
linx0576 6:005ff6a49217 230 if (pd==1) {
linx0576 6:005ff6a49217 231 wait(0.5);
linx0576 6:005ff6a49217 232 menu=2;
linx0576 1:f1f3dfff9107 233 }
linx0576 6:005ff6a49217 234 if (ps==1) {
linx0576 6:005ff6a49217 235 wait(0.5);
linx0576 6:005ff6a49217 236 TFT.cls();
linx0576 6:005ff6a49217 237 stage=2;
linx0576 6:005ff6a49217 238 }
linx0576 6:005ff6a49217 239 }
linx0576 6:005ff6a49217 240
linx0576 6:005ff6a49217 241 if (menu==2) { //log
linx0576 6:005ff6a49217 242 TFT.rect(13,105,225,135,Black);
linx0576 6:005ff6a49217 243 TFT.rect(13,155,225,185,Green);
linx0576 6:005ff6a49217 244 TFT.rect(13,255,225,285,Black);
linx0576 6:005ff6a49217 245 pu = ain1.read();
linx0576 6:005ff6a49217 246 pd = ain2.read();
linx0576 6:005ff6a49217 247 ps = ain3.read();
linx0576 6:005ff6a49217 248 if (pu==1) {
linx0576 6:005ff6a49217 249 wait(0.5);
linx0576 6:005ff6a49217 250 menu=1;
linx0576 6:005ff6a49217 251 }
linx0576 6:005ff6a49217 252 if ((pd==1)&&(set==1)) {
linx0576 6:005ff6a49217 253 wait(0.5);
linx0576 6:005ff6a49217 254 menu=3;
linx0576 1:f1f3dfff9107 255 }
linx0576 6:005ff6a49217 256 if (ps==1) {
linx0576 6:005ff6a49217 257 wait(0.5);
linx0576 6:005ff6a49217 258 TFT.cls();
linx0576 6:005ff6a49217 259 stage=3;
linx0576 1:f1f3dfff9107 260 }
linx0576 6:005ff6a49217 261 }
linx0576 6:005ff6a49217 262
linx0576 6:005ff6a49217 263 if (menu==3) { //START
linx0576 6:005ff6a49217 264 TFT.rect(13,155,225,185,Black);
linx0576 6:005ff6a49217 265 TFT.rect(13,255,225,285,Green);
linx0576 6:005ff6a49217 266 pu = ain1.read();
linx0576 6:005ff6a49217 267 pd = ain2.read();
linx0576 6:005ff6a49217 268 ps = ain3.read();
linx0576 6:005ff6a49217 269 if (pu==1) {
linx0576 6:005ff6a49217 270 wait(0.5);
linx0576 6:005ff6a49217 271 menu=2;
linx0576 6:005ff6a49217 272 }
linx0576 6:005ff6a49217 273 if (ps==1) {
linx0576 6:005ff6a49217 274 wait(0.5);
linx0576 6:005ff6a49217 275 TFT.cls();
linx0576 6:005ff6a49217 276 stage=5;
linx0576 1:f1f3dfff9107 277 }
linx0576 1:f1f3dfff9107 278 }
linx0576 1:f1f3dfff9107 279 }
linx0576 3:7edb43f86069 280
linx0576 6:005ff6a49217 281 if (stage==1) { //Configuration
linx0576 6:005ff6a49217 282 int ia, ib, ja, jb;
linx0576 6:005ff6a49217 283
linx0576 6:005ff6a49217 284 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 285 TFT.locate(20,55);
linx0576 6:005ff6a49217 286 TFT.foreground(White);
linx0576 6:005ff6a49217 287 printf("SET PERIOD");
linx0576 6:005ff6a49217 288 TFT.rect(15,50, 220,80,Red);
linx0576 6:005ff6a49217 289 TFT.locate(70,120);
linx0576 6:005ff6a49217 290 TFT.printf("Hr Min");
linx0576 6:005ff6a49217 291 TFT.locate(10,200);
linx0576 6:005ff6a49217 292 printf("Record Control");
linx0576 6:005ff6a49217 293 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 294 if (comp==1) {
linx0576 6:005ff6a49217 295 TFT.locate(50,233);
linx0576 6:005ff6a49217 296 printf("comparison saved");
linx0576 6:005ff6a49217 297 }
linx0576 6:005ff6a49217 298
linx0576 6:005ff6a49217 299 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 300 TFT.locate(40,300);
linx0576 6:005ff6a49217 301 printf("Set");
linx0576 6:005ff6a49217 302 TFT.locate(165,300);
linx0576 6:005ff6a49217 303 printf("Return");
linx0576 6:005ff6a49217 304 TFT.rect(22,115, 68,145,Olive);
linx0576 6:005ff6a49217 305 TFT.rect(117,115,163,145,Olive);
linx0576 6:005ff6a49217 306 TFT.rect(5,195, 230,225,Olive);
linx0576 6:005ff6a49217 307 TFT.rect(15,295,85,315,Olive);
linx0576 6:005ff6a49217 308 TFT.rect(150,295,220,315,Olive);
linx0576 6:005ff6a49217 309
linx0576 6:005ff6a49217 310 while (stage==1) {
linx0576 6:005ff6a49217 311 ia=i-1;
linx0576 6:005ff6a49217 312 if (i==0) ia=23;
linx0576 6:005ff6a49217 313 ib=i+1;
linx0576 6:005ff6a49217 314 if (i==23) ib=0;
linx0576 6:005ff6a49217 315 ja=j-1;
linx0576 6:005ff6a49217 316 if (j==0) ja=59;
linx0576 6:005ff6a49217 317 jb=j+1;
linx0576 6:005ff6a49217 318 if (j==59) jb=00;
linx0576 6:005ff6a49217 319
linx0576 6:005ff6a49217 320 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 321 TFT.locate(26,120);
linx0576 6:005ff6a49217 322 if (i<10) TFT.printf("0%i", i);
linx0576 6:005ff6a49217 323 else if (i>=10) TFT.printf("%i", i);
linx0576 6:005ff6a49217 324 TFT.locate(120,120);
linx0576 6:005ff6a49217 325 if (j<10) TFT.printf("0%i", j);
linx0576 6:005ff6a49217 326 else if (j>=10) TFT.printf("%i", j);
linx0576 6:005ff6a49217 327
linx0576 6:005ff6a49217 328 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 329 TFT.locate(40,100);
linx0576 6:005ff6a49217 330 if (ia<10) TFT.printf("0%i", ia);
linx0576 6:005ff6a49217 331 else if (ia>=10) TFT.printf("%i", ia);
linx0576 6:005ff6a49217 332 TFT.locate(40,150);
linx0576 6:005ff6a49217 333 if (ib<10) TFT.printf("0%i", ib);
linx0576 6:005ff6a49217 334 else if (ib>=10) TFT.printf("%i", ib);
linx0576 6:005ff6a49217 335 TFT.locate(135,100);
linx0576 6:005ff6a49217 336 if (ja<10) TFT.printf("0%i", ja);
linx0576 6:005ff6a49217 337 else if (ja>=10) TFT.printf("%i", ja);
linx0576 6:005ff6a49217 338 TFT.locate(135,150);
linx0576 6:005ff6a49217 339 if (jb<10) TFT.printf("0%i", jb);
linx0576 6:005ff6a49217 340 else if (jb>=10) TFT.printf("%i", jb);
linx0576 6:005ff6a49217 341
linx0576 6:005ff6a49217 342 if (config==0) { //hour
linx0576 6:005ff6a49217 343 TFT.rect(22,115, 68,145,Green);
linx0576 6:005ff6a49217 344 TFT.rect(117,115,163,145,Olive);
linx0576 6:005ff6a49217 345 TFT.rect(5,195, 230,225,Olive);
linx0576 6:005ff6a49217 346 pu = ain1.read();
linx0576 6:005ff6a49217 347 pd = ain2.read();
linx0576 6:005ff6a49217 348 ps = ain3.read();
linx0576 6:005ff6a49217 349 if (pu==1) {
linx0576 6:005ff6a49217 350 wait(0.5);
linx0576 6:005ff6a49217 351 i=ib;
linx0576 6:005ff6a49217 352 }
linx0576 6:005ff6a49217 353 if (pd==1) {
linx0576 6:005ff6a49217 354 wait(0.5);
linx0576 6:005ff6a49217 355 i=ia;
linx0576 6:005ff6a49217 356 }
linx0576 6:005ff6a49217 357 if (ps==1) {
linx0576 6:005ff6a49217 358 wait(0.5);
linx0576 6:005ff6a49217 359 config=1;
linx0576 6:005ff6a49217 360 }
linx0576 6:005ff6a49217 361 }
linx0576 6:005ff6a49217 362 if (config==1) { //min
linx0576 6:005ff6a49217 363 TFT.rect(22,115, 68,145,Olive);
linx0576 6:005ff6a49217 364 TFT.rect(117,115,163,145,Green);
linx0576 6:005ff6a49217 365 TFT.rect(5,195, 230,225,Olive);
linx0576 6:005ff6a49217 366 pu = ain1.read();
linx0576 6:005ff6a49217 367 pd = ain2.read();
linx0576 6:005ff6a49217 368 ps = ain3.read();
linx0576 6:005ff6a49217 369 if (pu==1) {
linx0576 6:005ff6a49217 370 wait(0.5);
linx0576 6:005ff6a49217 371 j=jb;
linx0576 6:005ff6a49217 372 }
linx0576 6:005ff6a49217 373 if (pd==1) {
linx0576 6:005ff6a49217 374 wait(0.5);
linx0576 6:005ff6a49217 375 j=ja;
linx0576 6:005ff6a49217 376 }
linx0576 6:005ff6a49217 377 if (ps==1) {
linx0576 6:005ff6a49217 378 wait(0.5);
linx0576 6:005ff6a49217 379 config=2;
linx0576 6:005ff6a49217 380 }
linx0576 6:005ff6a49217 381 }
linx0576 6:005ff6a49217 382 if (config==2) { //Record Control
linx0576 6:005ff6a49217 383 TFT.rect(22,115, 68,145,Olive);
linx0576 6:005ff6a49217 384 TFT.rect(117,115,163,145,Olive);
linx0576 6:005ff6a49217 385 TFT.rect(5,195, 230,225,Green);
linx0576 6:005ff6a49217 386 TFT.rect(15,295,85,315,Olive);
linx0576 6:005ff6a49217 387 TFT.rect(150,295,220,315,Olive);
linx0576 6:005ff6a49217 388 pu = ain1.read();
linx0576 6:005ff6a49217 389 pd = ain2.read();
linx0576 6:005ff6a49217 390 ps = ain3.read();
linx0576 6:005ff6a49217 391 if (pu==1) {
linx0576 6:005ff6a49217 392 wait(0.5);
linx0576 6:005ff6a49217 393 config=0;
linx0576 6:005ff6a49217 394 }
linx0576 6:005ff6a49217 395 if (pd==1) {
linx0576 6:005ff6a49217 396 wait(0.5);
linx0576 6:005ff6a49217 397 config=3;
linx0576 6:005ff6a49217 398 }
linx0576 6:005ff6a49217 399 if (ps==1) {
linx0576 6:005ff6a49217 400 wait(0.5);
linx0576 6:005ff6a49217 401 TFT.cls();
linx0576 6:005ff6a49217 402 stage=4;
linx0576 6:005ff6a49217 403 }
linx0576 6:005ff6a49217 404 }
linx0576 6:005ff6a49217 405 if (config==3) { //set
linx0576 6:005ff6a49217 406 TFT.rect(5,195, 230,225,Olive);
linx0576 6:005ff6a49217 407 TFT.rect(15,295,85,315,Green);
linx0576 6:005ff6a49217 408 TFT.rect(150,295,220,315,Olive);
linx0576 6:005ff6a49217 409 pu = ain1.read();
linx0576 6:005ff6a49217 410 pd = ain2.read();
linx0576 6:005ff6a49217 411 ps = ain3.read();
linx0576 6:005ff6a49217 412 if (pu==1) {
linx0576 6:005ff6a49217 413 wait(0.5);
linx0576 6:005ff6a49217 414 config=2;
linx0576 6:005ff6a49217 415 }
linx0576 6:005ff6a49217 416 if (pd==1) {
linx0576 6:005ff6a49217 417 wait(0.5);
linx0576 6:005ff6a49217 418 config=4;
linx0576 6:005ff6a49217 419 }
linx0576 6:005ff6a49217 420 if (ps==1) {
linx0576 6:005ff6a49217 421 wait(0.5);
linx0576 6:005ff6a49217 422 TFT.cls();
linx0576 6:005ff6a49217 423 if ((i!=0) || (j!=0)) {
linx0576 6:005ff6a49217 424 h=i;
linx0576 6:005ff6a49217 425 m=j;
linx0576 6:005ff6a49217 426 set=1; //if "set", use new hr and min, and set=1 for "START"
linx0576 6:005ff6a49217 427 }
linx0576 6:005ff6a49217 428 stage=0;
linx0576 6:005ff6a49217 429 }
linx0576 6:005ff6a49217 430 }
linx0576 6:005ff6a49217 431 if (config==4) { //return
linx0576 6:005ff6a49217 432 TFT.rect(5,195, 230,225,Olive);
linx0576 6:005ff6a49217 433 TFT.rect(15,295,85,315,Olive);
linx0576 6:005ff6a49217 434 TFT.rect(150,295,220,315,Green);
linx0576 6:005ff6a49217 435 pu = ain1.read();
linx0576 6:005ff6a49217 436 pd = ain2.read();
linx0576 6:005ff6a49217 437 ps = ain3.read();
linx0576 6:005ff6a49217 438 if (pu==1) {
linx0576 6:005ff6a49217 439 wait(0.5);
linx0576 6:005ff6a49217 440 config=3;
linx0576 6:005ff6a49217 441 }
linx0576 6:005ff6a49217 442 if (pd==1) {
linx0576 6:005ff6a49217 443 wait(0.5);
linx0576 6:005ff6a49217 444 config=4;
linx0576 6:005ff6a49217 445 }
linx0576 6:005ff6a49217 446 if (ps==1) {
linx0576 6:005ff6a49217 447 wait(0.5);
linx0576 6:005ff6a49217 448 TFT.cls();
linx0576 6:005ff6a49217 449 stage=0;
linx0576 6:005ff6a49217 450 }
linx0576 6:005ff6a49217 451 }
linx0576 6:005ff6a49217 452 }
linx0576 6:005ff6a49217 453 }
linx0576 6:005ff6a49217 454
linx0576 6:005ff6a49217 455
linx0576 6:005ff6a49217 456 if (stage==2) { //waveform
linx0576 6:005ff6a49217 457 int abc, x2, y2;
linx0576 6:005ff6a49217 458 int def = 0;
linx0576 6:005ff6a49217 459 int ijk = 0;
linx0576 1:f1f3dfff9107 460 int x1 = 0;
linx0576 6:005ff6a49217 461 int y1 = 80;
linx0576 6:005ff6a49217 462
linx0576 6:005ff6a49217 463 for(abc=0; abc<samplenum; abc=abc+4) // waveform
linx0576 6:005ff6a49217 464 { a1 = a[abc];
linx0576 1:f1f3dfff9107 465 x2 = abc*2;
linx0576 1:f1f3dfff9107 466 y2 = 80+a1*10;
linx0576 1:f1f3dfff9107 467 TFT.line(x1,y1,x2,y2,Green);
linx0576 1:f1f3dfff9107 468 x1 = x2;
linx0576 3:7edb43f86069 469 y1 = y2;
linx0576 1:f1f3dfff9107 470 }
linx0576 6:005ff6a49217 471
linx0576 1:f1f3dfff9107 472 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 473 TFT.foreground(White);
linx0576 3:7edb43f86069 474 TFT.locate(10,130);
linx0576 6:005ff6a49217 475 TFT.printf("Samples number: \n %i", samplenum);
linx0576 3:7edb43f86069 476 TFT.locate(10,160);
linx0576 6:005ff6a49217 477 TFT.printf("Sample Mean Value: \n %f", stmean);
linx0576 1:f1f3dfff9107 478 TFT.locate(10,190);
linx0576 6:005ff6a49217 479 TFT.printf("Standard Deviation: \n %f", stst);
linx0576 3:7edb43f86069 480 TFT.locate(10,220);
linx0576 6:005ff6a49217 481 TFT.printf("Mean Square Error: \n %f", stmse);
linx0576 6:005ff6a49217 482
linx0576 1:f1f3dfff9107 483 TFT.locate(165,270);
linx0576 1:f1f3dfff9107 484 printf("Return");
linx0576 6:005ff6a49217 485 TFT.rect(150,265,220,285,Green);
linx0576 6:005ff6a49217 486 ps = ain3.read();
linx0576 6:005ff6a49217 487 if (ps==1) {
linx0576 6:005ff6a49217 488 wait(0.5);
linx0576 6:005ff6a49217 489 TFT.cls();
linx0576 6:005ff6a49217 490 stage=0;
linx0576 6:005ff6a49217 491 }
linx0576 6:005ff6a49217 492 }
linx0576 6:005ff6a49217 493
linx0576 6:005ff6a49217 494 if (stage==3) { //log
linx0576 6:005ff6a49217 495 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 496 TFT.locate(0,10);
linx0576 6:005ff6a49217 497 TFT.foreground(White);
linx0576 7:09354ea16403 498
linx0576 7:09354ea16403 499
linx0576 7:09354ea16403 500 //Configure CRC, large frames, and write validation for SD Card
linx0576 7:09354ea16403 501 sd.crc(true);
linx0576 7:09354ea16403 502 sd.large_frames(true);
linx0576 7:09354ea16403 503 sd.write_validation(true);
linx0576 7:09354ea16403 504
linx0576 7:09354ea16403 505 //Try to mount the SD card
linx0576 7:09354ea16403 506 TFT.locate(10,50);
linx0576 7:09354ea16403 507 TFT.printf("Mounting SD card...");
linx0576 7:09354ea16403 508 TFT.locate(10,60);
linx0576 7:09354ea16403 509 int row = 50;
linx0576 7:09354ea16403 510 int col = 10;
linx0576 7:09354ea16403 511 TFT.locate(10,row); TFT.printf("Mounting SD card..."); row+=10;
linx0576 7:09354ea16403 512 if (sd.mount() != 0) {
linx0576 7:09354ea16403 513 TFT.printf("failed!");
linx0576 7:09354ea16403 514 TFT.locate(10,row); TFT.printf("failed!"); row+=10;
linx0576 7:09354ea16403 515 } else {
linx0576 7:09354ea16403 516 TFT.printf("mounted successfully!\r\n");
linx0576 7:09354ea16403 517 TFT.locate(10,row); TFT.printf("mounted successfully"); row+=10;
linx0576 7:09354ea16403 518
linx0576 7:09354ea16403 519 // write event to log
linx0576 7:09354ea16403 520 TFT.locate(10,70);
linx0576 7:09354ea16403 521 FILE *fp = fopen("/sd/event_log.txt", "a");
linx0576 7:09354ea16403 522 if (fp != NULL) {
linx0576 7:09354ea16403 523 fprintf(fp, "eureka!\r\n");
linx0576 7:09354ea16403 524 fclose(fp);
linx0576 7:09354ea16403 525 TFT.printf("success!\n");
linx0576 7:09354ea16403 526 TFT.locate(10,row); TFT.printf("success"); row+=10;
linx0576 7:09354ea16403 527 } else {
linx0576 7:09354ea16403 528 TFT.printf("failed!\n");
linx0576 7:09354ea16403 529 TFT.locate(10,row); TFT.printf("failed to write"); row+=10;
linx0576 6:005ff6a49217 530 }
linx0576 7:09354ea16403 531 sd.unmount();
linx0576 6:005ff6a49217 532 }
linx0576 7:09354ea16403 533
linx0576 7:09354ea16403 534 TFT.locate(10,row); TFT.printf("Configuring Skywire"); row+=10;
linx0576 7:09354ea16403 535 skywire.baud(115200);
linx0576 7:09354ea16403 536 skywire.attach(&Skywire_Rx_interrupt, Serial::RxIrq);
linx0576 7:09354ea16403 537
linx0576 7:09354ea16403 538 //Turn off echo
linx0576 7:09354ea16403 539 skywire.printf("ATE0\r\n");
linx0576 7:09354ea16403 540 WaitForResponse("OK");
linx0576 7:09354ea16403 541 TFT.locate(10,row); TFT.printf("Connecting to the Network"); row+=10;
linx0576 7:09354ea16403 542 // get IP address
linx0576 7:09354ea16403 543 skywire.printf("AT#SGACT=1,1\r\n"); // context activation (returns with IP address)
linx0576 7:09354ea16403 544 WaitForResponse("#SGACT");
linx0576 7:09354ea16403 545 WaitForResponse("OK");
linx0576 7:09354ea16403 546
linx0576 7:09354ea16403 547
linx0576 7:09354ea16403 548
linx0576 6:005ff6a49217 549 TFT.locate(165,270);
linx0576 6:005ff6a49217 550 printf("Return");
linx0576 6:005ff6a49217 551 TFT.rect(150,265,220,285,Green);
linx0576 7:09354ea16403 552
linx0576 6:005ff6a49217 553 ps = ain3.read();
linx0576 6:005ff6a49217 554 if (ps==1) {
linx0576 6:005ff6a49217 555 wait(0.5);
linx0576 6:005ff6a49217 556 TFT.cls();
linx0576 6:005ff6a49217 557 stage=0;
linx0576 6:005ff6a49217 558 }
linx0576 1:f1f3dfff9107 559 }
linx0576 1:f1f3dfff9107 560
linx0576 6:005ff6a49217 561 if (stage==4) { //recording... for comparison
linx0576 1:f1f3dfff9107 562 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 563 TFT.foreground(White);
linx0576 6:005ff6a49217 564 TFT.locate(40, 240);
linx0576 6:005ff6a49217 565 printf(" recording\n comparison...");
zsaiyed 4:e1ec41710eb4 566
linx0576 6:005ff6a49217 567 // RECORD(); // RECORD CONTROL 0 ?? 2 record()
linx0576 6:005ff6a49217 568 // uint32_t n;
linx0576 6:005ff6a49217 569 // for(n=0;n<1024;n++)
linx0576 6:005ff6a49217 570 // { CONTROLPWR[n]=POWER[n]; }
linx0576 6:005ff6a49217 571 // for(n=0;n<1024;n++)
linx0576 6:005ff6a49217 572 // { CONTROLPHS[n]=PHS[n]; }
linx0576 6:005ff6a49217 573
linx0576 6:005ff6a49217 574 // RECORD(); //RECORD CONTROL 1 ?? 2 record()
linx0576 6:005ff6a49217 575 // MSE(); //MSE BETWEEN CONTROLS
linx0576 6:005ff6a49217 576 // CONTROLPWRMSE=PWRMSE;
linx0576 6:005ff6a49217 577 // CONTROLPHSMSE=PHSMSE;
linx0576 6:005ff6a49217 578
linx0576 6:005ff6a49217 579 TFT.cls();
linx0576 6:005ff6a49217 580 comp=1;
linx0576 6:005ff6a49217 581 menu=0;
linx0576 6:005ff6a49217 582 config=2;
linx0576 6:005ff6a49217 583 stage=1;
linx0576 6:005ff6a49217 584 }
linx0576 6:005ff6a49217 585
linx0576 6:005ff6a49217 586 if (stage==5) { //recording... with interval
linx0576 6:005ff6a49217 587 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 588 TFT.locate(20,60);
linx0576 6:005ff6a49217 589 TFT.foreground(DarkGrey);
linx0576 6:005ff6a49217 590 printf("Configuration");
linx0576 6:005ff6a49217 591 TFT.locate(50,110);
linx0576 6:005ff6a49217 592 TFT.printf("Waveform");
linx0576 6:005ff6a49217 593 TFT.locate(95,160);
linx0576 6:005ff6a49217 594 TFT.printf("Log");
linx0576 6:005ff6a49217 595 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 596 TFT.foreground(White);
linx0576 6:005ff6a49217 597 TFT.locate(30, 240);
linx0576 6:005ff6a49217 598 printf("recording, are you sure?");
linx0576 6:005ff6a49217 599 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 600 TFT.locate(35,260);
linx0576 6:005ff6a49217 601 printf(" STOP ");
linx0576 6:005ff6a49217 602 TFT.rect(13,255,225,285,Green);
linx0576 6:005ff6a49217 603
linx0576 6:005ff6a49217 604 ps = ain3.read();
linx0576 6:005ff6a49217 605
linx0576 6:005ff6a49217 606 while(ps==0) // before push "STOP"
linx0576 6:005ff6a49217 607 { int abc;
linx0576 6:005ff6a49217 608 float32_t sum=0;
linx0576 6:005ff6a49217 609 float32_t sum_mse=0;
linx0576 6:005ff6a49217 610 float32_t sum_st=0;
linx0576 6:005ff6a49217 611 int t = h*60+m;
linx0576 6:005ff6a49217 612
linx0576 6:005ff6a49217 613 // RECORD(); // microphone here, with interval
linx0576 6:005ff6a49217 614 // MSE();
linx0576 6:005ff6a49217 615 // COMPARE();
linx0576 6:005ff6a49217 616
linx0576 6:005ff6a49217 617 wait(t);
linx0576 6:005ff6a49217 618 for(abc=0; abc<samplenum; abc++) {
linx0576 6:005ff6a49217 619 a1 = a[abc];
linx0576 6:005ff6a49217 620 b1 = b[abc];
linx0576 6:005ff6a49217 621 sum = sum+a[abc];
linx0576 6:005ff6a49217 622 arm_sub_f32(&a1, &stmean, &SubOutST, 1);
linx0576 6:005ff6a49217 623 arm_mult_f32(&SubOutST, &SubOutST, &SquareOutST, 1);
linx0576 6:005ff6a49217 624 sum_st = sum_st+SquareOutST;
linx0576 6:005ff6a49217 625 arm_sub_f32(&a1, &b1, &SubOutMSE, 1);
linx0576 6:005ff6a49217 626 arm_mult_f32(&SubOutMSE, &SubOutMSE, &SquareOutMSE, 1);
linx0576 6:005ff6a49217 627 sum_mse = sum_mse+SquareOutMSE;
zsaiyed 4:e1ec41710eb4 628 }
linx0576 6:005ff6a49217 629 stmean = sum/samplenum;
linx0576 6:005ff6a49217 630 stst = sqrt(sum_st/samplenum);
linx0576 6:005ff6a49217 631 stmse = sum_mse/samplenum;
linx0576 6:005ff6a49217 632
linx0576 6:005ff6a49217 633 if (stmse>0) // if error, send to user, and store MSE to log
linx0576 6:005ff6a49217 634 {
linx0576 6:005ff6a49217 635 if (mselog[0]==NULL)
linx0576 6:005ff6a49217 636 {
linx0576 6:005ff6a49217 637 time_t seconds = time(NULL);
linx0576 6:005ff6a49217 638 strftime(log[0], 32, "%b %d %Y %I:%M %p\n", localtime(&seconds));
linx0576 6:005ff6a49217 639 mselog[0] = stmse;
linx0576 6:005ff6a49217 640 }
linx0576 6:005ff6a49217 641 }
zsaiyed 4:e1ec41710eb4 642 }
zsaiyed 5:2ee2c7546568 643
linx0576 6:005ff6a49217 644 wait(0.5); TFT.cls(); stage=0;
zsaiyed 5:2ee2c7546568 645
linx0576 6:005ff6a49217 646 }
linx0576 1:f1f3dfff9107 647 }
zsaiyed 5:2ee2c7546568 648 }
linx0576 6:005ff6a49217 649