Visuele / auditieve Guitar Tuner "The Tune Trainer" (2 / 4 stap)

Stap 2: programmeren


Het programma voor de arduino neemt in knop opdrachten uit de 6 drukknoppen op pennen 2-7 en uitgangen van de geselecteerde frequentie in licht en geluid via pin 10 en 11 (twee van de PWM-pinnen) deze uitgangen zijn gepulseerde hoog en laag op de frequentie van de geselecteerde notitie te rijden van de Peizo en de LED respectievelijk

Hier is de fundamentele stroom van het programma (in pseudo-code):

lus
-Controleer voor knoppen
-als knop
--Kies "frequentie"
--lus
---set leidde hoog
---piëzo hoog instellen
---wachten "bracht pulslengte"
---set leidde laag
---"frequentie" wachten / 2 - "bracht pulslengte"
---piezo laag instellen
---"frequentie" wachten / 2
---check voor knoppen
---als knop
----pauze
---eindigen als
--einde lus
-Als
einde lus

en de volledige code

 //**************************// THE TUNE TRAINER v1.0// BY: GREG SCHOPPE// http://www.gschoppe.com//**************************// STRINGS ========================================#define e 3034 // 329.63 Hz#define b 4050 // 246.94 Hz#define g 5102 // 196.00 Hz#define d 6811 // 146.83 Hz#define a 9091 // 110.00 Hz#define E 12135 // 82.407 Hz#define NONE 0 // Default State// -- length of time the LED is on in each cycle#define FlashLength 1024// SETUP ============================================// Set up input on 6 pinsint inPin_e = 7;int inPin_b = 6;int inPin_g = 5;int inPin_d = 4;int inPin_a = 3;int inPin_E = 2;// Set up output on a PWM pin (digital 9, 10 or 11)int freqOut = 11;// Do we want debugging on serial out? 1 for yes, 0 for noint DEBUG = 0;void setup() { pinMode(freqOut, OUTPUT); // declare pushbuttons as input pinMode(inPin_e, INPUT); //high-e pinMode(inPin_b, INPUT); // b pinMode(inPin_g, INPUT); // g pinMode(inPin_d, INPUT); // d pinMode(inPin_a, INPUT); // a pinMode(inPin_E, INPUT); // low-e // turn on pull-up resistors digitalWrite(inPin_e,HIGH); //high-e digitalWrite(inPin_b,HIGH); // b digitalWrite(inPin_g,HIGH); // g digitalWrite(inPin_d,HIGH); // d digitalWrite(inPin_a,HIGH); // a digitalWrite(inPin_E,HIGH); // low-e if (DEBUG) { Serial.begin(9600); // Set serial out if we want debugging } // SIGNAL THAT THE CHIP IS READY digitalWrite(freqOut,HIGH); delay(500); digitalWrite(freqOut,LOW); }int input () { if(digitalRead(inPin_e)==LOW) { return(e); } if(digitalRead(inPin_b)==LOW) { return(b); } if(digitalRead(inPin_g)==LOW) { return(g); } if(digitalRead(inPin_d)==LOW) { return(d); } if(digitalRead(inPin_a)==LOW) { return(a); } if(digitalRead(inPin_E)==LOW) { return(E); } return(NONE);}void playTone (int period) { if(period==NONE) { //if no button has been pressed return; } int ToneLength = period/2 - FlashLength; int OffLength = period/2; // SIGNAL THAT THE INPUT WAS ACCEPTED digitalWrite(freqOut,LOW); delay(100); digitalWrite(freqOut,HIGH); delay(100); digitalWrite(freqOut,LOW); delay(500); // CONTINUE TO STROBE LOOP // -- the strobe loop runs 4 strobes before each test, // -- to try and lose as few microseconds as possible. while(true) { // BEGIN SET OF 4 STROBES // ON TONE & LIGHT PORTB = (B00001100 | PORTB); // -- turns on Pin 11 and Pin 10; Leaves all others as-is; delayMicroseconds(FlashLength); // OFF LIGHT PORTB = (B11110111 & PORTB); // -- turns off Pin 11; Leaves all others as-is; delayMicroseconds(ToneLength); // OFF BOTH PORTB = (B11110011 & PORTB); // -- turns off Pin 11 and Pin 10; Leaves all others as-is; delayMicroseconds(OffLength); // ON TONE & LIGHT PORTB = (B00001100 | PORTB); // -- turns on Pin 11 and Pin 10; Leaves all others as-is; delayMicroseconds(FlashLength); // OFF LIGHT PORTB = (B11110111 & PORTB); // -- turns off Pin 11; Leaves all others as-is; delayMicroseconds(ToneLength); // OFF BOTH PORTB = (B11110011 & PORTB); // -- turns off Pin 11 and Pin 10; Leaves all others as-is; delayMicroseconds(OffLength); // ON TONE & LIGHT PORTB = (B00001100 | PORTB); // -- turns on Pin 11 and Pin 10; Leaves all others as-is; delayMicroseconds(FlashLength); // OFF LIGHT PORTB = (B11110111 & PORTB); // -- turns off Pin 11; Leaves all others as-is; delayMicroseconds(ToneLength); // OFF BOTH PORTB = (B11110011 & PORTB); // -- turns off Pin 11 and Pin 10; Leaves all others as-is; delayMicroseconds(OffLength); // ON TONE & LIGHT PORTB = (B00001100 | PORTB); // -- turns on Pin 11 and Pin 10; Leaves all others as-is; delayMicroseconds(FlashLength); // OFF LIGHT PORTB = (B11110111 & PORTB); // -- turns off Pin 11; Leaves all others as-is; delayMicroseconds(ToneLength); // OFF BOTH PORTB = (B11110011 & PORTB); // -- turns off Pin 11 and Pin 10; Leaves all others as-is; delayMicroseconds(OffLength); // END SET OF 4 STROBES //Check Input Pins if ( (PIND & B11111100) != B11111100) { // -- PIND is a register containing the state of pins 0-7 as a byte; // -- i.e. B11111101 would signify that pins 1 and 5 were LOW and the rest were HIGH. // -- the testing against B11111100 is to ignore inputs on pin 0 and pin 1 (RX and TX) // -- so, the above code means that if any of pins 2-7 are low, we exit the loop. return; } } }void loop() { playTone(input());} 

