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 22:55:44 2015 +0000
Revision:
6:005ff6a49217
Parent:
5:2ee2c7546568
Child:
7:09354ea16403
pcb screen config 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 6:005ff6a49217 76
linx0576 0:52568bab75f8 77 int main()
linx0576 1:f1f3dfff9107 78 {
linx0576 6:005ff6a49217 79 /* int stage=0;
linx0576 3:7edb43f86069 80 int menu=0;
linx0576 3:7edb43f86069 81 float32_t mean=0;
linx0576 3:7edb43f86069 82 float32_t mse=0;
linx0576 3:7edb43f86069 83 float32_t st=0;
linx0576 3:7edb43f86069 84 TFT.claim(stdout); // send stdout to the TFT display
linx0576 3:7edb43f86069 85 TFT.claim(stderr); // send stderr to the TFT display
linx0576 3:7edb43f86069 86 TFT.set_orientation(2); // comment out = "||" include = "="
linx0576 3:7edb43f86069 87 TFT.background(Black); // set background to black
linx0576 3:7edb43f86069 88 TFT.foreground(White); // set chars to white
linx0576 0:52568bab75f8 89 TFT.cls(); // clear the screen
linx0576 6:005ff6a49217 90 */
linx0576 6:005ff6a49217 91
linx0576 6:005ff6a49217 92 float32_t mean=0; //321321
linx0576 6:005ff6a49217 93 float32_t mse=0;
linx0576 6:005ff6a49217 94 float32_t st=0;
linx0576 6:005ff6a49217 95
linx0576 6:005ff6a49217 96
linx0576 6:005ff6a49217 97 int stage=0;
linx0576 6:005ff6a49217 98 int menu=0;
linx0576 6:005ff6a49217 99 int config=0;
linx0576 6:005ff6a49217 100 int set=0;
linx0576 6:005ff6a49217 101 int comp=0;
linx0576 6:005ff6a49217 102 float32_t stmean=0;
linx0576 6:005ff6a49217 103 float32_t stmse=0;
linx0576 6:005ff6a49217 104 float32_t stst=0;
linx0576 6:005ff6a49217 105 char log[10][32];
linx0576 6:005ff6a49217 106 float32_t mselog[10] = {NULL};
linx0576 6:005ff6a49217 107 set_time(1448935737); // Set RTC time to Dec 01 2015 02:09 AM
linx0576 6:005ff6a49217 108 int pu, pd, ps; // LL left & right
linx0576 6:005ff6a49217 109 TFT.claim(stdout); // send stdout to the TFT display
linx0576 6:005ff6a49217 110 TFT.claim(stderr); // send stderr to the TFT display
linx0576 6:005ff6a49217 111 TFT.set_orientation(2);
linx0576 6:005ff6a49217 112 TFT.background(Black); // set background to black
linx0576 6:005ff6a49217 113 TFT.foreground(White); // set chars to white
linx0576 6:005ff6a49217 114 TFT.cls(); // clear the screen
linx0576 3:7edb43f86069 115
linx0576 3:7edb43f86069 116
linx0576 1:f1f3dfff9107 117 while(1)
linx0576 6:005ff6a49217 118 {
linx0576 6:005ff6a49217 119 if (stage==0) { //menu
linx0576 1:f1f3dfff9107 120 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 121 TFT.locate(19,60);
linx0576 6:005ff6a49217 122 TFT.foreground(White);
linx0576 6:005ff6a49217 123 printf("Configuration");
linx0576 6:005ff6a49217 124 TFT.locate(50,110);
linx0576 6:005ff6a49217 125 TFT.printf("Waveform");
linx0576 6:005ff6a49217 126 TFT.locate(95,160);
linx0576 6:005ff6a49217 127 TFT.printf("Log");
linx0576 6:005ff6a49217 128 // wait_LowPow(3); // Wait 3s in low power mode, seems just hold display
linx0576 6:005ff6a49217 129 if (set==0) {
linx0576 6:005ff6a49217 130 TFT.locate(70,260);
linx0576 6:005ff6a49217 131 TFT.foreground(DarkGrey);
linx0576 6:005ff6a49217 132 printf("START");
linx0576 6:005ff6a49217 133 }
linx0576 6:005ff6a49217 134 if (set==1) {
linx0576 6:005ff6a49217 135 TFT.locate(70,260);
linx0576 6:005ff6a49217 136 TFT.foreground(White);
linx0576 6:005ff6a49217 137 printf("START");
linx0576 1:f1f3dfff9107 138 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 139 TFT.locate(30, 240);
linx0576 6:005ff6a49217 140 printf("interval: %i hr %i min", h, m);
linx0576 6:005ff6a49217 141 }
linx0576 6:005ff6a49217 142
linx0576 6:005ff6a49217 143 if (menu==0) { //Configuration
linx0576 6:005ff6a49217 144 TFT.rect(13,55,225,85,Green);
linx0576 6:005ff6a49217 145 TFT.rect(13,105,225,135,Black);
linx0576 6:005ff6a49217 146 pu = ain1.read();
linx0576 6:005ff6a49217 147 pd = ain2.read();
linx0576 6:005ff6a49217 148 ps = ain3.read();
linx0576 6:005ff6a49217 149 if (pd==1) {
linx0576 6:005ff6a49217 150 wait(0.5);
linx0576 6:005ff6a49217 151 menu=1;
linx0576 6:005ff6a49217 152 }
linx0576 6:005ff6a49217 153 if (ps==1) {
linx0576 6:005ff6a49217 154 wait(0.5);
linx0576 6:005ff6a49217 155 TFT.cls();
linx0576 6:005ff6a49217 156 stage=1;
linx0576 6:005ff6a49217 157 }
linx0576 6:005ff6a49217 158 }
linx0576 6:005ff6a49217 159
linx0576 6:005ff6a49217 160 if (menu==1) { //waveform
linx0576 6:005ff6a49217 161 TFT.rect(13,55,225,85,Black);
linx0576 6:005ff6a49217 162 TFT.rect(13,105,225,135,Green);
linx0576 6:005ff6a49217 163 TFT.rect(13,155,225,185,Black);
linx0576 6:005ff6a49217 164 pu = ain1.read();
linx0576 6:005ff6a49217 165 pd = ain2.read();
linx0576 6:005ff6a49217 166 ps = ain3.read();
linx0576 6:005ff6a49217 167 if (pu==1) {
linx0576 6:005ff6a49217 168 wait(0.5);
linx0576 6:005ff6a49217 169 menu=0;
linx0576 6:005ff6a49217 170 }
linx0576 6:005ff6a49217 171 if (pd==1) {
linx0576 6:005ff6a49217 172 wait(0.5);
linx0576 6:005ff6a49217 173 menu=2;
linx0576 1:f1f3dfff9107 174 }
linx0576 6:005ff6a49217 175 if (ps==1) {
linx0576 6:005ff6a49217 176 wait(0.5);
linx0576 6:005ff6a49217 177 TFT.cls();
linx0576 6:005ff6a49217 178 stage=2;
linx0576 6:005ff6a49217 179 }
linx0576 6:005ff6a49217 180 }
linx0576 6:005ff6a49217 181
linx0576 6:005ff6a49217 182 if (menu==2) { //log
linx0576 6:005ff6a49217 183 TFT.rect(13,105,225,135,Black);
linx0576 6:005ff6a49217 184 TFT.rect(13,155,225,185,Green);
linx0576 6:005ff6a49217 185 TFT.rect(13,255,225,285,Black);
linx0576 6:005ff6a49217 186 pu = ain1.read();
linx0576 6:005ff6a49217 187 pd = ain2.read();
linx0576 6:005ff6a49217 188 ps = ain3.read();
linx0576 6:005ff6a49217 189 if (pu==1) {
linx0576 6:005ff6a49217 190 wait(0.5);
linx0576 6:005ff6a49217 191 menu=1;
linx0576 6:005ff6a49217 192 }
linx0576 6:005ff6a49217 193 if ((pd==1)&&(set==1)) {
linx0576 6:005ff6a49217 194 wait(0.5);
linx0576 6:005ff6a49217 195 menu=3;
linx0576 1:f1f3dfff9107 196 }
linx0576 6:005ff6a49217 197 if (ps==1) {
linx0576 6:005ff6a49217 198 wait(0.5);
linx0576 6:005ff6a49217 199 TFT.cls();
linx0576 6:005ff6a49217 200 stage=3;
linx0576 1:f1f3dfff9107 201 }
linx0576 6:005ff6a49217 202 }
linx0576 6:005ff6a49217 203
linx0576 6:005ff6a49217 204 if (menu==3) { //START
linx0576 6:005ff6a49217 205 TFT.rect(13,155,225,185,Black);
linx0576 6:005ff6a49217 206 TFT.rect(13,255,225,285,Green);
linx0576 6:005ff6a49217 207 pu = ain1.read();
linx0576 6:005ff6a49217 208 pd = ain2.read();
linx0576 6:005ff6a49217 209 ps = ain3.read();
linx0576 6:005ff6a49217 210 if (pu==1) {
linx0576 6:005ff6a49217 211 wait(0.5);
linx0576 6:005ff6a49217 212 menu=2;
linx0576 6:005ff6a49217 213 }
linx0576 6:005ff6a49217 214 if (ps==1) {
linx0576 6:005ff6a49217 215 wait(0.5);
linx0576 6:005ff6a49217 216 TFT.cls();
linx0576 6:005ff6a49217 217 stage=5;
linx0576 1:f1f3dfff9107 218 }
linx0576 1:f1f3dfff9107 219 }
linx0576 1:f1f3dfff9107 220 }
linx0576 3:7edb43f86069 221
linx0576 6:005ff6a49217 222 if (stage==1) { //Configuration
linx0576 6:005ff6a49217 223 int ia, ib, ja, jb;
linx0576 6:005ff6a49217 224
linx0576 6:005ff6a49217 225 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 226 TFT.locate(20,55);
linx0576 6:005ff6a49217 227 TFT.foreground(White);
linx0576 6:005ff6a49217 228 printf("SET PERIOD");
linx0576 6:005ff6a49217 229 TFT.rect(15,50, 220,80,Red);
linx0576 6:005ff6a49217 230 TFT.locate(70,120);
linx0576 6:005ff6a49217 231 TFT.printf("Hr Min");
linx0576 6:005ff6a49217 232 TFT.locate(10,200);
linx0576 6:005ff6a49217 233 printf("Record Control");
linx0576 6:005ff6a49217 234 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 235 if (comp==1) {
linx0576 6:005ff6a49217 236 TFT.locate(50,233);
linx0576 6:005ff6a49217 237 printf("comparison saved");
linx0576 6:005ff6a49217 238 }
linx0576 6:005ff6a49217 239
linx0576 6:005ff6a49217 240 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 241 TFT.locate(40,300);
linx0576 6:005ff6a49217 242 printf("Set");
linx0576 6:005ff6a49217 243 TFT.locate(165,300);
linx0576 6:005ff6a49217 244 printf("Return");
linx0576 6:005ff6a49217 245 TFT.rect(22,115, 68,145,Olive);
linx0576 6:005ff6a49217 246 TFT.rect(117,115,163,145,Olive);
linx0576 6:005ff6a49217 247 TFT.rect(5,195, 230,225,Olive);
linx0576 6:005ff6a49217 248 TFT.rect(15,295,85,315,Olive);
linx0576 6:005ff6a49217 249 TFT.rect(150,295,220,315,Olive);
linx0576 6:005ff6a49217 250
linx0576 6:005ff6a49217 251 while (stage==1) {
linx0576 6:005ff6a49217 252 ia=i-1;
linx0576 6:005ff6a49217 253 if (i==0) ia=23;
linx0576 6:005ff6a49217 254 ib=i+1;
linx0576 6:005ff6a49217 255 if (i==23) ib=0;
linx0576 6:005ff6a49217 256 ja=j-1;
linx0576 6:005ff6a49217 257 if (j==0) ja=59;
linx0576 6:005ff6a49217 258 jb=j+1;
linx0576 6:005ff6a49217 259 if (j==59) jb=00;
linx0576 6:005ff6a49217 260
linx0576 6:005ff6a49217 261 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 262 TFT.locate(26,120);
linx0576 6:005ff6a49217 263 if (i<10) TFT.printf("0%i", i);
linx0576 6:005ff6a49217 264 else if (i>=10) TFT.printf("%i", i);
linx0576 6:005ff6a49217 265 TFT.locate(120,120);
linx0576 6:005ff6a49217 266 if (j<10) TFT.printf("0%i", j);
linx0576 6:005ff6a49217 267 else if (j>=10) TFT.printf("%i", j);
linx0576 6:005ff6a49217 268
linx0576 6:005ff6a49217 269 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 270 TFT.locate(40,100);
linx0576 6:005ff6a49217 271 if (ia<10) TFT.printf("0%i", ia);
linx0576 6:005ff6a49217 272 else if (ia>=10) TFT.printf("%i", ia);
linx0576 6:005ff6a49217 273 TFT.locate(40,150);
linx0576 6:005ff6a49217 274 if (ib<10) TFT.printf("0%i", ib);
linx0576 6:005ff6a49217 275 else if (ib>=10) TFT.printf("%i", ib);
linx0576 6:005ff6a49217 276 TFT.locate(135,100);
linx0576 6:005ff6a49217 277 if (ja<10) TFT.printf("0%i", ja);
linx0576 6:005ff6a49217 278 else if (ja>=10) TFT.printf("%i", ja);
linx0576 6:005ff6a49217 279 TFT.locate(135,150);
linx0576 6:005ff6a49217 280 if (jb<10) TFT.printf("0%i", jb);
linx0576 6:005ff6a49217 281 else if (jb>=10) TFT.printf("%i", jb);
linx0576 6:005ff6a49217 282
linx0576 6:005ff6a49217 283 if (config==0) { //hour
linx0576 6:005ff6a49217 284 TFT.rect(22,115, 68,145,Green);
linx0576 6:005ff6a49217 285 TFT.rect(117,115,163,145,Olive);
linx0576 6:005ff6a49217 286 TFT.rect(5,195, 230,225,Olive);
linx0576 6:005ff6a49217 287 pu = ain1.read();
linx0576 6:005ff6a49217 288 pd = ain2.read();
linx0576 6:005ff6a49217 289 ps = ain3.read();
linx0576 6:005ff6a49217 290 if (pu==1) {
linx0576 6:005ff6a49217 291 wait(0.5);
linx0576 6:005ff6a49217 292 i=ib;
linx0576 6:005ff6a49217 293 }
linx0576 6:005ff6a49217 294 if (pd==1) {
linx0576 6:005ff6a49217 295 wait(0.5);
linx0576 6:005ff6a49217 296 i=ia;
linx0576 6:005ff6a49217 297 }
linx0576 6:005ff6a49217 298 if (ps==1) {
linx0576 6:005ff6a49217 299 wait(0.5);
linx0576 6:005ff6a49217 300 config=1;
linx0576 6:005ff6a49217 301 }
linx0576 6:005ff6a49217 302 }
linx0576 6:005ff6a49217 303 if (config==1) { //min
linx0576 6:005ff6a49217 304 TFT.rect(22,115, 68,145,Olive);
linx0576 6:005ff6a49217 305 TFT.rect(117,115,163,145,Green);
linx0576 6:005ff6a49217 306 TFT.rect(5,195, 230,225,Olive);
linx0576 6:005ff6a49217 307 pu = ain1.read();
linx0576 6:005ff6a49217 308 pd = ain2.read();
linx0576 6:005ff6a49217 309 ps = ain3.read();
linx0576 6:005ff6a49217 310 if (pu==1) {
linx0576 6:005ff6a49217 311 wait(0.5);
linx0576 6:005ff6a49217 312 j=jb;
linx0576 6:005ff6a49217 313 }
linx0576 6:005ff6a49217 314 if (pd==1) {
linx0576 6:005ff6a49217 315 wait(0.5);
linx0576 6:005ff6a49217 316 j=ja;
linx0576 6:005ff6a49217 317 }
linx0576 6:005ff6a49217 318 if (ps==1) {
linx0576 6:005ff6a49217 319 wait(0.5);
linx0576 6:005ff6a49217 320 config=2;
linx0576 6:005ff6a49217 321 }
linx0576 6:005ff6a49217 322 }
linx0576 6:005ff6a49217 323 if (config==2) { //Record Control
linx0576 6:005ff6a49217 324 TFT.rect(22,115, 68,145,Olive);
linx0576 6:005ff6a49217 325 TFT.rect(117,115,163,145,Olive);
linx0576 6:005ff6a49217 326 TFT.rect(5,195, 230,225,Green);
linx0576 6:005ff6a49217 327 TFT.rect(15,295,85,315,Olive);
linx0576 6:005ff6a49217 328 TFT.rect(150,295,220,315,Olive);
linx0576 6:005ff6a49217 329 pu = ain1.read();
linx0576 6:005ff6a49217 330 pd = ain2.read();
linx0576 6:005ff6a49217 331 ps = ain3.read();
linx0576 6:005ff6a49217 332 if (pu==1) {
linx0576 6:005ff6a49217 333 wait(0.5);
linx0576 6:005ff6a49217 334 config=0;
linx0576 6:005ff6a49217 335 }
linx0576 6:005ff6a49217 336 if (pd==1) {
linx0576 6:005ff6a49217 337 wait(0.5);
linx0576 6:005ff6a49217 338 config=3;
linx0576 6:005ff6a49217 339 }
linx0576 6:005ff6a49217 340 if (ps==1) {
linx0576 6:005ff6a49217 341 wait(0.5);
linx0576 6:005ff6a49217 342 TFT.cls();
linx0576 6:005ff6a49217 343 stage=4;
linx0576 6:005ff6a49217 344 }
linx0576 6:005ff6a49217 345 }
linx0576 6:005ff6a49217 346 if (config==3) { //set
linx0576 6:005ff6a49217 347 TFT.rect(5,195, 230,225,Olive);
linx0576 6:005ff6a49217 348 TFT.rect(15,295,85,315,Green);
linx0576 6:005ff6a49217 349 TFT.rect(150,295,220,315,Olive);
linx0576 6:005ff6a49217 350 pu = ain1.read();
linx0576 6:005ff6a49217 351 pd = ain2.read();
linx0576 6:005ff6a49217 352 ps = ain3.read();
linx0576 6:005ff6a49217 353 if (pu==1) {
linx0576 6:005ff6a49217 354 wait(0.5);
linx0576 6:005ff6a49217 355 config=2;
linx0576 6:005ff6a49217 356 }
linx0576 6:005ff6a49217 357 if (pd==1) {
linx0576 6:005ff6a49217 358 wait(0.5);
linx0576 6:005ff6a49217 359 config=4;
linx0576 6:005ff6a49217 360 }
linx0576 6:005ff6a49217 361 if (ps==1) {
linx0576 6:005ff6a49217 362 wait(0.5);
linx0576 6:005ff6a49217 363 TFT.cls();
linx0576 6:005ff6a49217 364 if ((i!=0) || (j!=0)) {
linx0576 6:005ff6a49217 365 h=i;
linx0576 6:005ff6a49217 366 m=j;
linx0576 6:005ff6a49217 367 set=1; //if "set", use new hr and min, and set=1 for "START"
linx0576 6:005ff6a49217 368 }
linx0576 6:005ff6a49217 369 stage=0;
linx0576 6:005ff6a49217 370 }
linx0576 6:005ff6a49217 371 }
linx0576 6:005ff6a49217 372 if (config==4) { //return
linx0576 6:005ff6a49217 373 TFT.rect(5,195, 230,225,Olive);
linx0576 6:005ff6a49217 374 TFT.rect(15,295,85,315,Olive);
linx0576 6:005ff6a49217 375 TFT.rect(150,295,220,315,Green);
linx0576 6:005ff6a49217 376 pu = ain1.read();
linx0576 6:005ff6a49217 377 pd = ain2.read();
linx0576 6:005ff6a49217 378 ps = ain3.read();
linx0576 6:005ff6a49217 379 if (pu==1) {
linx0576 6:005ff6a49217 380 wait(0.5);
linx0576 6:005ff6a49217 381 config=3;
linx0576 6:005ff6a49217 382 }
linx0576 6:005ff6a49217 383 if (pd==1) {
linx0576 6:005ff6a49217 384 wait(0.5);
linx0576 6:005ff6a49217 385 config=4;
linx0576 6:005ff6a49217 386 }
linx0576 6:005ff6a49217 387 if (ps==1) {
linx0576 6:005ff6a49217 388 wait(0.5);
linx0576 6:005ff6a49217 389 TFT.cls();
linx0576 6:005ff6a49217 390 stage=0;
linx0576 6:005ff6a49217 391 }
linx0576 6:005ff6a49217 392 }
linx0576 6:005ff6a49217 393 }
linx0576 6:005ff6a49217 394 }
linx0576 6:005ff6a49217 395
linx0576 6:005ff6a49217 396
linx0576 6:005ff6a49217 397 if (stage==2) { //waveform
linx0576 6:005ff6a49217 398 int abc, x2, y2;
linx0576 6:005ff6a49217 399 int def = 0;
linx0576 6:005ff6a49217 400 int ijk = 0;
linx0576 1:f1f3dfff9107 401 int x1 = 0;
linx0576 6:005ff6a49217 402 int y1 = 80;
linx0576 6:005ff6a49217 403
linx0576 6:005ff6a49217 404 for(abc=0; abc<samplenum; abc=abc+4) // waveform
linx0576 6:005ff6a49217 405 { a1 = a[abc];
linx0576 1:f1f3dfff9107 406 x2 = abc*2;
linx0576 1:f1f3dfff9107 407 y2 = 80+a1*10;
linx0576 1:f1f3dfff9107 408 TFT.line(x1,y1,x2,y2,Green);
linx0576 1:f1f3dfff9107 409 x1 = x2;
linx0576 3:7edb43f86069 410 y1 = y2;
linx0576 1:f1f3dfff9107 411 }
linx0576 6:005ff6a49217 412
linx0576 1:f1f3dfff9107 413 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 414 TFT.foreground(White);
linx0576 3:7edb43f86069 415 TFT.locate(10,130);
linx0576 6:005ff6a49217 416 TFT.printf("Samples number: \n %i", samplenum);
linx0576 3:7edb43f86069 417 TFT.locate(10,160);
linx0576 6:005ff6a49217 418 TFT.printf("Sample Mean Value: \n %f", stmean);
linx0576 1:f1f3dfff9107 419 TFT.locate(10,190);
linx0576 6:005ff6a49217 420 TFT.printf("Standard Deviation: \n %f", stst);
linx0576 3:7edb43f86069 421 TFT.locate(10,220);
linx0576 6:005ff6a49217 422 TFT.printf("Mean Square Error: \n %f", stmse);
linx0576 6:005ff6a49217 423
linx0576 1:f1f3dfff9107 424 TFT.locate(165,270);
linx0576 1:f1f3dfff9107 425 printf("Return");
linx0576 6:005ff6a49217 426 TFT.rect(150,265,220,285,Green);
linx0576 6:005ff6a49217 427 ps = ain3.read();
linx0576 6:005ff6a49217 428 if (ps==1) {
linx0576 6:005ff6a49217 429 wait(0.5);
linx0576 6:005ff6a49217 430 TFT.cls();
linx0576 6:005ff6a49217 431 stage=0;
linx0576 6:005ff6a49217 432 }
linx0576 6:005ff6a49217 433 }
linx0576 6:005ff6a49217 434
linx0576 6:005ff6a49217 435 if (stage==3) { //log
linx0576 6:005ff6a49217 436 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 437 TFT.locate(0,10);
linx0576 6:005ff6a49217 438 TFT.foreground(White);
linx0576 6:005ff6a49217 439 for(int e=0; e<10; e++) {
linx0576 6:005ff6a49217 440 if ((mselog[e]>0) && (mselog[e]!= NULL)) {
linx0576 6:005ff6a49217 441 TFT.printf("%s MSE: %f\n\n", log[e], mselog[e]);
linx0576 6:005ff6a49217 442 }
linx0576 6:005ff6a49217 443 }
linx0576 6:005ff6a49217 444 TFT.locate(165,270);
linx0576 6:005ff6a49217 445 printf("Return");
linx0576 6:005ff6a49217 446 TFT.rect(150,265,220,285,Green);
linx0576 6:005ff6a49217 447 ps = ain3.read();
linx0576 6:005ff6a49217 448 if (ps==1) {
linx0576 6:005ff6a49217 449 wait(0.5);
linx0576 6:005ff6a49217 450 TFT.cls();
linx0576 6:005ff6a49217 451 stage=0;
linx0576 6:005ff6a49217 452 }
linx0576 1:f1f3dfff9107 453 }
linx0576 1:f1f3dfff9107 454
linx0576 6:005ff6a49217 455 if (stage==4) { //recording... for comparison
linx0576 1:f1f3dfff9107 456 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 457 TFT.foreground(White);
linx0576 6:005ff6a49217 458 TFT.locate(40, 240);
linx0576 6:005ff6a49217 459 printf(" recording\n comparison...");
zsaiyed 4:e1ec41710eb4 460
linx0576 6:005ff6a49217 461 // RECORD(); // RECORD CONTROL 0 ?? 2 record()
linx0576 6:005ff6a49217 462 // uint32_t n;
linx0576 6:005ff6a49217 463 // for(n=0;n<1024;n++)
linx0576 6:005ff6a49217 464 // { CONTROLPWR[n]=POWER[n]; }
linx0576 6:005ff6a49217 465 // for(n=0;n<1024;n++)
linx0576 6:005ff6a49217 466 // { CONTROLPHS[n]=PHS[n]; }
linx0576 6:005ff6a49217 467
linx0576 6:005ff6a49217 468 // RECORD(); //RECORD CONTROL 1 ?? 2 record()
linx0576 6:005ff6a49217 469 // MSE(); //MSE BETWEEN CONTROLS
linx0576 6:005ff6a49217 470 // CONTROLPWRMSE=PWRMSE;
linx0576 6:005ff6a49217 471 // CONTROLPHSMSE=PHSMSE;
linx0576 6:005ff6a49217 472
linx0576 6:005ff6a49217 473 TFT.cls();
linx0576 6:005ff6a49217 474 comp=1;
linx0576 6:005ff6a49217 475 menu=0;
linx0576 6:005ff6a49217 476 config=2;
linx0576 6:005ff6a49217 477 stage=1;
linx0576 6:005ff6a49217 478 }
linx0576 6:005ff6a49217 479
linx0576 6:005ff6a49217 480 if (stage==5) { //recording... with interval
linx0576 6:005ff6a49217 481 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 482 TFT.locate(20,60);
linx0576 6:005ff6a49217 483 TFT.foreground(DarkGrey);
linx0576 6:005ff6a49217 484 printf("Configuration");
linx0576 6:005ff6a49217 485 TFT.locate(50,110);
linx0576 6:005ff6a49217 486 TFT.printf("Waveform");
linx0576 6:005ff6a49217 487 TFT.locate(95,160);
linx0576 6:005ff6a49217 488 TFT.printf("Log");
linx0576 6:005ff6a49217 489 TFT.set_font((unsigned char*) Arial12x12);
linx0576 6:005ff6a49217 490 TFT.foreground(White);
linx0576 6:005ff6a49217 491 TFT.locate(30, 240);
linx0576 6:005ff6a49217 492 printf("recording, are you sure?");
linx0576 6:005ff6a49217 493 TFT.set_font((unsigned char*) Arial24x23);
linx0576 6:005ff6a49217 494 TFT.locate(35,260);
linx0576 6:005ff6a49217 495 printf(" STOP ");
linx0576 6:005ff6a49217 496 TFT.rect(13,255,225,285,Green);
linx0576 6:005ff6a49217 497
linx0576 6:005ff6a49217 498 ps = ain3.read();
linx0576 6:005ff6a49217 499
linx0576 6:005ff6a49217 500 while(ps==0) // before push "STOP"
linx0576 6:005ff6a49217 501 { int abc;
linx0576 6:005ff6a49217 502 float32_t sum=0;
linx0576 6:005ff6a49217 503 float32_t sum_mse=0;
linx0576 6:005ff6a49217 504 float32_t sum_st=0;
linx0576 6:005ff6a49217 505 int t = h*60+m;
linx0576 6:005ff6a49217 506
linx0576 6:005ff6a49217 507 // RECORD(); // microphone here, with interval
linx0576 6:005ff6a49217 508 // MSE();
linx0576 6:005ff6a49217 509 // COMPARE();
linx0576 6:005ff6a49217 510
linx0576 6:005ff6a49217 511 wait(t);
linx0576 6:005ff6a49217 512 for(abc=0; abc<samplenum; abc++) {
linx0576 6:005ff6a49217 513 a1 = a[abc];
linx0576 6:005ff6a49217 514 b1 = b[abc];
linx0576 6:005ff6a49217 515 sum = sum+a[abc];
linx0576 6:005ff6a49217 516 arm_sub_f32(&a1, &stmean, &SubOutST, 1);
linx0576 6:005ff6a49217 517 arm_mult_f32(&SubOutST, &SubOutST, &SquareOutST, 1);
linx0576 6:005ff6a49217 518 sum_st = sum_st+SquareOutST;
linx0576 6:005ff6a49217 519 arm_sub_f32(&a1, &b1, &SubOutMSE, 1);
linx0576 6:005ff6a49217 520 arm_mult_f32(&SubOutMSE, &SubOutMSE, &SquareOutMSE, 1);
linx0576 6:005ff6a49217 521 sum_mse = sum_mse+SquareOutMSE;
zsaiyed 4:e1ec41710eb4 522 }
linx0576 6:005ff6a49217 523 stmean = sum/samplenum;
linx0576 6:005ff6a49217 524 stst = sqrt(sum_st/samplenum);
linx0576 6:005ff6a49217 525 stmse = sum_mse/samplenum;
linx0576 6:005ff6a49217 526
linx0576 6:005ff6a49217 527 if (stmse>0) // if error, send to user, and store MSE to log
linx0576 6:005ff6a49217 528 {
linx0576 6:005ff6a49217 529 if (mselog[0]==NULL)
linx0576 6:005ff6a49217 530 {
linx0576 6:005ff6a49217 531 time_t seconds = time(NULL);
linx0576 6:005ff6a49217 532 strftime(log[0], 32, "%b %d %Y %I:%M %p\n", localtime(&seconds));
linx0576 6:005ff6a49217 533 mselog[0] = stmse;
linx0576 6:005ff6a49217 534 }
linx0576 6:005ff6a49217 535 }
zsaiyed 4:e1ec41710eb4 536 }
zsaiyed 5:2ee2c7546568 537
linx0576 6:005ff6a49217 538 wait(0.5); TFT.cls(); stage=0;
zsaiyed 5:2ee2c7546568 539
linx0576 6:005ff6a49217 540 }
linx0576 1:f1f3dfff9107 541 }
zsaiyed 5:2ee2c7546568 542 }
linx0576 6:005ff6a49217 543