![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Simple guitar tuner
Diff: main.cpp
- Revision:
- 1:ae7d0cf78b3e
- Parent:
- 0:490e67fb09c2
diff -r 490e67fb09c2 -r ae7d0cf78b3e main.cpp --- a/main.cpp Mon Oct 24 23:03:27 2011 +0000 +++ b/main.cpp Wed Oct 26 02:01:28 2011 +0000 @@ -8,7 +8,7 @@ #include "mbed.h" #include "adc.h" #include "NokiaLCD.h" - +#include <math.h> #define PI 3.1415 #define SAMPLE_RATE 24000 @@ -20,8 +20,8 @@ //LCD and Other Random Variables NokiaLCD lcd(p5, p7, p8, p9, NokiaLCD::LCD6610); // mosi, sclk, cs, rst, type int string_select = 0; -float high, high1, high2, high3, high4, high5, high6, high7, high8, in_tune, in_tune1, in_tune2, in_tune3, -low, low1, low2, low3, low4, low5, low6, low7, low8, note; +float high, high1, in_tune, in_tune1, in_tune2, in_tune3, +low, low1, note, low_mod, high_mod; char* key; int Counter = 0; int Buffer[6000]; @@ -112,30 +112,31 @@ SAMPLE_RATE, actual_rate); printf("We did %i samples\n",Counter); - high1 = goertzelFilter(Buffer, (note+18), Counter); - high2 = goertzelFilter(Buffer, (note+16), Counter); - high3 = goertzelFilter(Buffer, (note+14), Counter); - high4 = goertzelFilter(Buffer, (note+12), Counter); - high5 = goertzelFilter(Buffer, (note+10), Counter); - high6 = goertzelFilter(Buffer, (note+8), Counter); - high7 = goertzelFilter(Buffer, (note+6), Counter); - high8 = goertzelFilter(Buffer, (note+4), Counter); - in_tune1 = goertzelFilter(Buffer, (note+0.5), Counter); +high = 0; +low = 0; +for (int i=3; i<46; i+=3) { + high1 = goertzelFilter(Buffer, (note + i ), Counter); + if (high1 > high) high=high1; +} +for (int i=3; i<46; i+=3) { + low1 = goertzelFilter(Buffer, (note - i ), Counter); + if (low1 > low) low=low1; +} + in_tune1 = goertzelFilter(Buffer, (note+1), Counter); in_tune2 = goertzelFilter(Buffer, note, Counter); - in_tune3 = goertzelFilter(Buffer, (note-0.5), Counter); - low1 = goertzelFilter(Buffer, (note-4), Counter); - low2 = goertzelFilter(Buffer, (note-6), Counter); - low3 = goertzelFilter(Buffer, (note-8), Counter); - low4 = goertzelFilter(Buffer, (note-10), Counter); - low5 = goertzelFilter(Buffer, (note-12), Counter); - low6 = goertzelFilter(Buffer, (note-14), Counter); - low7 = goertzelFilter(Buffer, (note-16), Counter); - low8 = goertzelFilter(Buffer, (note-18), Counter); - - in_tune = (in_tune1 + in_tune2 + in_tune3)/3; - high = (high1 + high2 + high3 + high4 + high5 + high6 + high7 + high8)/8; - low = (low1 + low2 + low3 + low4 + low5 + low6 + low7 + low8)/8; - + in_tune3 = goertzelFilter(Buffer, (note-1), Counter); + + 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); +// high_mod = high/in_tune; + // low_mod = low/in_tune; + // if ((high_mod > .8)&&(low_mod > .8)) { + // led_high = 0; + // led_ok = 0; + // led_low = 0; + // } if ((in_tune > high) && (in_tune > low)) { led_high = 0; led_ok = 1; @@ -152,9 +153,8 @@ led_high = 0; led_ok = 0; led_low = 0; - } - + // Display on the LCD lcd.locate(0,1); lcd.printf("::Guitar Tuner::"); @@ -166,7 +166,7 @@ if (led_ok) lcd.printf("In Tune!"); else if (led_low) lcd.printf("Too Low "); else if (led_high) lcd.printf("Too High"); - else lcd.printf("~~~~~"); + else lcd.printf("~~~~~~~~"); Counter = 0;