Ik heb een beetje tijd opgeslagen in de binnenste lus met sommige gehackte samen bit operaties, maar over het geheel genomen de codering is vrij basic. Zijn ook een beetje van een hack, dus gelieve niet zeuren me over malafide stijl syntaxis wetten. Ik weet wat ze zijn, maar wanneer ik haasten ben, ik negeer ze...

door een wijziging van de verklaringen bij de bovenkant kunt u de frequenties van elke knop.

Gerelateerde Artikelen

Arduino Guitar Tuner

Arduino Guitar Tuner

Bouw je eigen elektrische gitaar tuner met behulp van de Arduino! Ik besloot om dit te maken want ik wilde om te experimenteren met de audio-invoer en frequentie detectie. Ik gebruikte Amanda Ghassaei de methode voor de detectie van Arduino frequenti
Guitar Tuner Wallet

Guitar Tuner Wallet

So... U bent een muzikant, zeg je? U willen gaan na een gig of praktijk? Nou, is hier een manier om altijd een paar extra dollars veilig wanneer u muziek afspeelt, of gewoon in het algemeen. BTW, dit is mijn eerste instructable, dus wees niet hard al
Automatische Guitar Tuner

Automatische Guitar Tuner

twee dingen die ik echt graag willen doen zijn: gitaar spelen en sleutelen aan mijn Arduino. Ik was zeer geïnteresseerd bij de gedachte van dit project, dus heb ik besloten om het te doen. Ik ben nieuw voor de programmering, dus dit een echte uitdagi
Muts hersengolven verandert in licht

Muts hersengolven verandert in licht

