Guitar Tuner para ciegos (utilizando un Arduino) (6 / 8 paso)

Paso 6: Programe - código de Arduino

/ / Escrito en Arduino 1.0.1, para Mini Pro 3.3v ATmega328
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;
}
}

Artículos Relacionados

Utilizando un Arduino y Python para parcela/guardar datos

Utilizando un Arduino y Python para parcela/guardar datos

una manera rápida y fácil de ver (y guarde) datos extraídos utilizando un Arduino a tu ordenador.(Nota: no es el método más sólido, pero funciona bastante bien)Materiales:-Arduino (estoy usando un Uno)-Ordenador (tengo un Dell, pero no importa si est
Utilizando un Arduino para cargar un DS lite

Utilizando un Arduino para cargar un DS lite

Este instructable es para una ds lite utilizando un Arduino y dos cables de carga. Este también es mi primer instructivo, así que no puede ser lo mejor posible. :)Aviso: no soy responsable por cualquier daño hecho a tu ds, por favor, trabajo con cuid
Detector de campo electromagnético utilizando un Arduino

Detector de campo electromagnético utilizando un Arduino

Dispositivo electrónico nunca emite una cierta cantidad de campos electromagnéticos y podemos utilizar esta radiación para aprender algunas cosas sobre el circuito.En la actualidad instructable voy a mostrar cómo construir tu propio medidor de campo
Añadir Bluetooth 4.0 para su proyecto de Arduino [Internet] - controlada por Smartphone

Añadir Bluetooth 4.0 para su proyecto de Arduino [Internet] - controlada por Smartphone

Somos Grupo de internet de entusiastas de las cosas que amo hacking juntos diferentes dispositivos. Compruebe hacia fuera nuestro actual proyecto en nuestro sitio web y echa un vistazo a esta guía en un formato diferente en nuestro blog.Paso 1: intro
Conceptos básicos de convertir su vehículo de control remoto en un sistema autónomo (abejón) utilizando un Arduino

Conceptos básicos de convertir su vehículo de control remoto en un sistema autónomo (abejón) utilizando un Arduino

comencé este proyecto con el objetivo de convertir barato mi RC helicóptero en algo de un UAV o al menos para algunos sensores para reducir las colisiones y otros "haps mal."Ahora por desgracia al principio del proyecto calcularon mal las capaci
MIT App Android usando el Bluetooth HC06 para conectar a un Arduino Uno

MIT App Android usando el Bluetooth HC06 para conectar a un Arduino Uno

Agradecimiento especial a estos recursos en línea para conseguirme empezó...Tutoriales de Nerd al azarForceTronics - youtubePaso 1: materiales:Dispositivo Bluetooth HC-06Teléfono Android---tengo un 8 de HTC, emuladores para iPhone están disponibles p
Cómo capturar codigos de control remoto utilizando un Arduino y un IRreceiver

Cómo capturar codigos de control remoto utilizando un Arduino y un IRreceiver

En este instructable mostraré cómo escribir un pequeño código para capturar los códigos de control remoto en valores hexadecimales y decimales.Esto lo haremos usando al serial monitor que está integrado en el IDE de Arduino.Esto le dará a conocer una
Guía de un newbie para configurar ESP8266 con Arduino Mega 2560 o Uno

Guía de un newbie para configurar ESP8266 con Arduino Mega 2560 o Uno

Por productos de código abierto para tener éxito o adopción en masa por los "fabricantes" / "DIY-ers" / "dev" / "etc"; una documentación actualizada y exacta o guía de inicio rápido tiene que ser proporcionado. Mens
Kit de bricolaje para Bluetooth Motion Sensor, Arduino, BluTule.

Kit de bricolaje para Bluetooth Motion Sensor, Arduino, BluTule.

Este es un instructivo cómo crear un sensor de movimiento que reacciona en el movimiento de humanos y de animales y se lo notificará en su smartphone. Es también una instrucción de cómo montar su kit de bricolaje de Blutule campaña de Kickstarter.Pas
Juego el francés puede poder utilizando un Arduino y un zumbador

Juego el francés puede poder utilizando un Arduino y un zumbador

Bonjour!Hacer que tu Arduino el francés puede poder mediante una señal acústica. No pinzas. No se dispara. Es tan directo que resulta tan escandaloso el puede puede implica.Este instructivo cubre información electrónica introductorio y se centra en e
Serial Servo Controller w/Arduino - Control hasta 12 Servos a la vez utilizando el Arduino y una conexión USB

Serial Servo Controller w/Arduino - Control hasta 12 Servos a la vez utilizando el Arduino y una conexión USB

voy a mostrarle cómo usar el Arduino para controlar hasta 12 servos a la vez con variación mínima.  Mediante una sencilla interfaz serial puede controlar la posición del servo hasta 12 canales.  Hasta 10 posiciones instantáneas se puede guardar y rep
Utilizando un Arduino dibujo Robot con horas de tutoriales de código

Utilizando un Arduino dibujo Robot con horas de tutoriales de código

He creado un Arduino robot para un taller de dibujo para ayudar a las adolescentes que se interese en temas de tallo (ver). El robot fue diseñado para utilizar comandos programación tortuga-estilo como forward(distance) y turn(angle) para crear inter
Adaptador para batería de Arduino taladro

Adaptador para batería de Arduino taladro

Este Instructable sirve un par de funciones. Primera y más sirve como una guía aproximada de una batería de litio Dewalt 12 voltios y para convertir con un Arduino y un punto de entrada en el concurso del láser de amplio espectro. En esta compilación
Fuente de alimentación para alimentación de arduino y protoboard

Fuente de alimentación para alimentación de arduino y protoboard

cómo puede tomar una computadora u hv viejo (fuente de alimentación) y convertirlo en una fuente de alimentación que potencia su Arduino y darle todo el amperaje que necesita, así como su estándar 3.3 voltios, 5 voltios y 12 voltios de cualquier acce