Paso 6: Programe - código de Arduino
De diciembre de 2012
Código escrito para reasignación: www.remap.org.uk A caridad que produce equipos de medida para las personas con discapacidad.
Código diseñado para utilizar un Arduino para hacer un afinador de guitarra conveniente para el uso de los invidentes
El afinador de guitarra modificadodo fue un Cherub WST-550
Usar, copiar, modificar, mejorar el código todo que te gusta, no hay garantías aunque... Buena suerte / de divertirse...
Esto establece las propiedades de los tonos de retroalimentación.
#define NOTE_FLAT 93 / / el tono jugado cuando se detecta una nota plana: plano de G
#define NOTE_SHARP 887 / / el tono jugado cuando se detecta una fuerte Nota: D Sharp
#define NOTE_6E 105 / / el tono jugado cuando se detecta un 6E (pero el tono es realmente E4)
#define NOTE_5A 157 / / el tono jugado cuando se detecta una 5A (pero el tono es realmente A3)
#define NOTE_4D 235 / / el tono jugado cuando se detecta un 4D (pero el tono es realmente D3)
#define NOTE_3G 352 / / el tono jugado cuando se detecta un 3G (pero el tono es realmente G2)
#define NOTE_2B 559 / / el tono jugado cuando se detecta un 2B (pero el tono es realmente B1)
#define NOTE_1E 837 / / el tono jugado cuando se detecta un 1E (pero el tono es realmente E1)
#define NOTE_DURATION 300 / / todo el tiempo en milisegundos que la duración del tono jugada al inicio o al seleccionar una cadena de
#define NOTE_DELAY1 200 / / tiempo de regeneración entre pitidos
#define NOTE_DUR2 400 / / duración del tono jugado cuando una melodía en cadena se detecta
Pines de entrada para la lectura de la nota LED
p6E int = 7; PIN conectado al LED 6E
p5A int = 6; PIN conectado al LED 5A
int p4D = 5; PIN conectado al LED 4D
p3G int = 4; PIN conectado a 3G LED
p2B int = 3; PIN conectado al LED 2B
int p1E = 2; PIN conectado al LED 1E
Pines de entrada para la lectura de la melodía LEDs
int p40 = 11; PIN conectado a los diodos que se combinan los LEDs + 50 y + 40
int p30 = 12; Patilla conectada a los + 30 LED
int p20 = 13; Patilla conectada a los + 20 LED
int p10 = 14; (Pin analógico 0) perno conectado con el + 10 LED
int tune = 15; (Pin analógico 1) perno conectado 0 LED
n10 de int = 16; (Pin analógico 2) perno conectado a la -10 LED
int n20 = 18; (Pin analógico 4) perno conectado a la -20 LED
int n30 = 17; (Pin analógico 3) perno conectado a la -30 LED
int n40 = 19; (Pin analógico 5) perno conectado a los diodos que se combinan los LEDs-40 y -50
Otros pins
int altavoz = 10; Pin de salida que se conecta a los auriculares a través de una resistencia (valor más alto que todavía da una salida bastante fuerte).
int tecla = 9; Entrada de Pin que se conecta el botón de selección de cadena.
int plana = 8; ¿Entrada de Pin que detecta si el sintonizador está en modo de semitono?
Variables
int desplazamiento = 0; Lo desafinada la cuerda es, por ejemplo, si está encendido el LED -30 el valor de esta variable es -40.
Nota int = 0; Variable de registro que nota fue detectado 1E = 1, 2 = 2B, 3 = 3 G, 4 = 4 D, 5 = 5A, 6 = 6E.
int noteSelect = 0; Esto almacena qué cadena ha sido seleccionada si el modo de cadena específica es en uso 0 = off.
int lastOffset = 0; Desplazamiento anterior visto.
int lastNote = 0; Nota anterior visto.
void setup() {}
Serial.Begin(9600); Para la detección de fallos
Modos de juego pin
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);
Jugar algunos tonos en start up para hacer saber que el sintonizador está trabajando el usuario.
tono (spkr, NOTE_1E, NOTE_DURATION);
Delay(NOTE_DELAY1);
tono (spkr, NOTE_2B, NOTE_DURATION);
Delay(NOTE_DELAY1);
tono (spkr, NOTE_3G, NOTE_DURATION);
Delay(NOTE_DELAY1);
tono (spkr, NOTE_4D, NOTE_DURATION);
Delay(NOTE_DELAY1);
tono (spkr, NOTE_5A, NOTE_DURATION);
Delay(NOTE_DELAY1);
tono (spkr, NOTE_6E, NOTE_DURATION);
Delay(800);
Compruebe si el sintonizador está en modo de afinación de semitono. Si es así, juega algunos tonos más
if(digitalRead(Flat) == 0) {}
Serial.println ("semitono modo");
tono (spkr, NOTE_FLAT, 500);
Delay(800);
tono (spkr, NOTE_FLAT, 500);
Delay(800);
tono (spkr, NOTE_FLAT, 500);
Delay(800);
tono (spkr, NOTE_FLAT, 500);
Delay(800);
}
}
void loop() {}
lastOffset = offset;
lastNote = Nota;
ButtonV(); Compruebe si el botón está siendo presionado
NotesV(); Comprobar si las cadenas pueden escucharse
OffsetsV(); / / ver cómo fuera de tono las cuerdas son
Si (Nota! = 0) {/ / si se ha detectado una cadena
Si (noteSelect == 0 || noteSelect == Nota) {/ / comprobar si una cadena específica está siendo afinada
if(Note == lastNote) {/ / asegurarse de que la lectura se haya estabilizado durante un tiempo (es decir, dos repetición lecturas)
if(offset == lastOffset) {/ / comprobar la lectura se haya estabilizado
Output(); Dar retroalimentación de audio
}
}
}
}
Delay(200);
}
void Output() {/ / se ha detectado una nota así que tiempo para dar algunos comentarios
Delay(100);
Tono para indicar que nota
if(note == 1) {}
tono (spkr, NOTE_1E, NOTE_DUR2);
}
if(Note == 2) {}
tono (spkr, NOTE_2B, NOTE_DUR2);
}
if(note == 3) {}
tono (spkr, NOTE_3G, NOTE_DUR2);
}
if(Note == 4) {}
tono (spkr, NOTE_4D, NOTE_DUR2);
}
if(Note == 5) {}
tono (spkr, NOTE_5A, NOTE_DUR2);
}
if(Note == 6) {}
tono (spkr, NOTE_6E, NOTE_DUR2);
}
Delay(100);
Tono para dar retroalimentación en forma aguda o plana.
Si (offset > 1 || offset < 0) {}
offset = offset * 5;
Si (offset < 0) {}
offset = offset *-1;
tono (spkr, NOTE_FLAT, offset);
Delay(250);
tono (spkr, NOTE_FLAT, offset);
Delay(250);
tono (spkr, NOTE_FLAT, offset);
Delay(250);
}
Else {}
tono (spkr, NOTE_SHARP, offset);
Delay(250);
tono (spkr, NOTE_SHARP, offset);
Delay(250);
tono (spkr, NOTE_SHARP, offset);
Delay(250);
}
}
Else {/ / qué hacer si la cadena está en sintonía
if(note == 1) {}
tono (spkr, NOTE_1E, NOTE_DUR2);
}
if(Note == 2) {}
tono (spkr, NOTE_2B, NOTE_DUR2);
}
if(note == 3) {}
tono (spkr, NOTE_3G, NOTE_DUR2);
}
if(Note == 4) {}
tono (spkr, NOTE_4D, NOTE_DUR2);
}
if(Note == 5) {}
tono (spkr, NOTE_5A, NOTE_DUR2);
}
if(Note == 6) {}
tono (spkr, NOTE_6E, NOTE_DUR2);
}
Delay(400);
}
}
void ButtonV() {/ / comprobar si una cadena específica es ser seleccionada
if(digitalRead(Button) == 0) {/ / leer el botón
noteSelect ++; Nota de incremento seleccionado cada pulsación
if(noteSelect == 7) {/ / tonos para jugar si todas las notas han sido un ciclo a través de es decir, volver al modo normal
noteSelect = 0;
tono (spkr, NOTE_6E, NOTE_DURATION);
Delay(NOTE_DELAY1);
tono (spkr, NOTE_5A, NOTE_DURATION);
Delay(NOTE_DELAY1);
tono (spkr, NOTE_4D, NOTE_DURATION);
Delay(NOTE_DELAY1);
tono (spkr, NOTE_3G, NOTE_DURATION);
Delay(NOTE_DELAY1);
tono (spkr, NOTE_2B, NOTE_DURATION);
Delay(NOTE_DELAY1);
tono (spkr, NOTE_1E, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
if(noteSelect > 0) {/ / tonos para jugar como las notas son un ciclo a través de
tono (spkr, NOTE_1E, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
Si (noteSelect > 1) {}
tono (spkr, NOTE_2B, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
Si {} (noteSelect > 2)
tono (spkr, NOTE_3G, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
Si {} (noteSelect > 3)
tono (spkr, NOTE_4D, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
Si {} (noteSelect > 4)
tono (spkr, NOTE_5A, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
Si {} (noteSelect > 5)
tono (spkr, NOTE_6E, NOTE_DURATION);
Delay(NOTE_DELAY1);
}
}
}
void OffsetsV() {/ / lee la melodía LEDs y pone la lectura en la compensación variable
desplazamiento = 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 la nota LEDs y tiendas los resultados en la variable de la nota
Nota = 0;
if(digitalRead(p6E) == 0) {}
Serial.println("p6E");
Nota = 6;
}
if(digitalRead(p5A) == 0) {}
Serial.println("p5A");
Nota = 5;
}
if(digitalRead(p4D) == 0) {}
Serial.println("p4D");
Nota = 4;
}
if(digitalRead(p3G) == 0) {}
Serial.println("p3G");
Nota = 3;
}
if(digitalRead(p2B) == 0) {}
Serial.println("p2B");
Nota = 2;
}
if(digitalRead(p1E) == 0) {}
Serial.println("p1E");
Nota = 1;
}
}