GOERTZELY - DISCO | stm32f746g-disco (microcontroller) | calculate relative magnitude of each standard tuning guitar strings

Dependencies:   TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG

Committer:
WasinPT
Date:
Sun May 12 05:46:45 2019 +0000
Revision:
3:ccc0103c200e
Parent:
0:9933f7db9a9b
Wasin Pongtawin

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bcostm 0:9933f7db9a9b 1 #include "mbed.h"
bcostm 0:9933f7db9a9b 2 #include "TS_DISCO_F746NG.h"
bcostm 0:9933f7db9a9b 3 #include "LCD_DISCO_F746NG.h"
bcostm 0:9933f7db9a9b 4
bcostm 0:9933f7db9a9b 5 LCD_DISCO_F746NG lcd;
bcostm 0:9933f7db9a9b 6 TS_DISCO_F746NG ts;
WasinPT 3:ccc0103c200e 7 InterruptIn button1(D0);
WasinPT 3:ccc0103c200e 8 AnalogIn Ain(A0);
WasinPT 3:ccc0103c200e 9 TS_StateTypeDef TS_State;
WasinPT 3:ccc0103c200e 10 Serial pc(USBTX, USBRX);
WasinPT 3:ccc0103c200e 11 void button1pressed() {
WasinPT 3:ccc0103c200e 12 wait(0.5);
WasinPT 3:ccc0103c200e 13 lcd.Clear(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 14 NVIC_SystemReset();
WasinPT 3:ccc0103c200e 15 }
bcostm 0:9933f7db9a9b 16
WasinPT 3:ccc0103c200e 17 int main()
bcostm 0:9933f7db9a9b 18 {
WasinPT 3:ccc0103c200e 19 pc.baud(9600);
WasinPT 3:ccc0103c200e 20 pc.format(8, SerialBase::None, 1); //default
WasinPT 3:ccc0103c200e 21 float high, high1, low, low1; //in_tune, in_tune1, in_tune2, in_tune3;
WasinPT 3:ccc0103c200e 22 int note;
WasinPT 3:ccc0103c200e 23 float Buffer[12005];;
WasinPT 3:ccc0103c200e 24 float PI=3.1415;
WasinPT 3:ccc0103c200e 25 int SAMPLE_RATE = 24000;
WasinPT 3:ccc0103c200e 26 float goertzelFilter4;
WasinPT 3:ccc0103c200e 27 char rac;
WasinPT 3:ccc0103c200e 28 int in;
WasinPT 3:ccc0103c200e 29 ///////////////////////////////////////////////////////
WasinPT 3:ccc0103c200e 30 ////////////////////
WasinPT 3:ccc0103c200e 31 //Interupt for Switching Strings
WasinPT 3:ccc0103c200e 32 button1.mode(PullDown);
WasinPT 3:ccc0103c200e 33 button1.rise(&button1pressed);
WasinPT 3:ccc0103c200e 34 int Counter = 0;
WasinPT 3:ccc0103c200e 35 lcd.Clear(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 36 lcd.SetBackColor(LCD_COLOR_DARKGREEN);
WasinPT 3:ccc0103c200e 37 lcd.SetTextColor(LCD_COLOR_YELLOW);
WasinPT 3:ccc0103c200e 38 //
WasinPT 3:ccc0103c200e 39 lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 40 lcd.FillRect(1,1,20,20);
WasinPT 3:ccc0103c200e 41 //AntiHead
WasinPT 3:ccc0103c200e 42 lcd.SetTextColor(LCD_COLOR_LIGHTBLUE);
WasinPT 3:ccc0103c200e 43 lcd.FillCircle(111,112,27);
WasinPT 3:ccc0103c200e 44 lcd.FillCircle(111,160,27);
WasinPT 3:ccc0103c200e 45 lcd.FillCircle(116,85,9);
WasinPT 3:ccc0103c200e 46 lcd.FillCircle(116,187,9);
WasinPT 3:ccc0103c200e 47 //Head
WasinPT 3:ccc0103c200e 48 lcd.SetTextColor(LCD_COLOR_LIGHTBLUE);
WasinPT 3:ccc0103c200e 49 lcd.FillRect(114,70,100,133);
WasinPT 3:ccc0103c200e 50 lcd.FillRect(205,76,57,120);
WasinPT 3:ccc0103c200e 51 lcd.FillRect(262,70,100,133);
WasinPT 3:ccc0103c200e 52 lcd.FillRect(262,70,100,133);
WasinPT 3:ccc0103c200e 53 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 54 lcd.FillCircle(362,70,25);
WasinPT 3:ccc0103c200e 55 lcd.FillCircle(362,203,25);
WasinPT 3:ccc0103c200e 56 lcd.SetBackColor(LCD_COLOR_LIGHTBLUE);
WasinPT 3:ccc0103c200e 57 lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 58 lcd.DisplayStringAt(0,LINE(5),(uint8_t*)"GOERTZELY-disco",CENTER_MODE);
WasinPT 3:ccc0103c200e 59 lcd.SetTextColor(LCD_COLOR_WHITE);
WasinPT 3:ccc0103c200e 60 lcd.FillRect(362,95,12,84);
WasinPT 3:ccc0103c200e 61 lcd.SetTextColor(LCD_COLOR_BROWN);
WasinPT 3:ccc0103c200e 62 lcd.FillRect(374,95,106,84);
WasinPT 3:ccc0103c200e 63 lcd.SetTextColor(LCD_COLOR_LIGHTGRAY);
WasinPT 3:ccc0103c200e 64 lcd.FillRect(426,95,4,84);
WasinPT 3:ccc0103c200e 65 lcd.FillCircle(400,137,8);
WasinPT 3:ccc0103c200e 66 lcd.FillCircle(452,137,8);
WasinPT 3:ccc0103c200e 67 //TuningSlot
WasinPT 3:ccc0103c200e 68 lcd.SetTextColor(LCD_COLOR_LIGHTGRAY); //TOP
WasinPT 3:ccc0103c200e 69 lcd.FillRect(298,50,9,20);
WasinPT 3:ccc0103c200e 70 lcd.FillRect(236,54,9,22);
WasinPT 3:ccc0103c200e 71 lcd.FillRect(174,50,9,20);
WasinPT 3:ccc0103c200e 72 // //Bottom
WasinPT 3:ccc0103c200e 73 lcd.FillRect(298,203,9,20);
WasinPT 3:ccc0103c200e 74 lcd.FillRect(236,196,9,22);
WasinPT 3:ccc0103c200e 75 lcd.FillRect(174,203,9,20);
WasinPT 3:ccc0103c200e 76
WasinPT 3:ccc0103c200e 77 lcd.SetTextColor(LCD_COLOR_YELLOW);
WasinPT 3:ccc0103c200e 78 lcd.FillRect(277,15,52,35);//E4
WasinPT 3:ccc0103c200e 79 lcd.FillRect(215,19,52,37);//B3
WasinPT 3:ccc0103c200e 80 lcd.FillRect(153,15,52,35);//G3
WasinPT 3:ccc0103c200e 81 lcd.FillRect(277,223,52,35);//E2
WasinPT 3:ccc0103c200e 82 lcd.FillRect(215,216,52,37);//A2
WasinPT 3:ccc0103c200e 83 lcd.FillRect(153,223,52,35);//D3
WasinPT 3:ccc0103c200e 84
WasinPT 3:ccc0103c200e 85 //Note
WasinPT 3:ccc0103c200e 86 lcd.SetBackColor(LCD_COLOR_YELLOW);
WasinPT 3:ccc0103c200e 87 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 88 lcd.DisplayStringAt(278,23,(uint8_t*)"G3",RIGHT_MODE);
WasinPT 3:ccc0103c200e 89 lcd.DisplayStringAt(216,29,(uint8_t*)"B3",RIGHT_MODE);
WasinPT 3:ccc0103c200e 90 lcd.DisplayStringAt(154,23,(uint8_t*)"E4",RIGHT_MODE);
WasinPT 3:ccc0103c200e 91
WasinPT 3:ccc0103c200e 92 lcd.DisplayStringAt(278,229,(uint8_t*)"D3",RIGHT_MODE);
WasinPT 3:ccc0103c200e 93 lcd.DisplayStringAt(216,223,(uint8_t*)"A2",RIGHT_MODE);
WasinPT 3:ccc0103c200e 94 lcd.DisplayStringAt(154,229,(uint8_t*)"E2",RIGHT_MODE);
WasinPT 3:ccc0103c200e 95
bcostm 0:9933f7db9a9b 96
WasinPT 3:ccc0103c200e 97 while (note<50) {
WasinPT 3:ccc0103c200e 98 ts.GetState(&TS_State);
WasinPT 3:ccc0103c200e 99 if(((TS_State.touchX[0]>277)&&(TS_State.touchX[0]<329))
WasinPT 3:ccc0103c200e 100 &&((TS_State.touchY[0]>223)&&(TS_State.touchY[0]<258))) //6
WasinPT 3:ccc0103c200e 101 {
WasinPT 3:ccc0103c200e 102 lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 103 lcd.FillRect(277,223,52,35);
WasinPT 3:ccc0103c200e 104 lcd.SetBackColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 105 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 106 lcd.DisplayStringAt(154,229,(uint8_t*)"E2",RIGHT_MODE);
WasinPT 3:ccc0103c200e 107 note = 82;
WasinPT 3:ccc0103c200e 108 rac = 'E';
WasinPT 3:ccc0103c200e 109 in = 2;
WasinPT 3:ccc0103c200e 110
WasinPT 3:ccc0103c200e 111 }
WasinPT 3:ccc0103c200e 112 if(((TS_State.touchX[0]>215)&&(TS_State.touchX[0]<267))
WasinPT 3:ccc0103c200e 113 &&((TS_State.touchY[0]>216)&&(TS_State.touchY[0]<253))) //5
WasinPT 3:ccc0103c200e 114 {
WasinPT 3:ccc0103c200e 115 lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 116 lcd.FillRect(215,216,52,37);
WasinPT 3:ccc0103c200e 117 lcd.SetBackColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 118 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 119 lcd.DisplayStringAt(216,223,(uint8_t*)"A2",RIGHT_MODE);
WasinPT 3:ccc0103c200e 120 note = 110;
WasinPT 3:ccc0103c200e 121 rac = 'A';
WasinPT 3:ccc0103c200e 122 in = 2;
WasinPT 3:ccc0103c200e 123
WasinPT 3:ccc0103c200e 124 }
WasinPT 3:ccc0103c200e 125 if(((TS_State.touchX[0]>153)&&(TS_State.touchX[0]<205))
WasinPT 3:ccc0103c200e 126 &&((TS_State.touchY[0]>223)&&(TS_State.touchY[0]<258))) //4
WasinPT 3:ccc0103c200e 127 {
WasinPT 3:ccc0103c200e 128 lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 129 lcd.FillRect(153,223,52,35);
WasinPT 3:ccc0103c200e 130 lcd.SetBackColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 131 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 132 lcd.DisplayStringAt(278,229,(uint8_t*)"D3",RIGHT_MODE);
WasinPT 3:ccc0103c200e 133 note = 147;
WasinPT 3:ccc0103c200e 134 rac = 'D';
WasinPT 3:ccc0103c200e 135 in = 3;
WasinPT 3:ccc0103c200e 136 }
WasinPT 3:ccc0103c200e 137 if(((TS_State.touchX[0]>153)&&(TS_State.touchX[0]<205))
WasinPT 3:ccc0103c200e 138 &&((TS_State.touchY[0]>15)&&(TS_State.touchY[0]<50))) //3
WasinPT 3:ccc0103c200e 139 {
WasinPT 3:ccc0103c200e 140 lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 141 lcd.FillRect(153,15,52,35);
WasinPT 3:ccc0103c200e 142 lcd.SetBackColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 143 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 144 lcd.DisplayStringAt(278,23,(uint8_t*)"G3",RIGHT_MODE);
WasinPT 3:ccc0103c200e 145 note = 196;
WasinPT 3:ccc0103c200e 146 rac = 'G';
WasinPT 3:ccc0103c200e 147 in = 3;
WasinPT 3:ccc0103c200e 148 }
WasinPT 3:ccc0103c200e 149 if(((TS_State.touchX[0]>215)&&(TS_State.touchX[0]<267))
WasinPT 3:ccc0103c200e 150 &&((TS_State.touchY[0]>19)&&(TS_State.touchY[0]<56))) //2
WasinPT 3:ccc0103c200e 151 {
WasinPT 3:ccc0103c200e 152 lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 153 lcd.FillRect(215,19,52,37);
WasinPT 3:ccc0103c200e 154 lcd.SetBackColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 155 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 156 lcd.DisplayStringAt(216,29,(uint8_t*)"B3",RIGHT_MODE);
WasinPT 3:ccc0103c200e 157 note = 247;
WasinPT 3:ccc0103c200e 158 rac = 'B';
WasinPT 3:ccc0103c200e 159 in = 3;
WasinPT 3:ccc0103c200e 160 }
WasinPT 3:ccc0103c200e 161 if(((TS_State.touchX[0]>277)&&(TS_State.touchX[0]<329))
WasinPT 3:ccc0103c200e 162 &&((TS_State.touchY[0]>15)&&(TS_State.touchY[0]<50))) //1
WasinPT 3:ccc0103c200e 163 {
WasinPT 3:ccc0103c200e 164 lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 165 lcd.FillRect(277,15,52,35);
WasinPT 3:ccc0103c200e 166 lcd.SetBackColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 167 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 168 lcd.DisplayStringAt(154,23,(uint8_t*)"E4",RIGHT_MODE);
WasinPT 3:ccc0103c200e 169 note = 330;
WasinPT 3:ccc0103c200e 170 rac = 'E';
WasinPT 3:ccc0103c200e 171 in = 4;
WasinPT 3:ccc0103c200e 172 }
WasinPT 3:ccc0103c200e 173 }
WasinPT 3:ccc0103c200e 174
WasinPT 3:ccc0103c200e 175 wait(0.5);
WasinPT 3:ccc0103c200e 176
WasinPT 3:ccc0103c200e 177
WasinPT 3:ccc0103c200e 178 while(1){////// mother while ///////////////////
WasinPT 3:ccc0103c200e 179
WasinPT 3:ccc0103c200e 180 lcd.Clear(LCD_COLOR_LIGHTRED);
WasinPT 3:ccc0103c200e 181 lcd.SetBackColor(LCD_COLOR_LIGHTRED);
WasinPT 3:ccc0103c200e 182 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 183 lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...1...", CENTER_MODE);
WasinPT 3:ccc0103c200e 184 wait(1);
WasinPT 3:ccc0103c200e 185 lcd.Clear(LCD_COLOR_LIGHTRED);
WasinPT 3:ccc0103c200e 186 lcd.SetBackColor(LCD_COLOR_LIGHTRED);
WasinPT 3:ccc0103c200e 187 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 188 lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...2...", CENTER_MODE);
WasinPT 3:ccc0103c200e 189 wait(1);
WasinPT 3:ccc0103c200e 190 lcd.Clear(LCD_COLOR_LIGHTRED);
WasinPT 3:ccc0103c200e 191 lcd.SetBackColor(LCD_COLOR_LIGHTRED);
WasinPT 3:ccc0103c200e 192 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 193 lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...3...", CENTER_MODE);
bcostm 0:9933f7db9a9b 194 wait(1);
bcostm 0:9933f7db9a9b 195
WasinPT 3:ccc0103c200e 196 button1.mode(PullDown);
WasinPT 3:ccc0103c200e 197 button1.rise(&button1pressed);
WasinPT 3:ccc0103c200e 198 Counter = 0;
WasinPT 3:ccc0103c200e 199 lcd.Clear(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 200 for(int i=0;i<10000;i=i+1)
WasinPT 3:ccc0103c200e 201 {
WasinPT 3:ccc0103c200e 202 Buffer[i] = Ain.read();
WasinPT 3:ccc0103c200e 203 Counter = Counter+1;
WasinPT 3:ccc0103c200e 204 char str[20],con[20];
WasinPT 3:ccc0103c200e 205 lcd.SetBackColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 206 lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 207 sprintf(con," Please Keep Picking : %c%d ",rac,in);
WasinPT 3:ccc0103c200e 208 lcd.DisplayStringAt(0, LINE(4), (uint8_t *)con, CENTER_MODE);
WasinPT 3:ccc0103c200e 209 sprintf(str,"We did %d sample",Counter);
WasinPT 3:ccc0103c200e 210 lcd.DisplayStringAt(0, LINE(6), (uint8_t *)str, CENTER_MODE);
WasinPT 3:ccc0103c200e 211 wait_us(42);
bcostm 0:9933f7db9a9b 212 }
bcostm 0:9933f7db9a9b 213
WasinPT 3:ccc0103c200e 214 /////////////////CALCULATION//////////
WasinPT 3:ccc0103c200e 215 high = 0;
WasinPT 3:ccc0103c200e 216 low = 0;
WasinPT 3:ccc0103c200e 217 ////HIGH//////
WasinPT 3:ccc0103c200e 218
WasinPT 3:ccc0103c200e 219 for (int i=3; i<46; i+=3)
WasinPT 3:ccc0103c200e 220 {
WasinPT 3:ccc0103c200e 221 float freq = note + i;
WasinPT 3:ccc0103c200e 222 int N = Counter;
WasinPT 3:ccc0103c200e 223 float s_prev = 0.0;
WasinPT 3:ccc0103c200e 224 float s_prev2 = 0.0;
WasinPT 3:ccc0103c200e 225 float coeff,normalizedfreq,s;
WasinPT 3:ccc0103c200e 226 normalizedfreq = freq / SAMPLE_RATE;
WasinPT 3:ccc0103c200e 227 coeff = 2*cos(2*PI*normalizedfreq);
WasinPT 3:ccc0103c200e 228 for (int i=0; i<=N ; i=i+1) {
WasinPT 3:ccc0103c200e 229 s = Buffer[i] + coeff * s_prev - s_prev2;
WasinPT 3:ccc0103c200e 230 s_prev2 = s_prev;
WasinPT 3:ccc0103c200e 231 s_prev = s;
WasinPT 3:ccc0103c200e 232 }
WasinPT 3:ccc0103c200e 233 float goertzelFilter1 = s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2;
WasinPT 3:ccc0103c200e 234 high1 = goertzelFilter1;
WasinPT 3:ccc0103c200e 235 if (high1 > high)
WasinPT 3:ccc0103c200e 236 {
WasinPT 3:ccc0103c200e 237 high=high1;
WasinPT 3:ccc0103c200e 238 }
WasinPT 3:ccc0103c200e 239 }
WasinPT 3:ccc0103c200e 240 //lcd.Clear(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 241 //lcd.SetBackColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 242 //lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 243 //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...1...", CENTER_MODE);
WasinPT 3:ccc0103c200e 244 wait(0.1);
WasinPT 3:ccc0103c200e 245 ////LOW//////
WasinPT 3:ccc0103c200e 246 for (int i=3; i<46; i+=3)
WasinPT 3:ccc0103c200e 247 {
WasinPT 3:ccc0103c200e 248 float freq = note - i;
WasinPT 3:ccc0103c200e 249 int N = Counter;
WasinPT 3:ccc0103c200e 250 float s_prev = 0.0;
WasinPT 3:ccc0103c200e 251 float s_prev2 = 0.0;
WasinPT 3:ccc0103c200e 252 float coeff,normalizedfreq,s;
WasinPT 3:ccc0103c200e 253 normalizedfreq = freq / SAMPLE_RATE;
WasinPT 3:ccc0103c200e 254 coeff = 2*cos(2*PI*normalizedfreq);
WasinPT 3:ccc0103c200e 255 for (int i=0; i<=N ; i=i+1) {
WasinPT 3:ccc0103c200e 256 s = Buffer[i] + coeff * s_prev - s_prev2;
WasinPT 3:ccc0103c200e 257 s_prev2 = s_prev;
WasinPT 3:ccc0103c200e 258 s_prev = s;
WasinPT 3:ccc0103c200e 259 }
WasinPT 3:ccc0103c200e 260 float goertzelFilter2 = s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2;
WasinPT 3:ccc0103c200e 261 low1 = goertzelFilter2;
WasinPT 3:ccc0103c200e 262 if (low1 > low)
WasinPT 3:ccc0103c200e 263 {
WasinPT 3:ccc0103c200e 264 low=low1;
bcostm 0:9933f7db9a9b 265 }
bcostm 0:9933f7db9a9b 266 }
WasinPT 3:ccc0103c200e 267 // lcd.Clear(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 268 //lcd.SetBackColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 269 //lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 270 //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)" ..2.. ", CENTER_MODE);
WasinPT 3:ccc0103c200e 271 wait(0.1);
WasinPT 3:ccc0103c200e 272
WasinPT 3:ccc0103c200e 273 /////////goertzelFilter3/////////////
WasinPT 3:ccc0103c200e 274 float freq = note + 1;
WasinPT 3:ccc0103c200e 275 int N = Counter;
WasinPT 3:ccc0103c200e 276 float s_prev = 0.0;
WasinPT 3:ccc0103c200e 277 float s_prev2 = 0.0;
WasinPT 3:ccc0103c200e 278 float coeff,normalizedfreq,s;
WasinPT 3:ccc0103c200e 279 normalizedfreq = freq / SAMPLE_RATE;
WasinPT 3:ccc0103c200e 280 coeff = 2*cos(2*PI*normalizedfreq);
WasinPT 3:ccc0103c200e 281 for (int i=0; i<=N ; i=i+1)
WasinPT 3:ccc0103c200e 282 {
WasinPT 3:ccc0103c200e 283 s = Buffer[i] + coeff * s_prev - s_prev2;
WasinPT 3:ccc0103c200e 284 s_prev2 = s_prev;
WasinPT 3:ccc0103c200e 285 s_prev = s;
WasinPT 3:ccc0103c200e 286 }
WasinPT 3:ccc0103c200e 287 float goertzelFilter3 = s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2;
WasinPT 3:ccc0103c200e 288
WasinPT 3:ccc0103c200e 289 //lcd.Clear(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 290 //lcd.SetBackColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 291 //lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 292 //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...3...", CENTER_MODE);
WasinPT 3:ccc0103c200e 293 wait(0.1);
WasinPT 3:ccc0103c200e 294
WasinPT 3:ccc0103c200e 295 /////////goertzelFilter4/////////////
WasinPT 3:ccc0103c200e 296 freq = note ;
WasinPT 3:ccc0103c200e 297 N = Counter;
WasinPT 3:ccc0103c200e 298 s_prev = 0.0;
WasinPT 3:ccc0103c200e 299 s_prev2 = 0.0;
WasinPT 3:ccc0103c200e 300 normalizedfreq = freq / SAMPLE_RATE;
WasinPT 3:ccc0103c200e 301 coeff = 2*cos(2*PI*normalizedfreq);
WasinPT 3:ccc0103c200e 302 for (int i=0; i<=N ; i=i+1){
WasinPT 3:ccc0103c200e 303 s = Buffer[i] + coeff * s_prev - s_prev2;
WasinPT 3:ccc0103c200e 304 s_prev2 = s_prev;
WasinPT 3:ccc0103c200e 305 s_prev = s;
WasinPT 3:ccc0103c200e 306 }
WasinPT 3:ccc0103c200e 307 goertzelFilter4 = s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2;
WasinPT 3:ccc0103c200e 308 //lcd.Clear(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 309 //lcd.SetBackColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 310 //lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 311 //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)" ..4.. ", CENTER_MODE);
WasinPT 3:ccc0103c200e 312 wait(0.1);
WasinPT 3:ccc0103c200e 313
WasinPT 3:ccc0103c200e 314
WasinPT 3:ccc0103c200e 315 /////////goertzelFilter5/////////////
WasinPT 3:ccc0103c200e 316 //freq = note - 1;
WasinPT 3:ccc0103c200e 317 // N = Counter;
WasinPT 3:ccc0103c200e 318 // s_prev = 0.0;
WasinPT 3:ccc0103c200e 319 // s_prev2 = 0.0;
WasinPT 3:ccc0103c200e 320 // normalizedfreq = freq / SAMPLE_RATE;
WasinPT 3:ccc0103c200e 321 // coeff = 2*cos(2*PI*normalizedfreq);
WasinPT 3:ccc0103c200e 322 //for (int i=0; i<=N ; i=i+1){
WasinPT 3:ccc0103c200e 323 // s = Buffer[i] + coeff * s_prev - s_prev2;
WasinPT 3:ccc0103c200e 324 // s_prev2 = s_prev;
WasinPT 3:ccc0103c200e 325 // s_prev = s;
WasinPT 3:ccc0103c200e 326 //}
WasinPT 3:ccc0103c200e 327 //float goertzelFilter5 = s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2;
WasinPT 3:ccc0103c200e 328 // lcd.Clear(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 329 //lcd.SetBackColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 330 //lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 331 //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"...5...", CENTER_MODE);
WasinPT 3:ccc0103c200e 332 // wait(0.4);
WasinPT 3:ccc0103c200e 333
WasinPT 3:ccc0103c200e 334
WasinPT 3:ccc0103c200e 335 //in_tune1 = goertzelFilter3;
WasinPT 3:ccc0103c200e 336 //in_tune2 = goertzelFilter4;
WasinPT 3:ccc0103c200e 337 //in_tune3 = goertzelFilter5;
WasinPT 3:ccc0103c200e 338
WasinPT 3:ccc0103c200e 339 // if ((in_tune1 > in_tune2) && (in_tune1 > in_tune3))
WasinPT 3:ccc0103c200e 340 //{in_tune = in_tune1;}
WasinPT 3:ccc0103c200e 341 // else if ((in_tune2 > in_tune1) && (in_tune2 > in_tune3))
WasinPT 3:ccc0103c200e 342 //{in_tune = in_tune2;}
WasinPT 3:ccc0103c200e 343 //else {in_tune = in_tune3;}
WasinPT 3:ccc0103c200e 344 //printf("high = %.2f, low = %.2f, in_tune = %.2f", high, low, in_tune);
WasinPT 3:ccc0103c200e 345
WasinPT 3:ccc0103c200e 346
WasinPT 3:ccc0103c200e 347 //if ((in_tune > high) && (in_tune > low)) {
WasinPT 3:ccc0103c200e 348 // lcd.Clear(LCD_COLOR_GREEN);
WasinPT 3:ccc0103c200e 349 // lcd.SetBackColor(LCD_COLOR_GREEN);
WasinPT 3:ccc0103c200e 350 // lcd.SetTextColor(LCD_COLOR_BLACK);
WasinPT 3:ccc0103c200e 351 // lcd.DisplayStringAt(0,LINE(5),(uint8_t*)"NOW INTUNE!!!!",CENTER_MODE);
WasinPT 3:ccc0103c200e 352 //wait(1.5);
WasinPT 3:ccc0103c200e 353 // }
WasinPT 3:ccc0103c200e 354 //else if (high > in_tune) {
WasinPT 3:ccc0103c200e 355 // lcd.Clear(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 356 //wait(1.5);}
WasinPT 3:ccc0103c200e 357 //else if (low > in_tune) {
WasinPT 3:ccc0103c200e 358 // lcd.Clear(LCD_COLOR_BLUE);
WasinPT 3:ccc0103c200e 359 // wait(1.5);}
WasinPT 3:ccc0103c200e 360 // else{}
WasinPT 3:ccc0103c200e 361
WasinPT 3:ccc0103c200e 362 lcd.Clear(LCD_COLOR_YELLOW);
WasinPT 3:ccc0103c200e 363 lcd.SetBackColor(LCD_COLOR_YELLOW);
WasinPT 3:ccc0103c200e 364 lcd.SetTextColor(LCD_COLOR_RED);
WasinPT 3:ccc0103c200e 365 char str1[20],str2[20],str3[20];
WasinPT 3:ccc0103c200e 366 sprintf(str1," Relative Magnitude ");
WasinPT 3:ccc0103c200e 367 lcd.DisplayStringAt(0, LINE(3), (uint8_t *)str1, CENTER_MODE);
WasinPT 3:ccc0103c200e 368 sprintf(str3," Note : %c%d ",rac,in);
WasinPT 3:ccc0103c200e 369 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)str3, CENTER_MODE);
WasinPT 3:ccc0103c200e 370 sprintf(str2," %f ",goertzelFilter4);
WasinPT 3:ccc0103c200e 371 lcd.DisplayStringAt(0, LINE(7), (uint8_t *)str2, CENTER_MODE);
WasinPT 3:ccc0103c200e 372 wait(4);
WasinPT 3:ccc0103c200e 373 }
WasinPT 3:ccc0103c200e 374
WasinPT 3:ccc0103c200e 375 }