Senior Design: Sound Monitor / 4951

Dependencies:   LCD_fonts SPI_TFT_ILI9341 CMSIS_DSP_401_without_cm4 mbed-src SDFileSystem wavfile

main.cpp

Committer:
linx0576
Date:
2015-12-12
Revision:
3:7edb43f86069
Parent:
2:afdb1aaa7608
Child:
4:e1ec41710eb4

File content as of revision 3:7edb43f86069:

#include <math.h>
#include "stdio.h"
#include "mbed.h"
#include "SPI_TFT_ILI9341.h"
#include "string"
#include "Arial12x12.h"
#include "Arial24x23.h"
#include "arm_math.h" 
#define num 128
//AnalogIn ain1(PC_6);
//AnalogIn ain2(PC_7);
//AnalogIn ain3(PC_8);
//AnalogIn ain4(PC_9);
//AnalogIn ain5(PB_15);


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,      
 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,      
 1.025026795103179,      0.928841900171200,      2.930499509864950,      2.013349089766430,       2.381676148486737,      -3.081062307950236,      -0.389579115537544,      0.181540149166620,      
 -2.601953341353208,      0.333435137783218,      -2.812945856162965,      2.649109640172910,       -1.003963025744654,      1.552460768755035,      0.088641345335247,      -2.519951327113426,      
 -4.341348988610527,      0.557772429359965,      -1.671267412948494,      0.733951350960387,       0.409263788034864,      3.566033071952806,      1.882565173848352,      -1.106017073793287,      
 0.154456720778718,      -2.513205795512153,      0.310978660939421,      0.579706500111723,       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,       -0.369328108540868,      0.810791418361879,      3.587016488699641,      -0.520776145083723,      
 0.640249919627884,      1.103122489464969,      2.231779881455556,      -1.308035392685241,       0.424070304330106,      -0.200383932651189,      -2.365526783356541,      -0.989114757436628,      
 2.770807688959777,      -0.444172737462307,      0.079760979374078,      -0.005199118412183,       -0.664712668309527,      -0.624171857561896,      0.537306979007338,      -2.575955675497642,      
 1.562363235756780,      1.814069369848895,      -1.293428583392509,      -1.026188449495686,       -2.981771815588717,      -4.223468103075124,      2.672674782004045,      -0.856096801117735,      
 0.048517345512563,      -0.026860721136222,      0.392932277758187,      -1.331740855093099,       -1.894292129477081,      -1.425006468460681,      -2.721772427617057,      -1.616831100216806,      
 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,      
 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,      
 0.640249919627884,      1.103122489464969,      2.231779881455556,      -1.308035392685241,       0.424070304330106,      -0.200383932651189,      -2.365526783356541,      -0.989114757436628,      
 2.770807688959777,      -0.444172737462307,      0.079760979374078,      -0.005199118412183,       -0.664712668309527,      -0.624171857561896,      0.537306979007338,      -2.575955675497642,      
 1.562363235756780,      1.814069369848895,      -1.293428583392509,      -1.026188449495686,       -2.981771815588717,      -4.223468103075124,      2.672674782004045,      -0.856096801117735,      
 0.048517345512563,      -0.026860721136222,      0.392932277758187,      -1.331740855093099,       -1.894292129477081,      -1.425006468460681,      -2.721772427617057,      -1.616831100216806,      
 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,
 -3.488146646451150,      1.323468578888120,      -0.099771155430726,      1.561168082500454,       1.025026795103179,      0.928841900171200,      2.930499509864950,      2.013349089766430,      
 2.381676148486737,      -3.081062307950236,      -0.389579115537544,      0.181540149166620,       -2.601953341353208,      0.333435137783218,      -2.812945856162965,      2.649109640172910,      
 -1.003963025744654,      1.552460768755035,      0.088641345335247,      -2.519951327113426,       -4.341348988610527,      0.557772429359965,      -1.671267412948494,      0.733951350960387,      
 0.409263788034864,      3.566033071952806,      1.882565173848352,      -1.106017073793287,       0.154456720778718,      -2.513205795512153,      0.310978660939421,      0.579706500111723,      
 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; 

//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

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 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
    
    
    
    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;
            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.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;}
                }
                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  (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  (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 (stage==2)   //waveform
        {   int abc, x2, y2;
            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;
                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.locate(10,130);
            TFT.printf("Samples number: ");
            TFT.locate(30,140);
            TFT.printf("%i", num);  
            
            TFT.locate(10,160);
            TFT.printf("Sample Mean Value: ");
            TFT.locate(30,170);
            TFT.printf("%f", mean);  
            
            TFT.locate(10,190);
            TFT.printf("Standard Deviation: ");
            TFT.locate(30,200);
            TFT.printf("%f", st);  
            
            TFT.locate(10,220);
            TFT.printf("Mean Square Error: ");
            TFT.locate(30,230);
            TFT.printf("%f", mse);  
            
            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
        {   
            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); 
            ps = ain3.read(); 
            if (ps==1)  {wait(0.5); TFT.cls();  stage=0;}
        }
    }
}