Ooit wilde je hersenactiviteit in real-time te visualiseren? Een object verplaatsen op een scherm met uw gedachten? Deze tutorial toont je hoe maak je een recreatieve EEG muts die hersengolven in licht, met behulp van een microcontroller, LEDs en een
LED verlichting voor XBOX en spelletjes

LED verlichting voor XBOX en spelletjes

Ik zal hier worden montage zowel een groene en witte LED voor mijn xbox en game collectie. Lets ' sortie uit hoe ik het maakte -Stap 1: Een Guitar Tuner te veranderen in een Switch! Bekijk dat badassery. Kun je denken aan een betere huisvesting voor
Hoe aan de slag met de Unreal Engine

Hoe aan de slag met de Unreal Engine

IntroductieAls u geïnteresseerd bent in het leren hoe aan de slag met het maken van video games zal dan dit Instructable u tonen hoe dat te doen. We gebruiken Unreal Engine omdat het een moderne game-engine die maakt het gemakkelijk voor iedereen met
Betrouwbare frequentie detectie met DSP technieken

Betrouwbare frequentie detectie met DSP technieken

nauwkeurige detectie van frequentie is belangrijk voor vele projecten zoals gitaar/Piano-Tuners, trillingen Analyzers, tekeer beeldschermen, MEMs Sensor analyse en laboratoriuminstrumenten.Er zijn vele mooie voorbeelden van projecten die proberen op
Spy microfoon

Spy microfoon

dit is een microfoon discised als een dvd geval alle u nodig hebt is een dvd geval een Guitar tuner pick-up en tapeStap 1: buig de houders het geval en buig de dvd houder ding terugStap 2: het vissen de draad door het gat dan tape vissenStap 3: verbe
Gloeiende kleur veranderende gitaar

Gloeiende kleur veranderende gitaar

In het Koninkrijk van de rock and roll is het belangrijk om zichzelf apart gezet. Met miljoenen mensen in deze wereld, die de gitaar kunnen spelen, is gewoon goed spelen gewoon niet gaan knippen. U moet iets extra aan opstaan als een rock god. Overwe
Flitsende bongo's

Flitsende bongo's

hebt u ooit gewenst dat uw bongo's verlicht wanneer je ze? Ik weet dat ik heb. Het sensationeel gevoel van licht in je ogen te masseren kan worden jouwe met de interne pers en de vrijlating van de borst leerachtige bongo. Inderdaad, het artistieke on
Binnenkomende metro Lamp

Binnenkomende metro Lamp

Moe van het haasten naar de metro alleen om te zien van achterlichten zoals het trekt weg van het station?Ik ook van jou. Ik heb zo een beetje Arduino powered lamp die verandert van kleuren op basis van wanneer de volgende trein komt. Dit men werd ge
Hoe te trekken Marvin the Martian (van Looney Tunes)

Hoe te trekken Marvin the Martian (van Looney Tunes)

dit Instructable leert u hoe te trekken van de klassieke tekenfilm, Marvin the Martian.Stap 1: Materialen die nodig zijn: u hoeft niet veel materialen te trekken cartoons. Alles wat je moet tekenen van Marvin is een leeg vel papier en een potlood (me
Visuele auto tunning (vw golf 3)

Visuele auto tunning (vw golf 3)

Eens een tijd, besloten heb ik om iets in mijn auto - prachtige VW Golf III (1995) te veranderen. Veel oude auto's met sunroof hebben problemen met water dat headliner schade. Het weefsel loskomen en blauwe plek zichtbaar. Het vernietigt echt alle ch
Uw i-Tunes PC-bibliotheek kopiëren naar een nieuwe locatie

Uw i-Tunes PC-bibliotheek kopiëren naar een nieuwe locatie

Laten we zeggen dat je PC is oud... tijd om het te vervangen. U hebt alle uw vinyl gebrand (45's en albums), gekopieerd alle uw CD's, kocht een heleboel downloads van de i-Tunes store in de afgelopen paar jaar, en een manier om al die muziek en video