Gitaar Tuner voor blinden (met behulp van een Arduino) (6 / 8 stap)

Stap 6: Programe - Arduino Code


/ / Geschreven in Arduino 1.0.1, voor Pro Mini 3.3V ATmega328
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;
}
}

Gerelateerde Artikelen

Maak een Web aangesloten Robot (voor ongeveer $500) (met behulp van een Arduino en Netbook)

Maak een Web aangesloten Robot (voor ongeveer $500) (met behulp van een Arduino en Netbook)

dit Instructable zal u tonen hoe te bouwen van uw eigen Web aangesloten Robot (met behulp van een Arduino micro-controller en de Asus eee pc).Waarom zou u een Web aangesloten Robot willen? Om mee te spelen natuurlijk. Rijd uw robot van hele kamer of
Elektromagnetisch veld Detector met behulp van een Arduino

Elektromagnetisch veld Detector met behulp van een Arduino

Ooit elektronisch apparaat straalt een bepaalde hoeveelheid elektromagnetische velden en we kunnen deze straling gebruiken om te leren een paar dingen over het circuit.In hedendaagse instructable ga ik u tonen hoe te bouwen van je eigen elektromagnet
RFIDuino - met behulp van een Arduino & RFID-lezer te maken van een puzzel GeoCache

RFIDuino - met behulp van een Arduino & RFID-lezer te maken van een puzzel GeoCache

ik geniet van zowel Geocaching en elektronica en heb een paar van elektronische puzzel caches met behulp van een Arduino.Mijn nieuwste creatie (met de hulp van een collega cacher voor de code) is met behulp van een Arduino en RFID lezer te maken van
Hoe maak je een enkele LED knipperen met behulp van een Arduino Uno Board

Hoe maak je een enkele LED knipperen met behulp van een Arduino Uno Board

Vandaag, we zullen worden ter illustratie van hoe maak je een enkele LED knipperen met behulp van een Arduino Uno-board. Door elke stap te volgen, zal je dit doel bereiken.U zal het volgende nodig:Een Arduino BoardBrood bordUSB-connectorkabelEEN LED3
LED licht met behulp van een Arduino

LED licht met behulp van een Arduino

Een Arduino is een open-source van de computerhardware, open-source software en microcontroller-gebaseerde kits voor het bouwen van digitale apparaten en interactieve objecten die kunnen voelen en aansturen van fysieke apparaten. Er zijn verschillend
Grondbeginselen van het omzetten van uw externe controle voertuig in een autonoom systeem (Drone) met behulp van een Arduino

Grondbeginselen van het omzetten van uw externe controle voertuig in een autonoom systeem (Drone) met behulp van een Arduino

ik begon dit project met als doel goedkoop draaien mijn RC helikopter in iets van een UAV of althans te passen sommige sensoren aan het verminderen van aanvaringen en andere "mis haps."Nu helaas aan het begin van het project misrekend ik mijn kl
Indringende en een PCB met behulp van een Arduino-Based CNC frezen

Indringende en een PCB met behulp van een Arduino-Based CNC frezen

Tot onlangs PCB sonderen met behulp van een Arduino was gebaseerde CNC machine maar een loutere droom. Dankzij de mensen van Chilipeppr.com we nu hebben gebaseerde een bankje van de web-gebaseerde tool voor al onze Arduino CNC producten. Het beste de
Met behulp van een Arduino en Python plot/opslaan gegevens

Met behulp van een Arduino en Python plot/opslaan gegevens

een snelle en gemakkelijke manier om te zien (en sla) gegevens genomen met behulp van een Arduino op uw computer.(Opmerking: niet de meest robuuste methode, maar het werkt goed genoeg)Materialen:-Arduino (im ' using een Uno)-Computer (ik heb een Dell
Met behulp van een Arduino te laden van een DS lite

Met behulp van een Arduino te laden van een DS lite

Dit instructable is voor het opladen van een ds lite met behulp van een Arduino en twee draden. Dit is ook mijn eerste instructable, zodat het wellicht niet zo goed als mogelijk. :)BERICHT: Ik ben niet verantwoordelijk voor eventuele schade aan je ds
Cowboyhoed houder voor vrachtwagen (met behulp van een tennisracket)

Cowboyhoed houder voor vrachtwagen (met behulp van een tennisracket)

We hebben allemaal een cowboyhoed en geen van ons weten wat te doen als we eenmaal in de truck. Het is klote. U gooi het op de stoel en iemand zit erop. U het plop op de hoofdsteun maar het valt op de vloer. De hat's altijd in de weg en altijd in lev
Puzzlebox baan: Een infrarood helikopter besturen met behulp van een Arduino

Puzzlebox baan: Een infrarood helikopter besturen met behulp van een Arduino

In dit Instructable zullen we uitleggen hoe de infrarood signalen worden gebruikt door een afstandsbediening om een speeltje of apparaat, dan laten zien hoe een eenvoudige schakeling kan worden toegevoegd aan een Arduino aan dezelfde bedienen via gra
Met behulp van een Arduino te beheersen of te testen een SPI elektronisch apparaat

Met behulp van een Arduino te beheersen of te testen een SPI elektronisch apparaat

er zijn veel elektronische apparaten die gebruikmaken van de SPI bus, of Serial Peripheral Interface bus, voor communicatie (bijvoorbeeld verschillende sensoren, LCD displays, digitale potentiometers, D/A en A/D converters, draadloze zenders en ontva
Ik hou van u teken met behulp van een Arduino

Ik hou van u teken met behulp van een Arduino

dit is een leuke project dat een decoratief doel fungeert. Mijn vrouw vond het geweldig toen ik gaf het aan haar voor Valentijnsdag. Haar woorden waren, "Als u niet had vertelde me dat je dit hebt gemaakt, ik zou hebben gedacht was uit de winkel!&quo
Met behulp van een Arduino Uno R3 als een spelbesturing

Met behulp van een Arduino Uno R3 als een spelbesturing

2016 UPDATE: Ik zal niet langer ondersteuning zorgen in het commentarensectie. Dit is een verouderde en achterhaalde methode, die heeft weinig reden om te worden weggezogen. Houden het alleen voor informatiedoeleinden.Natuurlijk, de Uno doet niet vad