Guitar Tuner för blinda (med en Arduino) (6 / 8 steg)

Steg 6: Programpunkt - Arduino kod



/ / Skrivet i Arduino 1.0.1, för Pro Mini 3.3V ATmega328
December 2012
Kod skriven för MAPPA: www.remap.org.uk A välgörenhet som producerar skräddarsydd utrustning för funktionshindrade personer.
Kod för att använda en Arduino för att skapa en gitarr tuner lämpar sig för användning med blinda
Gitarr tuner modifierad var en kerub WST-550
Använda, kopiera, ändra, förbättra koden alla du gillar, inga garantier men... Bra lycka till / ha kul...

Detta anger egenskaperna för den feedback tonen.
#define NOTE_FLAT 93 / / tonen spelade när en platt Obs upptäcks: G platta
#define NOTE_SHARP 887 / / tonen spelade när en skarp Obs upptäcks: D skarp
#define NOTE_6E 105 / / tonen spelade när en 6E upptäcks (men tonen är faktiskt E4)
#define NOTE_5A 157 / / tonen spelade när en 5A upptäcks (men tonen är faktiskt A3)
#define NOTE_4D 235 / / tonen spelade när en 4D upptäcks (men tonen är faktiskt D3)
#define NOTE_3G 352 / / tonen spelade när en 3G upptäcks (men tonen är faktiskt G2)
#define NOTE_2B 559 / / tonen spelade när en 2B upptäcks (men tonen är faktiskt B1)
#define NOTE_1E 837 / / tonen spelade när en 1E upptäcks (men tonen är faktiskt E1)
#define NOTE_DURATION 300 / / hela tiden i millisekunder hur länge tonen spelas vid start eller när du väljer en sträng
#define NOTE_DELAY1 200 / / tid där emellan feedback Piper
#define NOTE_DUR2 400 / / hur länge tonen spelade när en i tune sträng upptäcks

Mata in stift för läsning från noten lysdioder
int p6E = 7. PIN ansluten till 6E LED
int p5A = 6; PIN ansluten till 5A LED
int p4D = 5; PIN ansluten till 4D LED
int p3G = 4; PIN ansluten till 3G LED
int p2B = 3; PIN ansluten till 2B LED
int p1E = 2; PIN ansluten till 1E LED

Mata in stift för läsning från tune lysdioder
int p40 = 11; PIN ansluten till dioderna som kombinerar + 50 och + 40 lampor
int p30 = 12. PIN ansluten till de + 30 LED
int p20 = 13. PIN ansluten till de + 20 LED
int p10 = 14. (Analog stift 0) Pin ansluten till de + 10 LED
int tune = 15. (Analog pinne 1) Pin ansluten till 0 LED
int n10 = 16. (Analog pin 2) Pin ansluten till de -10 LED
int n20 = 18; (Analog pinne 4) Pin ansluten till de -20 LED
int n30 = 17; (Analog pin 3) Pin ansluten till de -30 LED
int n40 = 19. (Analoga pin 5) Pin ansluten till dioderna som kombinerar-40 och -50 lysdioder

Andra stift
int spkr = 10; Utgångsstiftet som ansluter till hörlurarna via ett motstånd (högsta värde som fortfarande ger ett högt nog utgång).
int knappen = 9. Ingångsstift som ansluter till knappen Välj sträng.
int platt = 8. Mata in Pin som känner av om tunern är i halvton läge?

Variabler
int offset = 0; Hur långt ostämd strängen är, till exempel om -30 lyser denna variabelns värde kommer att -40.
int Obs = 0; Variabel till posten som Obs var upptäckt 1 = 1E, 2 = 2B, 3 = 3 G, 4 = 4 D, 5 = 5A, 6 = 6E.
int noteSelect = 0; Här lagras som sträng har valts om den sträng som läget är i använda 0 = off.
int lastOffset = 0; Tidigare förskjutningen sett.
int lastNote = 0; Föregående not sett.

void setup() {

Serial.BEGIN(9600); För felsökning

Ställ in pinkodsskydd lägen
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);

