Stap 6: Programe - Arduino Code
December 2012
Programmacode die is geschreven voor REMAP: www.remap.org.uk A liefdadigheidsinstelling die op maat gemaakte apparatuur voor mensen met een handicap produceert.
Code ontworpen met behulp van een Arduino maken een gitaar tuner geschikt voor gebruik door blinden
De tuner van de gitaar bewerkt was een Cherub WST-550
Gebruiken, kopiëren, wijzigen, verbeteren de code alle die je leuk vindt, geen garanties al... Goed geluk / veel plezier...
Dit stelt de eigenschappen van de feedback-tonen.
#define NOTE_FLAT 93 / / de Toon gespeeld wanneer een platte notitie wordt gedetecteerd: G Flat
#define NOTE_SHARP 887 / / de Toon gespeeld wanneer een scherpe opmerking wordt gedetecteerd: D scherpe
#define NOTE_6E 105 / / de Toon afgespeeld wanneer een 6E wordt gedetecteerd (maar de Toon eigenlijk E4 is)
#define NOTE_5A 157 / / de Toon afgespeeld wanneer een 5A wordt gedetecteerd (maar de Toon eigenlijk A3 is)
#define NOTE_4D 235 / / de Toon speelde toen een 4D wordt gedetecteerd (maar de Toon eigenlijk D3 is)
#define NOTE_3G 352 / / de Toon afgespeeld wanneer een 3G wordt gedetecteerd (maar de Toon eigenlijk G2 is)
#define NOTE_2B 559 / / de Toon afgespeeld wanneer een 2B wordt gedetecteerd (maar de Toon eigenlijk B1 is)
#define NOTE_1E 837 / / de Toon afgespeeld wanneer een 1E wordt gedetecteerd (maar de Toon eigenlijk E1 is)
#define NOTE_DURATION 300 / / alle tijden in milliseconden de duur van Toon gespeeld bij het opstarten of bij het selecteren van een string
#define NOTE_DELAY1 200 / / tijd tussen feedback piepjes
#define NOTE_DUR2 400 / / de duur van Toon afgespeeld wanneer een in tune tekenreeks wordt gedetecteerd
Ingang van de pinnen voor de lezing van de notitie LEDs
int p6E = 7; PIN aangesloten op de 6E LED
int p5A = 6; Pin verbonden met de 5A-LED
int p4D = 5; PIN aangesloten op de 4D-LED
int p3G = 4; Pin verbonden met de 3G-LED
int p2B = 3; Pin verbonden met de 2B-LED
int p1E = 2; Pin verbonden met de 1E-LED
Input pinnen voor het lezen van de melodie LEDs
int p40 = 11; Pin verbonden met de diodes die de + 50 en + 40 LEDs combineren
int p30 = 12; Pin verbonden met de + 30 LED
int p20 = 13; Pin verbonden met de + 20 LED
int p10 = 14; (Analoge pin 0) Pin verbonden met de + 10 LED
int tune = 15; (Analoge pin 1) Pin verbonden met de 0 LED
int n10 = 16; (Analoge pin 2) Pin aangesloten op de -10 LED
int n20 = 18; (Analoge pin 4) Pin aangesloten op de -20 LED
int n30 = 17; (Analoge pin 3) Pin aangesloten op de -30 LED
int n40 = 19; (Analoge pin 5) Pin verbonden met de diodes die de LEDs-40 en -50 combineren
Andere pinnen
int spkr = 10; Uitgang pins die verbinding maakt met de hoofdtelefoon via een weerstand (hoogste waarde die nog steeds een luid genoeg output geeft).
int knop = 9; Ingang Pin die is verbonden met de knop voor het selecteren van tekenreeks.
int platte = 8; Ingang Pin die zintuigen als de tuner in halve toon modus is?
Variabelen
int offset = 0; Hoe ver out of tune de tekenreeks is, bijvoorbeeld als LED -30 brandt zullen de waarde van deze variabele -40.
int Opmerking = 0; Variabele naar record welke opmerking werd gedetecteerd 1 = 1E, 2 = 2B, 3 = 3 G, 4 = 4 D, 5 = 5A, 6 = 6E.
int noteSelect = 0; Deze slaat welke tekenreeks is geselecteerd als de specifieke string-modus is in gebruik 0 = uit.
int lastOffset = 0; Eerdere verschuiving gezien.
int lastNote = 0; Vorige notitie gezien.
VOID Setup {}
Serial.begin(9600); Voor het zoeken van de schuld
Set pin modi
pinMode(p6E,INPUT);
pinMode(p5A,INPUT);
pinMode(p4D,INPUT);
pinMode(p3G,INPUT);
pinMode(p2B,INPUT);
pinMode(p1E,INPUT);
pinMode(p40,INPUT);
pinMode(p30,INPUT);
pinMode(p20,INPUT);
pinMode(p10,INPUT);
pinMode(tune,INPUT);
pinMode(n10,INPUT);
pinMode(n20,INPUT);
pinMode(n30,INPUT);
pinMode(n40,INPUT);
pinMode(flat,INPUT);
pinMode(spkr,OUTPUT);
pinMode(button,INPUT);
digitalWrite(button,HIGH);
Spelen sommige tonen op begin tot laat de gebruiker weten dat de tuner werkt.
Toon (spkr, NOTE_1E, NOTE_DURATION);
delay(NOTE_DELAY1);
Toon (spkr, NOTE_2B, NOTE_DURATION);
delay(NOTE_DELAY1);
Toon (spkr, NOTE_3G, NOTE_DURATION);
delay(NOTE_DELAY1);
Toon (spkr, NOTE_4D, NOTE_DURATION);
delay(NOTE_DELAY1);
Toon (spkr, NOTE_5A, NOTE_DURATION);
delay(NOTE_DELAY1);
Toon (spkr, NOTE_6E, NOTE_DURATION);
delay(800);
Controleer of de tuner is in halve Toon tuning modus. Als er, spelen sommige meer tonen
if(digitalRead(Flat) == 0) {}
Serial.println ("halve toon modus is ingeschakeld");
Toon (spkr, NOTE_FLAT, 500);
delay(800);
Toon (spkr, NOTE_FLAT, 500);
delay(800);
Toon (spkr, NOTE_FLAT, 500);
delay(800);
Toon (spkr, NOTE_FLAT, 500);
delay(800);
}
}
void loop {}
lastOffset = offset;
lastNote = Opmerking;
ButtonV(); Controleer als de knop wordt ingedrukt
NotesV(); Controleer als tekenreeksen kunnen worden gehoord
OffsetsV(); / / zien hoe uit van tune de snaren
Als (Opmerking! = 0) {/ / als een tekenreeks is geconstateerd
Als (noteSelect == 0 || noteSelect == opmerking) {/ / controleren als een specifieke string is worden afgestemd
if(Note == lastNote) {/ / ervoor zorgen dat de lezing is gestabiliseerd voor een tijdje (dat wil zeggen twee lezingen herhalen)
if(offset == lastOffset) {/ / Check lezing is gestabiliseerd
Output(); Audio feedback geven
}
}
}
}
delay(200);
}
VOID Output() {/ / een opmerking is geconstateerd dus tijd om wat feedback te geven
delay(100);
Toon om te laten zien welke opmerking
if(Note == 1) {}
Toon (spkr, NOTE_1E, NOTE_DUR2);
}
if(Note == 2) {}
Toon (spkr, NOTE_2B, NOTE_DUR2);
}
if(Note == 3) {}
Toon (spkr, NOTE_3G, NOTE_DUR2);
}
if(note == 4) {}
Toon (spkr, NOTE_4D, NOTE_DUR2);
}
if(Note == 5) {}
Toon (spkr, NOTE_5A, NOTE_DUR2);
}
if(Note == 6) {}
Toon (spkr, NOTE_6E, NOTE_DUR2);
}
delay(100);
Toon om feedback te geven aan hoe scherpe of plat.
Als (> 1 gecompenseerd || gecompenseerd < 0) {}
offset = offset * 5;
Als (offset < 0) {}
offset = offset *-1;
Toon (spkr, NOTE_FLAT, offset);
delay(250);
Toon (spkr, NOTE_FLAT, offset);
delay(250);
Toon (spkr, NOTE_FLAT, offset);
delay(250);
}
else {}
Toon (spkr, NOTE_SHARP, offset);
delay(250);
Toon (spkr, NOTE_SHARP, offset);
delay(250);
Toon (spkr, NOTE_SHARP, offset);
delay(250);
}
}
else {/ / wat te spelen als de tekenreeks is in tune
if(Note == 1) {}
Toon (spkr, NOTE_1E, NOTE_DUR2);
}
if(Note == 2) {}
Toon (spkr, NOTE_2B, NOTE_DUR2);
}
if(Note == 3) {}
Toon (spkr, NOTE_3G, NOTE_DUR2);
}
if(note == 4) {}
Toon (spkr, NOTE_4D, NOTE_DUR2);
}
if(Note == 5) {}
Toon (spkr, NOTE_5A, NOTE_DUR2);
}
if(Note == 6) {}
Toon (spkr, NOTE_6E, NOTE_DUR2);
}
delay(400);
}
}
VOID ButtonV() {/ / controleren als een specifieke string wordt geselecteerd
if(digitalRead(button) == 0) {/ / Lees de knop
noteSelect ++; Increment Opmerking elke druk op de knop geselecteerd
if(noteSelect == 7) {/ / tonen om te spelen als alle noten hebben fietste door d.w.z. terug naar normale modus
noteSelect = 0;
Toon (spkr, NOTE_6E, NOTE_DURATION);
delay(NOTE_DELAY1);
Toon (spkr, NOTE_5A, NOTE_DURATION);
delay(NOTE_DELAY1);
Toon (spkr, NOTE_4D, NOTE_DURATION);
delay(NOTE_DELAY1);
Toon (spkr, NOTE_3G, NOTE_DURATION);
delay(NOTE_DELAY1);
Toon (spkr, NOTE_2B, NOTE_DURATION);
delay(NOTE_DELAY1);
Toon (spkr, NOTE_1E, NOTE_DURATION);
delay(NOTE_DELAY1);
}
if(noteSelect > 0) {/ / tonen om te spelen als de notities zijn fietste door
Toon (spkr, NOTE_1E, NOTE_DURATION);
delay(NOTE_DELAY1);
}
Als (noteSelect > 1) {}
Toon (spkr, NOTE_2B, NOTE_DURATION);
delay(NOTE_DELAY1);
}
Als (noteSelect > 2) {}
Toon (spkr, NOTE_3G, NOTE_DURATION);
delay(NOTE_DELAY1);
}
Als (noteSelect > 3) {}
Toon (spkr, NOTE_4D, NOTE_DURATION);
delay(NOTE_DELAY1);
}
Als (noteSelect > 4) {}
Toon (spkr, NOTE_5A, NOTE_DURATION);
delay(NOTE_DELAY1);
}
Als (noteSelect > 5) {}
Toon (spkr, NOTE_6E, NOTE_DURATION);
delay(NOTE_DELAY1);
}
}
}
VOID OffsetsV() {/ / leest de melodie LEDs en zet de lezing in de variabele offset
offset = 0;
if(digitalRead(P40) == 0) {}
Serial.println("P40");
offset = 40;
}
if(digitalRead(P30) == 0) {}
Serial.println("P30");
offset = 30;
}
if(digitalRead(P20) == 0) {}
Serial.println("P20");
offset = 20;
}
if(digitalRead(P10) == 0) {}
Serial.println("P10");
offset = 10;
}
if(digitalRead(Tune) == 0) {}
Serial.println("tune");
Offset = 1;
}
if(digitalRead(N40) == 0) {}
Serial.println("N40");
offset = -40;
}
if(digitalRead(N30) == 0) {}
Serial.println("N30");
offset = -30;
}
if(digitalRead(N20) == 0) {}
Serial.println("N20");
offset = -20;
}
if(digitalRead(N10) == 0) {}
Serial.println("N10");
offset = -10;
}
}
NotesV() {//Reads de notitie LEDs en winkels de resultaten in de opmerking variabele void
Opmerking = 0;
if(digitalRead(p6E) == 0) {}
Serial.println("p6E");
Opmerking = 6;
}
if(digitalRead(p5A) == 0) {}
Serial.println("p5A");
Opmerking = 5;
}
if(digitalRead(p4D) == 0) {}
Serial.println("p4D");
Opmerking = 4;
}
if(digitalRead(p3G) == 0) {}
Serial.println("p3G");
Opmerking = 3;
}
if(digitalRead(p2B) == 0) {}
Serial.println("p2B");
Opmerking = 2;
}
if(digitalRead(p1E) == 0) {}
Serial.println("p1E");
Opmerking = 1;
}
}