Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: LCD_fonts SPI_TFT_ILI9341 CMSIS_DSP_401_without_cm4 mbed-src SDFileSystem wavfile
main.cpp
- Committer:
- linx0576
- Date:
- 2015-12-12
- Revision:
- 6:005ff6a49217
- Parent:
- 5:2ee2c7546568
- Child:
- 7:09354ea16403
File content as of revision 6:005ff6a49217:
#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"
#include "SDFileSystem.h"
//#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[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,
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[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,
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 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
int main()
{
/* int stage=0;
int menu=0;
float32_t mean=0;
float32_t mse=0;
float32_t st=0;
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)
{
if (stage==0) { //menu
TFT.set_font((unsigned char*) Arial24x23);
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(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 (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 (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==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 = 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;
}
TFT.set_font((unsigned char*) Arial12x12);
TFT.foreground(White);
TFT.locate(10,130);
TFT.printf("Samples number: \n %i", samplenum);
TFT.locate(10,160);
TFT.printf("Sample Mean Value: \n %f", stmean);
TFT.locate(10,190);
TFT.printf("Standard Deviation: \n %f", stst);
TFT.locate(10,220);
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;
}
}
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==4) { //recording... for comparison
TFT.set_font((unsigned char*) Arial24x23);
TFT.foreground(White);
TFT.locate(40, 240);
printf(" recording\n comparison...");
// 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;
}
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;
}
}
}
wait(0.5); TFT.cls(); stage=0;
}
}
}