Spela några toner på start upp till användaren veta tuner fungerar.
tonen (spkr, NOTE_1E, NOTE_DURATION);
Delay(NOTE_DELAY1);
tonen (spkr, NOTE_2B, NOTE_DURATION);
Delay(NOTE_DELAY1);
tonen (spkr, NOTE_3G, NOTE_DURATION);
Delay(NOTE_DELAY1);
tonen (spkr, NOTE_4D, NOTE_DURATION);
Delay(NOTE_DELAY1);
tonen (spkr, NOTE_5A, NOTE_DURATION);
Delay(NOTE_DELAY1);
tonen (spkr, NOTE_6E, NOTE_DURATION);
Delay(800);

Kontrollera om tunern är i halvton tuning mode. Om det är, spela några fler toner
IF(digitalRead(flat) == 0) {
Serial.println ("halvton läget är på");
tonen (spkr, NOTE_FLAT, 500);
Delay(800);
tonen (spkr, NOTE_FLAT, 500);
Delay(800);
tonen (spkr, NOTE_FLAT, 500);
Delay(800);
tonen (spkr, NOTE_FLAT, 500);
Delay(800);
}

}

void loop() {
lastOffset = offset;
lastNote = Obs;
ButtonV(); Kontrollera om knappen trycks.
NotesV(); Kontrollera om alla strängar kan höras
OffsetsV(); / / se hur ut av tune strängarna är
om (Obs! = 0) {/ / om en sträng har upptäckts
om (noteSelect == 0 || noteSelect == Obs) {/ / kolla om en sträng är trimmad
IF(Note == lastNote) {/ / kontrollera att läsningen har stabiliserats ett tag (dvs. två upprepa läsningar)
IF(offset == lastOffset) {/ / kontrollera behandlingen har stabiliserats
Output(); Ge ljud-feedback
}
}

}
}

Delay(200);

}

void Output() {/ / en anteckning har upptäckts så tid för att ge lite feedback
Delay(100);

Ton för att visa vilka Obs
IF(Note == 1) {
tonen (spkr, NOTE_1E, NOTE_DUR2);
}
IF(Note == 2) {
tonen (spkr, NOTE_2B, NOTE_DUR2);
}
IF(Note == 3) {
tonen (spkr, NOTE_3G, NOTE_DUR2);
}
IF(Note == 4) {
tonen (spkr, NOTE_4D, NOTE_DUR2);
}
IF(Note == 5) {
tonen (spkr, NOTE_5A, NOTE_DUR2);
}
IF(Note == 6) {
tonen (spkr, NOTE_6E, NOTE_DUR2);
}
Delay(100);

Ton för att ge feedback på hur kraftiga eller platta.
om (offset > 1 || förskjutningen < 0) {
offset = offset * 5.
om (offset < 0) {
offset = offset *-1;
tonen (spkr, NOTE_FLAT, offset);
Delay(250);
tonen (spkr, NOTE_FLAT, offset);
Delay(250);
tonen (spkr, NOTE_FLAT, offset);
Delay(250);
}
annat {
tonen (spkr, NOTE_SHARP, offset);
Delay(250);
tonen (spkr, NOTE_SHARP, offset);
Delay(250);
tonen (spkr, NOTE_SHARP, offset);
Delay(250);
}
}
annat {/ / vad man spelar om strängen finns i finjustera
IF(Note == 1) {
tonen (spkr, NOTE_1E, NOTE_DUR2);
}
IF(Note == 2) {
tonen (spkr, NOTE_2B, NOTE_DUR2);
}
IF(Note == 3) {
tonen (spkr, NOTE_3G, NOTE_DUR2);
}
IF(Note == 4) {
tonen (spkr, NOTE_4D, NOTE_DUR2);
}
IF(Note == 5) {
tonen (spkr, NOTE_5A, NOTE_DUR2);
}
IF(Note == 6) {
tonen (spkr, NOTE_6E, NOTE_DUR2);
}
Delay(400);
}

}

