Team Riedel - display

Dependencies:   LCD_fonts SPI_TFT_ILI9341 CMSIS_DSP_401_without_cm4 mbed-src SDFileSystem wavfile

Files at this revision

API Documentation at this revision

Comitter:
linx0576
Date:
Sat Dec 12 22:55:44 2015 +0000
Parent:
5:2ee2c7546568
Child:
7:09354ea16403
Commit message:
pcb screen config menu

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sat Dec 12 22:50:18 2015 +0000
+++ b/main.cpp	Sat Dec 12 22:55:44 2015 +0000
@@ -7,32 +7,28 @@
 #include "Arial24x23.h"
 #include "arm_math.h" 
 #include "SDFileSystem.h"
-#define num 128
-//AnalogIn ain1(PC_6);
-//AnalogIn ain2(PC_7);
-//AnalogIn ain3(PC_8);
-//AnalogIn ain4(PC_9);
-//AnalogIn ain5(PB_15);
-
+//#include "main.h"
+#define samplenum 128
+ 
 DigitalIn ain1(PC_9);
 DigitalIn ain2(PB_15);
 DigitalIn ain3(PC_7);
 DigitalIn ain4(PC_6);
 DigitalIn ain5(PC_8);
-
+ 
 /** External Input and Output buffer Declarations for FFT Bin Example **/ 
 //static float32_t testInput_f32_10khz[num]; 
     
 /** Global variables for FFT Bin Example **/ 
-
+ 
 uint32_t ifftFlag = 0; 
 uint32_t doBitReverse = 1; 
      
 /* Reference index at which max energy of bin ocuurs */ 
 uint32_t refIndex = 213, testIndex = 0; 
-
+ 
 extern unsigned char p1[];  // the mbed logo
