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: TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG
Revision 3:ccc0103c200e, committed 2019-05-12
- Comitter:
- WasinPT
- Date:
- Sun May 12 05:46:45 2019 +0000
- Parent:
- 2:021843c33b0e
- Commit message:
- Wasin Pongtawin
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Jun 07 09:31:50 2017 +0200
+++ b/main.cpp Sun May 12 05:46:45 2019 +0000
@@ -4,70 +4,372 @@
LCD_DISCO_F746NG lcd;
TS_DISCO_F746NG ts;
+InterruptIn button1(D0);
+AnalogIn Ain(A0);
+TS_StateTypeDef TS_State;
+Serial pc(USBTX, USBRX);
+void button1pressed() {
+ wait(0.5);
+ lcd.Clear(LCD_COLOR_BLACK);
+ NVIC_SystemReset();
+}
-int main()
+int main()
{
- TS_StateTypeDef TS_State;
- uint16_t x, y;
- uint8_t text[30];
- uint8_t status;
- uint8_t idx;
- uint8_t cleared = 0;
- uint8_t prev_nb_touches = 0;
+pc.baud(9600);
+pc.format(8, SerialBase::None, 1); //default
+float high, high1, low, low1; //in_tune, in_tune1, in_tune2, in_tune3;
+int note;
+float Buffer[12005];;
+float PI=3.1415;
+int SAMPLE_RATE = 24000;
+float goertzelFilter4;
+char rac;
+int in;
+///////////////////////////////////////////////////////
+////////////////////
+//Interupt for Switching Strings
+ button1.mode(PullDown);
+ button1.rise(&button1pressed);
+ int Counter = 0;
+ lcd.Clear(LCD_COLOR_BLACK);
+ lcd.SetBackColor(LCD_COLOR_DARKGREEN);
+ lcd.SetTextColor(LCD_COLOR_YELLOW);
+ //
+ lcd.SetTextColor(LCD_COLOR_RED);
+ lcd.FillRect(1,1,20,20);
+ //AntiHead
+ lcd.SetTextColor(LCD_COLOR_LIGHTBLUE);
+ lcd.FillCircle(111,112,27);
+ lcd.FillCircle(111,160,27);
+ lcd.FillCircle(116,85,9);
+ lcd.FillCircle(116,187,9);
+ //Head
+ lcd.SetTextColor(LCD_COLOR_LIGHTBLUE);
+ lcd.FillRect(114,70,100,133);
+ lcd.FillRect(205,76,57,120);
+ lcd.FillRect(262,70,100,133);
+ lcd.FillRect(262,70,100,133);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.FillCircle(362,70,25);
+ lcd.FillCircle(362,203,25);
+ lcd.SetBackColor(LCD_COLOR_LIGHTBLUE);
+ lcd.SetTextColor(LCD_COLOR_RED);
+ lcd.DisplayStringAt(0,LINE(5),(uint8_t*)"GOERTZELY-disco",CENTER_MODE);
+ lcd.SetTextColor(LCD_COLOR_WHITE);
+ lcd.FillRect(362,95,12,84);
+ lcd.SetTextColor(LCD_COLOR_BROWN);
+ lcd.FillRect(374,95,106,84);
+ lcd.SetTextColor(LCD_COLOR_LIGHTGRAY);
+ lcd.FillRect(426,95,4,84);
+ lcd.FillCircle(400,137,8);
+ lcd.FillCircle(452,137,8);
+ //TuningSlot
+ lcd.SetTextColor(LCD_COLOR_LIGHTGRAY); //TOP
+ lcd.FillRect(298,50,9,20);
+ lcd.FillRect(236,54,9,22);
+ lcd.FillRect(174,50,9,20);
+// //Bottom
+ lcd.FillRect(298,203,9,20);
+ lcd.FillRect(236,196,9,22);
+ lcd.FillRect(174,203,9,20);
+
+ lcd.SetTextColor(LCD_COLOR_YELLOW);
+ lcd.FillRect(277,15,52,35);//E4
+ lcd.FillRect(215,19,52,37);//B3
+ lcd.FillRect(153,15,52,35);//G3
+ lcd.FillRect(277,223,52,35);//E2
+ lcd.FillRect(215,216,52,37);//A2
+ lcd.FillRect(153,223,52,35);//D3
+
+ //Note
+ lcd.SetBackColor(LCD_COLOR_YELLOW);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.DisplayStringAt(278,23,(uint8_t*)"G3",RIGHT_MODE);
+ lcd.DisplayStringAt(216,29,(uint8_t*)"B3",RIGHT_MODE);
+ lcd.DisplayStringAt(154,23,(uint8_t*)"E4",RIGHT_MODE);
+
+ lcd.DisplayStringAt(278,229,(uint8_t*)"D3",RIGHT_MODE);
+ lcd.DisplayStringAt(216,223,(uint8_t*)"A2",RIGHT_MODE);
+ lcd.DisplayStringAt(154,229,(uint8_t*)"E2",RIGHT_MODE);
+
- lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE);
+ while (note<50) {
+ ts.GetState(&TS_State);
+ if(((TS_State.touchX[0]>277)&&(TS_State.touchX[0]<329))
+ &&((TS_State.touchY[0]>223)&&(TS_State.touchY[0]<258))) //6
+ {
+ lcd.SetTextColor(LCD_COLOR_RED);
+ lcd.FillRect(277,223,52,35);
+ lcd.SetBackColor(LCD_COLOR_RED);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.DisplayStringAt(154,229,(uint8_t*)"E2",RIGHT_MODE);
+ note = 82;
+ rac = 'E';
+ in = 2;
+
+ }
+ if(((TS_State.touchX[0]>215)&&(TS_State.touchX[0]<267))
+ &&((TS_State.touchY[0]>216)&&(TS_State.touchY[0]<253))) //5
+ {
+ lcd.SetTextColor(LCD_COLOR_RED);
+ lcd.FillRect(215,216,52,37);
+ lcd.SetBackColor(LCD_COLOR_RED);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.DisplayStringAt(216,223,(uint8_t*)"A2",RIGHT_MODE);
+ note = 110;
+ rac = 'A';
+ in = 2;
+
+ }
+ if(((TS_State.touchX[0]>153)&&(TS_State.touchX[0]<205))
+ &&((TS_State.touchY[0]>223)&&(TS_State.touchY[0]<258))) //4
+ {
+ lcd.SetTextColor(LCD_COLOR_RED);
+ lcd.FillRect(153,223,52,35);
+ lcd.SetBackColor(LCD_COLOR_RED);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.DisplayStringAt(278,229,(uint8_t*)"D3",RIGHT_MODE);
+ note = 147;
+ rac = 'D';
+ in = 3;
+ }
+ if(((TS_State.touchX[0]>153)&&(TS_State.touchX[0]<205))
+ &&((TS_State.touchY[0]>15)&&(TS_State.touchY[0]<50))) //3
+ {
+ lcd.SetTextColor(LCD_COLOR_RED);
+ lcd.FillRect(153,15,52,35);
+ lcd.SetBackColor(LCD_COLOR_RED);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.DisplayStringAt(278,23,(uint8_t*)"G3",RIGHT_MODE);
+ note = 196;
+ rac = 'G';
+ in = 3;
+ }
+ if(((TS_State.touchX[0]>215)&&(TS_State.touchX[0]<267))
+ &&((TS_State.touchY[0]>19)&&(TS_State.touchY[0]<56))) //2
+ {
+ lcd.SetTextColor(LCD_COLOR_RED);
+ lcd.FillRect(215,19,52,37);
+ lcd.SetBackColor(LCD_COLOR_RED);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.DisplayStringAt(216,29,(uint8_t*)"B3",RIGHT_MODE);
+ note = 247;
+ rac = 'B';
+ in = 3;
+ }
+ if(((TS_State.touchX[0]>277)&&(TS_State.touchX[0]<329))
+ &&((TS_State.touchY[0]>15)&&(TS_State.touchY[0]<50))) //1
+ {
+ lcd.SetTextColor(LCD_COLOR_RED);
+ lcd.FillRect(277,15,52,35);
+ lcd.SetBackColor(LCD_COLOR_RED);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.DisplayStringAt(154,23,(uint8_t*)"E4",RIGHT_MODE);
+ note = 330;
+ rac = 'E';
+ in = 4;
+ }
+ }
+
+ wait(0.5);
+
+
+while(1){////// mother while ///////////////////
+
+lcd.Clear(LCD_COLOR_LIGHTRED);
+ lcd.SetBackColor(LCD_COLOR_LIGHTRED);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...1...", CENTER_MODE);
+ wait(1);
+ lcd.Clear(LCD_COLOR_LIGHTRED);
+ lcd.SetBackColor(LCD_COLOR_LIGHTRED);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...2...", CENTER_MODE);
+ wait(1);
+ lcd.Clear(LCD_COLOR_LIGHTRED);
+ lcd.SetBackColor(LCD_COLOR_LIGHTRED);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...3...", CENTER_MODE);
wait(1);
- status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
- if (status != TS_OK) {
- lcd.Clear(LCD_COLOR_RED);
- lcd.SetBackColor(LCD_COLOR_RED);
- lcd.SetTextColor(LCD_COLOR_WHITE);
- lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
- } else {
- lcd.Clear(LCD_COLOR_GREEN);
- lcd.SetBackColor(LCD_COLOR_GREEN);
- lcd.SetTextColor(LCD_COLOR_WHITE);
- lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
+button1.mode(PullDown);
+button1.rise(&button1pressed);
+Counter = 0;
+lcd.Clear(LCD_COLOR_RED);
+for(int i=0;i<10000;i=i+1)
+ {
+ Buffer[i] = Ain.read();
+ Counter = Counter+1;
+ char str[20],con[20];
+ lcd.SetBackColor(LCD_COLOR_RED);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+ sprintf(con," Please Keep Picking : %c%d ",rac,in);
+ lcd.DisplayStringAt(0, LINE(4), (uint8_t *)con, CENTER_MODE);
+ sprintf(str,"We did %d sample",Counter);
+ lcd.DisplayStringAt(0, LINE(6), (uint8_t *)str, CENTER_MODE);
+ wait_us(42);
}
- wait(1);
- lcd.SetFont(&Font12);
- lcd.SetBackColor(LCD_COLOR_BLUE);
- lcd.SetTextColor(LCD_COLOR_WHITE);
-
- while(1) {
-
- ts.GetState(&TS_State);
- if (TS_State.touchDetected) {
- // Clear lines corresponding to old touches coordinates
- if (TS_State.touchDetected < prev_nb_touches) {
- for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
- lcd.ClearStringLine(idx);
- }
- }
- prev_nb_touches = TS_State.touchDetected;
-
- cleared = 0;
-
- sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
- lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
-
- for (idx = 0; idx < TS_State.touchDetected; idx++) {
- x = TS_State.touchX[idx];
- y = TS_State.touchY[idx];
- sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y);
- lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE);
- }
-
- lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE);
- } else {
- if (!cleared) {
- lcd.Clear(LCD_COLOR_BLUE);
- sprintf((char*)text, "Touches: 0");
- lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
- cleared = 1;
- }
- }
+/////////////////CALCULATION//////////
+high = 0;
+low = 0;
+////HIGH//////
+
+for (int i=3; i<46; i+=3)
+{
+ float freq = note + i;
+ int N = Counter;
+ float s_prev = 0.0;
+ float s_prev2 = 0.0;
+ float coeff,normalizedfreq,s;
+ normalizedfreq = freq / SAMPLE_RATE;
+ coeff = 2*cos(2*PI*normalizedfreq);
+ for (int i=0; i<=N ; i=i+1) {
+ s = Buffer[i] + coeff * s_prev - s_prev2;
+ s_prev2 = s_prev;
+ s_prev = s;
+ }
+ float goertzelFilter1 = s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2;
+ high1 = goertzelFilter1;
+ if (high1 > high)
+ {
+ high=high1;
+ }
+}
+ //lcd.Clear(LCD_COLOR_BLACK);
+ //lcd.SetBackColor(LCD_COLOR_BLACK);
+ //lcd.SetTextColor(LCD_COLOR_RED);
+ //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...1...", CENTER_MODE);
+ wait(0.1);
+////LOW//////
+for (int i=3; i<46; i+=3)
+{
+ float freq = note - i;
+ int N = Counter;
+ float s_prev = 0.0;
+ float s_prev2 = 0.0;
+ float coeff,normalizedfreq,s;
+ normalizedfreq = freq / SAMPLE_RATE;
+ coeff = 2*cos(2*PI*normalizedfreq);
+ for (int i=0; i<=N ; i=i+1) {
+ s = Buffer[i] + coeff * s_prev - s_prev2;
+ s_prev2 = s_prev;
+ s_prev = s;
+ }
+ float goertzelFilter2 = s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2;
+ low1 = goertzelFilter2;
+ if (low1 > low)
+ {
+ low=low1;
}
}
+ // lcd.Clear(LCD_COLOR_BLACK);
+ //lcd.SetBackColor(LCD_COLOR_BLACK);
+ //lcd.SetTextColor(LCD_COLOR_RED);
+ //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)" ..2.. ", CENTER_MODE);
+ wait(0.1);
+
+ /////////goertzelFilter3/////////////
+ float freq = note + 1;
+ int N = Counter;
+ float s_prev = 0.0;
+ float s_prev2 = 0.0;
+ float coeff,normalizedfreq,s;
+ normalizedfreq = freq / SAMPLE_RATE;
+ coeff = 2*cos(2*PI*normalizedfreq);
+ for (int i=0; i<=N ; i=i+1)
+ {
+ s = Buffer[i] + coeff * s_prev - s_prev2;
+ s_prev2 = s_prev;
+ s_prev = s;
+ }
+ float goertzelFilter3 = s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2;
+
+ //lcd.Clear(LCD_COLOR_BLACK);
+ //lcd.SetBackColor(LCD_COLOR_BLACK);
+ //lcd.SetTextColor(LCD_COLOR_RED);
+ //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...3...", CENTER_MODE);
+ wait(0.1);
+
+ /////////goertzelFilter4/////////////
+ freq = note ;
+ N = Counter;
+ s_prev = 0.0;
+ s_prev2 = 0.0;
+ normalizedfreq = freq / SAMPLE_RATE;
+ coeff = 2*cos(2*PI*normalizedfreq);
+ for (int i=0; i<=N ; i=i+1){
+ s = Buffer[i] + coeff * s_prev - s_prev2;
+ s_prev2 = s_prev;
+ s_prev = s;
+ }
+ goertzelFilter4 = s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2;
+ //lcd.Clear(LCD_COLOR_BLACK);
+ //lcd.SetBackColor(LCD_COLOR_BLACK);
+ //lcd.SetTextColor(LCD_COLOR_RED);
+ //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)" ..4.. ", CENTER_MODE);
+ wait(0.1);
+
+
+ /////////goertzelFilter5/////////////
+ //freq = note - 1;
+ // N = Counter;
+ // s_prev = 0.0;
+ // s_prev2 = 0.0;
+ // normalizedfreq = freq / SAMPLE_RATE;
+ // coeff = 2*cos(2*PI*normalizedfreq);
+ //for (int i=0; i<=N ; i=i+1){
+ // s = Buffer[i] + coeff * s_prev - s_prev2;
+ // s_prev2 = s_prev;
+ // s_prev = s;
+ //}
+ //float goertzelFilter5 = s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2;
+ // lcd.Clear(LCD_COLOR_BLACK);
+ //lcd.SetBackColor(LCD_COLOR_BLACK);
+ //lcd.SetTextColor(LCD_COLOR_RED);
+ //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...5...", CENTER_MODE);
+ // wait(0.4);
+
+
+ //in_tune1 = goertzelFilter3;
+ //in_tune2 = goertzelFilter4;
+ //in_tune3 = goertzelFilter5;
+
+ // if ((in_tune1 > in_tune2) && (in_tune1 > in_tune3))
+ //{in_tune = in_tune1;}
+ // else if ((in_tune2 > in_tune1) && (in_tune2 > in_tune3))
+ //{in_tune = in_tune2;}
+ //else {in_tune = in_tune3;}
+ //printf("high = %.2f, low = %.2f, in_tune = %.2f", high, low, in_tune);
+
+
+ //if ((in_tune > high) && (in_tune > low)) {
+ // lcd.Clear(LCD_COLOR_GREEN);
+ // lcd.SetBackColor(LCD_COLOR_GREEN);
+ // lcd.SetTextColor(LCD_COLOR_BLACK);
+ // lcd.DisplayStringAt(0,LINE(5),(uint8_t*)"NOW INTUNE!!!!",CENTER_MODE);
+ //wait(1.5);
+ // }
+ //else if (high > in_tune) {
+ // lcd.Clear(LCD_COLOR_RED);
+ //wait(1.5);}
+ //else if (low > in_tune) {
+ // lcd.Clear(LCD_COLOR_BLUE);
+ // wait(1.5);}
+ // else{}
+
+ lcd.Clear(LCD_COLOR_YELLOW);
+ lcd.SetBackColor(LCD_COLOR_YELLOW);
+ lcd.SetTextColor(LCD_COLOR_RED);
+ char str1[20],str2[20],str3[20];
+ sprintf(str1," Relative Magnitude ");
+ lcd.DisplayStringAt(0, LINE(3), (uint8_t *)str1, CENTER_MODE);
+ sprintf(str3," Note : %c%d ",rac,in);
+ lcd.DisplayStringAt(0, LINE(5), (uint8_t *)str3, CENTER_MODE);
+ sprintf(str2," %f ",goertzelFilter4);
+ lcd.DisplayStringAt(0, LINE(7), (uint8_t *)str2, CENTER_MODE);
+ wait(4);
+ }
+
+}
\ No newline at end of file
--- a/mbed.bld Wed Jun 07 09:31:50 2017 +0200 +++ b/mbed.bld Sun May 12 05:46:45 2019 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/86740a56073b \ No newline at end of file +https://os.mbed.com/users/mbed_official/code/mbed/builds/3a7713b1edbc \ No newline at end of file