void ButtonV() {/ / kolla om en sträng som väljs.
IF(digitalRead(Button) == 0) {/ / Läs knappen
noteSelect ++; Increment Obs valt tryck på varje knapp

IF(noteSelect == 7) {/ / toner att spela om alla anteckningar har cyklat igenom dvs tillbaka till normalläge
noteSelect = 0;
tonen (spkr, NOTE_6E, NOTE_DURATION);
Delay(NOTE_DELAY1);
tonen (spkr, NOTE_5A, NOTE_DURATION);
Delay(NOTE_DELAY1);
tonen (spkr, NOTE_4D, NOTE_DURATION);
Delay(NOTE_DELAY1);
tonen (spkr, NOTE_3G, NOTE_DURATION);
Delay(NOTE_DELAY1);
tonen (spkr, NOTE_2B, NOTE_DURATION);
Delay(NOTE_DELAY1);
tonen (spkr, NOTE_1E, NOTE_DURATION);
Delay(NOTE_DELAY1);
}

IF(noteSelect > 0) {/ / toner leka som noterna är cyklade genom
tonen (spkr, NOTE_1E, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
om (noteSelect > 1) {
tonen (spkr, NOTE_2B, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
om (noteSelect > 2) {
tonen (spkr, NOTE_3G, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
om (noteSelect > 3) {
tonen (spkr, NOTE_4D, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
om (noteSelect > 4) {
tonen (spkr, NOTE_5A, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
om (noteSelect > 5) {
tonen (spkr, NOTE_6E, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
}
}

void OffsetsV() {/ / läser i storleksordningen lysdioder och sätter behandlingen i den variabla offseten
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;
}
}

void NotesV() {//Reads Obs lysdioder och butiker resultaten i variabeln Obs
Obs = 0;
IF(digitalRead(p6E) == 0) {
Serial.println("p6E");
Obs = 6;
}
IF(digitalRead(p5A) == 0) {
Serial.println("p5A");
Obs = 5;
}
IF(digitalRead(p4D) == 0) {
Serial.println("p4D");
Obs = 4;
}
IF(digitalRead(p3G) == 0) {
Serial.println("p3G");
Obs = 3;
}
IF(digitalRead(p2B) == 0) {
Serial.println("p2B");
Obs = 2;
}
IF(digitalRead(p1E) == 0) {
Serial.println("p1E");
Obs = 1;
}
}

Se Steg
Relaterade Ämnen

RGB LED Tutorial (med en Arduino) (RGBL)

Lysdioder är bra. Men med alla projekt man kommer till en punkt där blinkande inte räcker. För dessa fall RGB (röd, grön, blå) är LED svaret.Med en RGB LED du kommer att kunna producera någon färg lyser ditt hjärta önskar.På första använder en RGB LE...

Fixa min garageport med en Arduino UNO

Se min github:https://github.com/glscantlen/instructions/Tree/ma...Den här mappen innehåller instruktioner framkallade från anteckningar under reparation av mitt garage dörröppnare. Jag har ett Geni 1/2HP skruv-enhet garage dörröppnare som misslyckat...

ARD-e: roboten med en Arduino som en hjärna

hur man skapar en öppen källkod Arduino kontrollerade robot för under $100.Förhoppningsvis efter att ha läst detta instructable du kommer att kunna ta det första steget in i robotteknik. ARD-e kostar ca $90 till 130 USD beroende på hur mycket extra e...

Styra EL Wire med en Arduino

i detta instructable jag visar dig hur man styr EL Wire med en Arduino.Vad du behöver:EL Wire och Inverter - jag rekommenderar http://ez-el.com/ez-el-wire/10ft-ez-el-wire-3v-inverter-kit/Arduino eller valfri micro controller som kan styra ett reläSPD...

Enkel Remote Data plottning med Android / Arduino / pfodApp

enkel Remote Data plottning med Android / Arduino / pfodApp Detta Instructable visar hur du rita Arduino sensordata på din Android mobil och fånga den för att senare ladda ner till din dator. Dessa instruktioner är också tillgänglig på www.pfod.com.a...

Styra en kamera med en Arduino och RS232 sköld

Denna handledning visar dig hur du kan styra många olika aspekter av en kameror drift med en Arduino. Dessa operation kan vara pan och tilt kamera, zoom och fokus lins, och RGB egenskaper. Arduinoen kommer att utnyttja en RS232 sköld och skicka hexad...

Spåra din bil med en Arduino-baserad Lojack

Bilstölder är en verklig dra! Öka dina chanser att få tillbaka din bil genom att installera denna enkla Arduino-baserad tracker i bilen.Detta projekt är ganska enkel, och skulle vara ett bra projekt för nya Arduino programmerare letar efter något lit...

Kontrollera en relay board med en Arduino Uno

I detta instructable kommer vi kontrollera en Velleman K6714 relay board med en Arduino. Fina med att använda reläer är som vi kan använda en blygsam liten Arduino för att byta hushållsapparater eller vad du kan ha. Velleman K6714 har funnits i mer ä...

Hyduino - automatiserad Hydroponics med en Arduino

Så, kanske du undrar... Vad är HYDROPONICS?I grund och botten växer hydroponics växter utan användning av traditionella smuts medium med hjälp av ett näringsämne rika vatten-lösning. Dessa medier används för att "plantera" i allt från glasfiber...

Motion Tracker med PIRs, Arduino och en Servo

detta är min motion tracking huvudet med fyra PIRs (passiva infraröda sensorer), en Arduino Uno styrelse och en servo.Det är ett enkelt sätt att ge intryck av att huvudet (birdy) faktiskt följer rörelsen.Det är mycket lätt att bygga men lite tidskräv...

Låg höjd miljöövervakning med en Arduino baserade väder Instrument och Aeropod Remote Sensing plattform

ProjektöversiktStudenter på New Lothrop High School i Michigan har arbetat tillsammans för att bygga en plattform för remote sensing låg höjd som kallas en "Aeropod" och rummen har det med ett "Arduino" baserade väder instrument att sa...

Skicka sensordata (DHT11 & BMP180) till ThingSpeak med en Arduino, använder ENC28J60 Ethercard

Obs: Detta instructable är för gamla ENC26J60 Ethershield och ethercard. Om du har den moderna WIZ5100 baserade Ethernetshield eller en ESP8266 gå besöka min andra instructable som jag nämner nedanOm ett och ett halvt år sedan jag publicerade baserat...

Kontrollera en stegmotor med en Arduino

Denna tutorial ska show dig hur du använder en stegmotor som bärgades från en gammal skrivare med en Arduino.Steg 1: Vad är en Stepper Motor? En stegmotor består av två huvuddelar, en rotor och en stator. Rotorn är del av motorn som faktiskt snurrar...

RFIDuino - med en Arduino & RFID-läsare för att göra ett pussel GeoCache

jag njuta av både Geocaching och elektronik och har gjort ett par elektroniska pussel cachar med en Arduino.Min senaste skapelse (med hjälp av en kollega cacher för koden) är att använda en Arduino och RFID-läsare för att göra ett pussel geocache vi...

Styra en Schlage elektroniska deadbolt med en arduino!

Detta instructable kommer att gå igenom processen för nedmontering och hacka en Schlage elektroniska deadbolt för att styra med en arduino.Steg 1: Köpa låset och packa upp den jag fick min till försäljning för $99 på Lowe's.Ta det ur kartongen och ta...

Göra en bärbara streckkodsläsare med en arduino och en cuecat

runt om vänden av århundradet, det var ett företag vars affärsmodell ingår ger bort gratis streckkodsläsare som emulerar tangentbord. En relativt enkel mod till dessa cuecat skannrar bort krypteringen och gjorde dem lämpliga för skanning av streckkod...

Hur man mäter temperaturen mycket noggrant med en Arduino och en TSYS01 temperatur Sensor styrelse.

Medan de studerar på universitetet var vi ifrågasätts som en del av en kurs arbete på att designa en låda med mycket exakt temperaturkontroll. Om projektet lyckas, skulle flera boxar byggas och används i ett forskningsprojekt som studerar effekten av...

Komma igång med en Arduino (steg för steg Guide om hur du installerar programvara för Arduino IDE)

Hej killar, i denna tutorial jag antar att du äger en Arduino UNO. Jag kommer att visa dig hur du ansluter din Arduino ombord till datorn och testa det med en enkel skiss.Steg 1: 1) få dina leveranser redo:Så behöver vad du att komma igångArduino omb...

Hur man använder något relä med din arduino det säkra sättet

Detta instructable visar dig hur du använder något relä nya eller används med din ARDUINO ett säkert och korrekt sätt, om du köper en preasymbled relay board för din arduino med alla komponenter på det det inte är den läraren som du söker efter. Dett...