-const float32_t a[num] = {  -0.865129623056441,      -2.655020678073846,      0.600664612949661,      0.080378093886515,       -2.899160484012034,      2.563004262857762,      3.078328403304206,      0.105906778385130,      
+const float32_t a[samplenum] = {  -0.865129623056441,      -2.655020678073846,      0.600664612949661,      0.080378093886515,       -2.899160484012034,      2.563004262857762,      3.078328403304206,      0.105906778385130,      
  0.048366940168201,      -0.145696461188734,      -0.023417155362879,      2.127729174988954,       -1.176633086028377,      3.690223557991855,      -0.622791766173194,      0.722837373872203,      
  2.739754205367484,      -0.062610410524552,      -0.891296810967338,      -1.845872258871811,       1.195039415434387,      -2.177388969045026,      1.078649103637905,      2.570976050490193,      
  -1.383551403404574,      2.392141424058873,      2.858002843205065,      -3.682433899725536,       -3.488146646451150,      1.323468578888120,      -0.099771155430726,      1.561168082500454,      
@@ -49,7 +45,7 @@
  3.551177651488947,      -0.069685667896087,      -3.134634907409102,      -0.263627598944639,       -1.650469945991350,      -2.203580339374399,      -0.872203246123242,      1.230782812607287,      
  0.257288860093291,      1.989083106173137,      -1.985638729453261,      -1.416185105842892,       -1.131097688325772,      -2.245130805416057,      -1.938873996219074,      2.043608361562645,
           };
-const float32_t b[num] = {  -0.865129623056441,      -2.655020678073846,      0.600664612949661,      0.080378093886515,       -2.899160484012034,      2.563004262857762,      3.078328403304206,      0.105906778385130,      
+const float32_t b[samplenum] = {  -0.865129623056441,      -2.655020678073846,      0.600664612949661,      0.080378093886515,       -2.899160484012034,      2.563004262857762,      3.078328403304206,      0.105906778385130,      
  0.048366940168201,      -0.145696461188734,      -0.023417155362879,      2.127729174988954,       -1.176633086028377,      3.690223557991855,      -0.622791766173194,      0.722837373872203,      
  2.739754205367484,      -0.062610410524552,      -0.891296810967338,      -1.845872258871811,       1.195039415434387,      -2.177388969045026,      1.078649103637905,      2.570976050490193,      
  -1.383551403404574,      2.392141424058873,      2.858002843205065,      -3.682433899725536,       -0.369328108540868,      0.810791418361879,      3.587016488699641,      -0.520776145083723,      
@@ -66,384 +62,482 @@
  0.000086383683251,      -1.311866980897721,      1.840007477574986,      -3.253005768451345,       1.462584328739432,      1.610103610851738,      0.761914676858907,      0.974541361089834,      
  0.686845845885983,      1.849153122025191,      0.787800410401453,      -1.187438909666279,       -0.754937911044720,      0.084373858395232,      -2.600269011710521,      -0.962982842142644, 
   };
-float32_t  a1, b1;  
-float32_t  subOutput, SquareOutput; 
-
+float32_t  subOutput, SquareOutput;             //321321
+float32_t  a1, b1;
+float32_t  SubOutMSE, SquareOutMSE, SubOutST, SquareOutST;
+int h=0;                                         // 321    h = hr, m = min, for interval
+int m=0;
+int i=h;
+int j=m;
+ 
 //SPI_TFT_ILI9341 TFT(D11, D12, D13, D10, D8, D9, "TFT"); // mosi, miso, sclk, cs, reset, dc
 SPI_TFT_ILI9341 TFT(PC_3, PC_2, PB_10, PB_12, PA_8, PA_11, "TFT"); // mosi, miso, sclk, cs, reset, dc
 SDFileSystem sd(PB_5, PB_4, PB_3, PC_11, "sd"); // mosi, miso, sclk, cs
-
-DigitalOut skywire_en(PA_6);
-//DigitalOut skywire_rts(PA_7);
-Serial skywire(PA_0,PA_1);
-
-volatile int rx_in=0;
-volatile int rx_out=0;
-const int buffer_size = 255;
-char rx_buffer[buffer_size+1];
-char rx_line[buffer_size];
-
-void read_line()
-{
-    int i;
-    i = 0;
-// Start Critical Section - don't interrupt while changing global buffer variables
-    __disable_irq();
-// Loop reading rx buffer characters until end of line character
-    while ((i==0) || ((rx_line[i-1] != '\r') && (rx_line[i-1] != '\n'))) {
-// Wait if buffer empty
-        if (rx_in == rx_out) {
-// End Critical Section - need to allow rx interrupt to get new characters for buffer
-            __enable_irq();
-            while (rx_in == rx_out) {
-            }
-// Start Critical Section - don't interrupt while changing global buffer variables
-            __disable_irq();
-        }
-        rx_line[i] = rx_buffer[rx_out];
-        i++;
-        rx_out = (rx_out + 1) % buffer_size;
-    }
-// End Critical Section
-    __enable_irq();
-    rx_line[i-1] = 0;
-    return;
-}
-
-int WaitForResponse(char* response)
-{
-    do {
-        do {
-            read_line();
-        } while ((unsigned char)rx_line[0] <= 32);
-//        debug_pc.printf("Waiting for: %s, Received: %s\r\n", response, rx_line);
-    } while (strncmp(rx_line, response, strlen(response)));
-    return 0;
-}
-
-void Skywire_Rx_interrupt()
-{
-// Loop just in case more than one character is in UART's receive FIFO buffer
-// Stop if buffer full
-    while ((skywire.readable()) && (((rx_in + 1) % buffer_size) != rx_out)) {
-        rx_buffer[rx_in] = skywire.getc();
-        rx_in = (rx_in + 1) % buffer_size;
-    }
-    return;
-}
-
+ 
 int main()
 {    
-/*//    arm_cfft_radix2_instance_f32 S; 
-    int stage=0;
-    int pu, pd, pl, pr, ps;
-    TFT.claim(stdout);      // send stdout to the TFT display
-    TFT.claim(stderr);      // send stderr to the TFT display
-    TFT.set_orientation(2);       // comment out = "||"   include = "="
-    TFT.background(Black);    // set background to black
-    TFT.foreground(White);    // set chars to white
-    TFT.cls();                // clear the screen*/
-    
-//      arm_cfft_radix2_instance_f32 S; 
-    int stage=0;
+/*    int stage=0;
     int menu=0;
     float32_t mean=0; 
     float32_t mse=0;
     float32_t st=0;
-  //  int pu, pd, pl, pr, ps;
     TFT.claim(stdout);      // send stdout to the TFT display
     TFT.claim(stderr);      // send stderr to the TFT display
     TFT.set_orientation(2);       // comment out = "||"   include = "="
     TFT.background(Black);    // set background to black
     TFT.foreground(White);    // set chars to white
     TFT.cls();                // clear the screen
-    
+  */  
+  
+      float32_t mean=0;             //321321
+    float32_t mse=0;
+    float32_t st=0;
+
+  
+    int stage=0;
+    int menu=0;
+    int config=0;
+    int set=0;
+    int comp=0;
+    float32_t stmean=0;
+    float32_t stmse=0;
+    float32_t stst=0;
+    char log[10][32];
+    float32_t mselog[10] = {NULL};
+    set_time(1448935737);           // Set RTC time to Dec 01 2015 02:09 AM
+    int pu, pd, ps;                 // LL left & right
+    TFT.claim(stdout);              // send stdout to the TFT display
+    TFT.claim(stderr);              // send stderr to the TFT display
+    TFT.set_orientation(2); 
+    TFT.background(Black);          // set background to black
+    TFT.foreground(White);          // set chars to white
+    TFT.cls();                      // clear the screen
     
     
     while(1)
-    {   int pu, pd, ps; 
-
-        if (stage==0)   //menu
-        {   
-            TFT.set_font((unsigned char*) Arial24x23);
-            TFT.locate(20,60);
-            printf("Configuration");
-            TFT.set_font((unsigned char*) Arial24x23);
-            TFT.locate(20,110);
-            TFT.printf("  Waveform");
-            TFT.set_font((unsigned char*) Arial24x23);
-            TFT.locate(20,160);
-            TFT.printf("     Log");
-            TFT.set_font((unsigned char*) Arial24x23);
-            TFT.locate(20,260);
-            printf("   Return");
-        
-            if (menu==0)    //Configuration
-            {   TFT.rect(15,55,220,85,Green);
-                TFT.rect(15,105,220,135,Black);
-                pu = ain1.read(); 
-                pd = ain2.read(); 
-                ps = ain3.read(); 
-                if (pd==1)  {wait(0.5); menu=1;}
-                if (ps==1)  {wait(0.5); TFT.cls();  stage=1;}
-            }
-        
-            if (menu==1)    //waveform
-            {   
-                TFT.rect(15,55,220,85,Black);   
-                TFT.rect(15,105,220,135,Green);
-                TFT.rect(15,155,220,185,Black);
-                pu = ain1.read(); 
-                pd = ain2.read(); 
-                ps = ain3.read(); 
-                if (pu==1)  {wait(0.5); menu=0;}
-                if (pd==1)  {wait(0.5); menu=2;}
-                if (ps==1)  {wait(0.5); TFT.cls();  stage=2;}
-            }  
-
-            if (menu==2)    //log
-            {   
-                TFT.rect(15,105,220,135,Black);   
-                TFT.rect(15,155,220,185,Green);
-                TFT.rect(15,255,220,285,Black);
-                pu = ain1.read(); 
-                pd = ain2.read(); 
-                ps = ain3.read(); 
-                if (pu==1)  {wait(0.5); menu=1;}
-                if (pd==1)  {wait(0.5); menu=3;}
-                if (ps==1)  {wait(0.5); TFT.cls();  stage=3;}
-            }
-        
-            if (menu==3)    //return
-            {   
-                TFT.rect(15,155,220,185,Black);   
-                TFT.rect(15,255,220,285,Green);
-                pu = ain1.read(); 
-                pd = ain2.read(); 
-                ps = ain3.read(); 
-                if (pu==1)  {wait(0.5); menu=2;}
-                if (ps==1)  {wait(0.5); TFT.cls();  stage=3;}       //  main return...
-            }            
-        }
-        
-        if (stage==1)   //Configuration
-        {   
-            int i=0;
-            int j=0;
-            int ia, ib, ja, jb;
-            int config=0;
+    {    
+        if (stage==0) { //menu
             TFT.set_font((unsigned char*) Arial24x23);
-            TFT.locate(20,60);
-            printf("SET PERIOD");
-            TFT.rect(15,55, 220,85,Red);
-            TFT.locate(68,150);
-            TFT.printf("Hr    Min");
-
-            TFT.set_font((unsigned char*) Arial12x12);
-            TFT.locate(40,270);
-            printf("Set");
-            TFT.locate(165,270);
-            printf("Return");
-            TFT.rect(24,145, 64,175,Olive);  //Cyan
-            TFT.rect(119,145,159,175,Olive);
-            TFT.rect(15,265,85,285,Olive);  //Green
-            TFT.rect(150,265,220,285,Olive); 
-                
-            while (stage==1)
-            {   ia=i-1;     if (i==0) ia=23;
-                ib=i+1;     if (i==23) ib=0;
-                ja=j-1;     if (j==0) ja=59;
-                jb=j+1;     if (j==59) jb=00;
-                
-                TFT.set_font((unsigned char*) Arial24x23);
-                TFT.locate(26,150);
-                if (i<10)  TFT.printf("0%i", i);
-                else if (i>=10)  TFT.printf("%i", i);
-                TFT.locate(120,150);
-                if (j<10)  TFT.printf("0%i", j);
-                else if (j>=10)  TFT.printf("%i", j);
-                
+            TFT.locate(19,60);
+            TFT.foreground(White);
+            printf("Configuration");
+            TFT.locate(50,110);
+            TFT.printf("Waveform");
+            TFT.locate(95,160);
+            TFT.printf("Log");
+//            wait_LowPow(3);               // Wait 3s in low power mode,   seems just hold display
+            if (set==0) {
+                TFT.locate(70,260);
+                TFT.foreground(DarkGrey);
+                printf("START");
+            }
+            if (set==1) {
+                TFT.locate(70,260);
+                TFT.foreground(White);
+                printf("START");
                 TFT.set_font((unsigned char*) Arial12x12);
-                TFT.locate(40,130);
-                if (ia<10)  TFT.printf("0%i", ia);
-                else if (ia>=10)  TFT.printf("%i", ia);
-                TFT.locate(40,180);
-                if (ib<10)  TFT.printf("0%i", ib);
-                else if (ib>=10)  TFT.printf("%i", ib);
-                TFT.locate(135,130);
-                if (ja<10)  TFT.printf("0%i", ja);
-                else if (ja>=10)  TFT.printf("%i", ja);
-                TFT.locate(135,180);
-                if (jb<10)  TFT.printf("0%i", jb);
-                else if (jb>=10)  TFT.printf("%i", jb);
-                                
-                if  (config==0)
-                {   TFT.rect(24,145, 64,175,Green);  //Cyan
-                    TFT.rect(119,145,159,175,Olive);       
-                    pu = ain1.read(); 
-                    pd = ain2.read(); 
-                    ps = ain3.read(); 
-                    if (pu==1)  {wait(0.5);   i=ib;  }
-                    if (pd==1)  {wait(0.5);   i=ia;  }
-                    if (ps==1)  {wait(0.5);   config=1;}
+                TFT.locate(30, 240);
+                printf("interval:  %i hr  %i min", h, m);
+            }
+ 
+            if (menu==0) {  //Configuration
+                TFT.rect(13,55,225,85,Green);
+                TFT.rect(13,105,225,135,Black);
+                pu = ain1.read();
+                pd = ain2.read();
+                ps = ain3.read();
+                if (pd==1)  {
+                    wait(0.5);
+                    menu=1;
+                }
+                if (ps==1)  {
+                    wait(0.5);
+                    TFT.cls();
+                    stage=1;
+                }
+            }
+ 
+            if (menu==1) {  //waveform
+                TFT.rect(13,55,225,85,Black);
+                TFT.rect(13,105,225,135,Green);
+                TFT.rect(13,155,225,185,Black);
+                pu = ain1.read();
+                pd = ain2.read();
+                ps = ain3.read();
+                if (pu==1)  {
+                    wait(0.5);
+                    menu=0;
+                }
+                if (pd==1)  {
+                    wait(0.5);
+                    menu=2;
                 }
-                if  (config==1)
-                {   TFT.rect(24,145, 64,175,Olive);  //Cyan
-                    TFT.rect(119,145,159,175,Green);
-                    pu = ain1.read(); 
-                    pd = ain2.read(); 
-                    ps = ain3.read(); 
-                    if (pu==1)  {wait(0.5);   j=jb;  }
-                    if (pd==1)  {wait(0.5);   j=ja;  }
-                    if (ps==1)  {wait(0.5);   config=2;}
+                if (ps==1)  {
+                    wait(0.5);
+                    TFT.cls();
+                    stage=2;
+                }
+            }
+ 
+            if (menu==2) {  //log
+                TFT.rect(13,105,225,135,Black);
+                TFT.rect(13,155,225,185,Green);
+                TFT.rect(13,255,225,285,Black);
+                pu = ain1.read();
+                pd = ain2.read();
+                ps = ain3.read();
+                if (pu==1)  {
+                    wait(0.5);
+                    menu=1;
+                }
+                if ((pd==1)&&(set==1))  {
+                    wait(0.5);
+                    menu=3;
                 }
-                if  (config==2)
-                {   TFT.rect(24,145, 64,175,Olive);  //Cyan
-                    TFT.rect(119,145,159,175,Olive);
-                    TFT.rect(15,265,85,285,Green);  //Green
-                    TFT.rect(150,265,220,285,Olive); 
-                    pu = ain1.read(); 
-                    pd = ain2.read(); 
-                    ps = ain3.read(); 
-                    if (pu==1)  {wait(0.5);   config=2;  }
-                    if (pd==1)  {wait(0.5);   config=3;  }
-                    if (ps==1)  {wait(0.5); TFT.cls();  stage=2;}
+                if (ps==1)  {
+                    wait(0.5);
+                    TFT.cls();
+                    stage=3;
                 }
-                if  (config==3)
-                {   TFT.rect(24,145, 64,175,Olive);  //Cyan
-                    TFT.rect(119,145,159,175,Olive);
-                    TFT.rect(15,265,85,285,Olive);  //Green
-                    TFT.rect(150,265,220,285,Green); 
-                    pu = ain1.read(); 
-                    pd = ain2.read(); 
-                    ps = ain3.read(); 
-                    if (pu==1)  {wait(0.5);   config=2;  }
-                    if (pd==1)  {wait(0.5);   config=3;  }
-                    if (ps==1)  {wait(0.5); TFT.cls();  stage=3;}
+            }
+ 
+            if (menu==3) {  //START
+                TFT.rect(13,155,225,185,Black);
+                TFT.rect(13,255,225,285,Green);
+                pu = ain1.read();
+                pd = ain2.read();
+                ps = ain3.read();
+                if (pu==1)  {
+                    wait(0.5);
+                    menu=2;
+                }
+                if (ps==1)  {
+                    wait(0.5);
+                    TFT.cls();
+                    stage=5;
                 }
             }
         }
         
-        if (stage==2)   //waveform
-        {   int abc, x2, y2;
+        if (stage==1) { //Configuration
+            int ia, ib, ja, jb;
+ 
+            TFT.set_font((unsigned char*) Arial24x23);
+            TFT.locate(20,55);
+            TFT.foreground(White);
+            printf("SET PERIOD");
+            TFT.rect(15,50, 220,80,Red);
+            TFT.locate(70,120);
+            TFT.printf("Hr    Min");
+            TFT.locate(10,200);
+            printf("Record Control");
+            TFT.set_font((unsigned char*) Arial12x12);
+            if (comp==1) {
+                TFT.locate(50,233);
+                printf("comparison saved");
+            }
+ 
+            TFT.set_font((unsigned char*) Arial12x12);
+            TFT.locate(40,300);
+            printf("Set");
+            TFT.locate(165,300);
+            printf("Return");
+            TFT.rect(22,115, 68,145,Olive);
+            TFT.rect(117,115,163,145,Olive);
+            TFT.rect(5,195, 230,225,Olive);
+            TFT.rect(15,295,85,315,Olive);
+            TFT.rect(150,295,220,315,Olive);
+ 
+            while (stage==1) {
+                ia=i-1;
+                if (i==0) ia=23;
+                ib=i+1;
+                if (i==23) ib=0;
+                ja=j-1;
+                if (j==0) ja=59;
+                jb=j+1;
+                if (j==59) jb=00;
+ 
+                TFT.set_font((unsigned char*) Arial24x23);
+                TFT.locate(26,120);
+                if (i<10)  TFT.printf("0%i", i);
+                else if (i>=10)  TFT.printf("%i", i);
+                TFT.locate(120,120);
+                if (j<10)  TFT.printf("0%i", j);
+                else if (j>=10)  TFT.printf("%i", j);
+ 
+                TFT.set_font((unsigned char*) Arial12x12);
+                TFT.locate(40,100);
+                if (ia<10)  TFT.printf("0%i", ia);
+                else if (ia>=10)  TFT.printf("%i", ia);
+                TFT.locate(40,150);
+                if (ib<10)  TFT.printf("0%i", ib);
+                else if (ib>=10)  TFT.printf("%i", ib);
+                TFT.locate(135,100);
+                if (ja<10)  TFT.printf("0%i", ja);
+                else if (ja>=10)  TFT.printf("%i", ja);
+                TFT.locate(135,150);
+                if (jb<10)  TFT.printf("0%i", jb);
+                else if (jb>=10)  TFT.printf("%i", jb);
+ 
+                if  (config==0) {   //hour
+                    TFT.rect(22,115, 68,145,Green);
+                    TFT.rect(117,115,163,145,Olive);
+                    TFT.rect(5,195, 230,225,Olive);
+                    pu = ain1.read();
+                    pd = ain2.read();
+                    ps = ain3.read();
+                    if (pu==1)  {
+                        wait(0.5);
+                        i=ib;
+                    }
+                    if (pd==1)  {
+                        wait(0.5);
+                        i=ia;
+                    }
+                    if (ps==1)  {
+                        wait(0.5);
+                        config=1;
+                    }
+                }
+                if  (config==1) {   //min
+                    TFT.rect(22,115, 68,145,Olive);
+                    TFT.rect(117,115,163,145,Green);
+                    TFT.rect(5,195, 230,225,Olive);
+                    pu = ain1.read();
+                    pd = ain2.read();
+                    ps = ain3.read();
+                    if (pu==1)  {
+                        wait(0.5);
+                        j=jb;
+                    }
+                    if (pd==1)  {
+                        wait(0.5);
+                        j=ja;
+                    }
+                    if (ps==1)  {
+                        wait(0.5);
+                        config=2;
+                    }
+                }
+                if  (config==2) {   //Record Control
+                    TFT.rect(22,115, 68,145,Olive);
+                    TFT.rect(117,115,163,145,Olive);
+                    TFT.rect(5,195, 230,225,Green);
+                    TFT.rect(15,295,85,315,Olive);
+                    TFT.rect(150,295,220,315,Olive);
+                    pu = ain1.read();
+                    pd = ain2.read();
+                    ps = ain3.read();
+                    if (pu==1)  {
+                        wait(0.5);
+                        config=0;
+                    }
+                    if (pd==1)  {
+                        wait(0.5);
+                        config=3;
+                    }
+                    if (ps==1)  {
+                        wait(0.5);
+                        TFT.cls();
+                        stage=4;
+                    }
+                }
+                if  (config==3) {   //set
+                    TFT.rect(5,195, 230,225,Olive);
+                    TFT.rect(15,295,85,315,Green);
+                    TFT.rect(150,295,220,315,Olive);
+                    pu = ain1.read();
+                    pd = ain2.read();
+                    ps = ain3.read();
+                    if (pu==1)  {
+                        wait(0.5);
+                        config=2;
+                    }
+                    if (pd==1)  {
+                        wait(0.5);
+                        config=4;
+                    }
+                    if (ps==1) {
+                        wait(0.5);
+                        TFT.cls();
+                        if ((i!=0) || (j!=0)) {
+                            h=i;
+                            m=j;
+                            set=1;              //if "set", use new hr and min, and set=1 for "START"
+                        }
+                        stage=0;
+                    }
+                }
+                if  (config==4) {   //return
+                    TFT.rect(5,195, 230,225,Olive);
+                    TFT.rect(15,295,85,315,Olive);
+                    TFT.rect(150,295,220,315,Green);
+                    pu = ain1.read();
+                    pd = ain2.read();
+                    ps = ain3.read();
+                    if (pu==1)  {
+                        wait(0.5);
+                        config=3;
+                    }
+                    if (pd==1)  {
+                        wait(0.5);
+                        config=4;
+                    }
+                    if (ps==1)  {
+                        wait(0.5);
+                        TFT.cls();
+                        stage=0;
+                    }
+                }
+            }
+        }
+ 
+        
+        if (stage==2) { //waveform
+            int abc, x2, y2;
+            int def = 0;
+            int ijk = 0;
             int x1 = 0;
-            int y1 = 100;
-            float32_t sum=0; 
-            float32_t sum_mse=0; 
-            float32_t sum_st=0; 
-            for(abc=0; abc<num; abc++) 
-            {   a1 = a[abc]; 
-                b1 = b[abc]; 
-                sum = sum+a[abc];
-                arm_sub_f32(&a1, &b1, &subOutput, 1);
-                arm_mult_f32(&subOutput, &subOutput, &SquareOutput, 1); 
-                sum_mse = sum_mse+SquareOutput;
+            int y1 = 80;
+ 
+            for(abc=0; abc<samplenum; abc=abc+4)            // waveform
+            {   a1 = a[abc];
                 x2 = abc*2; 
                 y2 = 80+a1*10;
                 TFT.line(x1,y1,x2,y2,Green);
                 x1 = x2;
                 y1 = y2;
             }
-            mean = sum/num;
-            mse = sum_mse / num;
-            
-            for(abc=0; abc<num; abc++) 
-            {   a1 = a[abc]; 
-                arm_sub_f32(&a1, &mean, &subOutput, 1);
-                arm_mult_f32(&subOutput, &subOutput, &SquareOutput, 1); 
-                sum_st = sum_st+SquareOutput;
-            }
-            st = sqrt(sum_st/num);
-            
+ 
             TFT.set_font((unsigned char*) Arial12x12);
-            
+            TFT.foreground(White);
             TFT.locate(10,130);
-            TFT.printf("Samples number: ");
-            TFT.locate(30,140);
-            TFT.printf("%i", num);  
-            
+            TFT.printf("Samples number: \n   %i", samplenum);
             TFT.locate(10,160);
-            TFT.printf("Sample Mean Value: ");
-            TFT.locate(30,170);
-            TFT.printf("%f", mean);  
-            
+            TFT.printf("Sample Mean Value: \n   %f", stmean);
             TFT.locate(10,190);
-            TFT.printf("Standard Deviation: ");
-            TFT.locate(30,200);
-            TFT.printf("%f", st);  
-            
+            TFT.printf("Standard Deviation: \n   %f", stst);
             TFT.locate(10,220);
-            TFT.printf("Mean Square Error: ");
-            TFT.locate(30,230);
-            TFT.printf("%f", mse);  
-            
+            TFT.printf("Mean Square Error: \n   %f", stmse);
+ 
             TFT.locate(165,270);
             printf("Return");
-            TFT.rect(150,265,220,285,Green); 
-            ps = ain3.read(); 
-            if (ps==1)  {wait(0.5); TFT.cls();  stage=0;}
+            TFT.rect(150,265,220,285,Green);
+            ps = ain3.read();
+            if (ps==1)  {
+                wait(0.5);
+                TFT.cls();
+                stage=0;
+            }
+        }
+        
+        if (stage==3) { //log
+            TFT.set_font((unsigned char*) Arial12x12);
+            TFT.locate(0,10);
+            TFT.foreground(White);
+            for(int e=0; e<10; e++) {
+                if ((mselog[e]>0) && (mselog[e]!= NULL)) {
+                    TFT.printf("%s   MSE: %f\n\n", log[e], mselog[e]);
+                }
+            }
+            TFT.locate(165,270);
+            printf("Return");
+            TFT.rect(150,265,220,285,Green);
+            ps = ain3.read();
+            if (ps==1)  {
+                wait(0.5);
+                TFT.cls();
+                stage=0;
+            }
         }
         
-        if (stage==3)   //log
-        {   
+        if (stage==4) {     //recording... for comparison
             TFT.set_font((unsigned char*) Arial24x23);
-            TFT.locate(20,20);
-            printf("     Log");
-            //int row=50;
-//            for(int abc=0; abc<20; abc++) 
-//            {   TFT.set_font((unsigned char*) Arial12x12);
-//                TFT.locate(10,row+10*abc);
-//                printf("[%i]", abc+1);
-//                TFT.locate(60,row+10*abc);
-//                printf("%f", mse+abc);
-//            }
-            TFT.set_font((unsigned char*) Arial12x12);
-            TFT.locate(165,270);
-            printf("Return"); 
-            TFT.rect(150,265,220,285,Green); 
+            TFT.foreground(White);
+            TFT.locate(40, 240);
+            printf(" recording\n  comparison...");
             
-            //Configure CRC, large frames, and write validation for SD Card
-            sd.crc(true);
-            sd.large_frames(true);
-            sd.write_validation(true);
-            
-            //Try to mount the SD card
-            int row = 50;
-            int col = 10;
-            TFT.locate(10,row); TFT.printf("Mounting SD card..."); row+=10; 
-            if (sd.mount() != 0) {
-                TFT.locate(10,row); TFT.printf("failed!"); row+=10; 
-            } else {
-            TFT.locate(10,row); TFT.printf("mounted successfully"); row+=10; 
-            
-                // write event to log
-                TFT.locate(10,70);
-                FILE *fp = fopen("/sd/event_log.txt", "a");
-                if (fp != NULL) {
-                    fprintf(fp, "eureka!\r\n");
-                    fclose(fp);
-                    TFT.locate(10,row); TFT.printf("success"); row+=10; 
-                } else {
-                    TFT.locate(10,row); TFT.printf("failed to write"); row+=10; 
+//            RECORD();       // RECORD CONTROL 0         ?? 2 record()
+//            uint32_t n;
+//            for(n=0;n<1024;n++)
+//            {   CONTROLPWR[n]=POWER[n]; }
+//            for(n=0;n<1024;n++)
+//            {   CONTROLPHS[n]=PHS[n];   }
+ 
+//            RECORD();       //RECORD CONTROL 1          ?? 2 record()
+//            MSE();          //MSE BETWEEN CONTROLS
+//            CONTROLPWRMSE=PWRMSE;
+//            CONTROLPHSMSE=PHSMSE;
+ 
+            TFT.cls();
+            comp=1;
+            menu=0;
+            config=2;
+            stage=1;
+        }
+        
+        if (stage==5) {     //recording...  with interval
+            TFT.set_font((unsigned char*) Arial24x23);
+            TFT.locate(20,60);
+            TFT.foreground(DarkGrey);
+            printf("Configuration");
+            TFT.locate(50,110);
+            TFT.printf("Waveform");
+            TFT.locate(95,160);
+            TFT.printf("Log");
+            TFT.set_font((unsigned char*) Arial12x12);
+            TFT.foreground(White);
+            TFT.locate(30, 240);
+            printf("recording, are you sure?");
+            TFT.set_font((unsigned char*) Arial24x23);
+            TFT.locate(35,260);
+            printf("   STOP   ");
+            TFT.rect(13,255,225,285,Green);
+ 
+            ps = ain3.read();
+ 
+            while(ps==0)                           //  before push "STOP"
+            {   int abc;
+                float32_t sum=0;
+                float32_t sum_mse=0;
+                float32_t sum_st=0;
+                int t = h*60+m;
+ 
+//                RECORD();                       //  microphone here, with interval
+//                MSE();
+//                COMPARE();
+                
+                wait(t);
+                for(abc=0; abc<samplenum; abc++) {
+                    a1 = a[abc];
+                    b1 = b[abc];
+                    sum = sum+a[abc];
+                    arm_sub_f32(&a1, &stmean, &SubOutST, 1);
+                    arm_mult_f32(&SubOutST, &SubOutST, &SquareOutST, 1);
+                    sum_st = sum_st+SquareOutST;
+                    arm_sub_f32(&a1, &b1, &SubOutMSE, 1);
+                    arm_mult_f32(&SubOutMSE, &SubOutMSE, &SquareOutMSE, 1);
+                    sum_mse = sum_mse+SquareOutMSE;
                 }
-                sd.unmount();
+                stmean = sum/samplenum;
+                stst = sqrt(sum_st/samplenum);
+                stmse = sum_mse/samplenum;
+ 
+                if (stmse>0)                    //  if error, send to user, and store MSE to log
+                {
+                    if (mselog[0]==NULL)
+                    {
+                        time_t seconds = time(NULL);
+                        strftime(log[0], 32, "%b %d %Y  %I:%M %p\n", localtime(&seconds));
+                        mselog[0] = stmse;
+                    }
+                }
             }
             
-            TFT.locate(10,row); TFT.printf("Configuring Skywire"); row+=10; 
-            skywire.baud(115200);
-            skywire.attach(&Skywire_Rx_interrupt, Serial::RxIrq);
+            wait(0.5);  TFT.cls();     stage=0;
             
-            //Turn off echo
-            skywire.printf("ATE0\r\n");
-            WaitForResponse("OK");
-            TFT.locate(10,row); TFT.printf("Connecting to the Network"); row+=10; 
-            // get IP address
-            skywire.printf("AT#SGACT=1,1\r\n");         // context activation (returns with IP address)
-            WaitForResponse("#SGACT");
-            WaitForResponse("OK");
-    
-            ps = ain3.read(); 
-            if (ps==1)  {wait(0.5); TFT.cls();  stage=0;}
-        }
+        }  
     }
 }
+