Paso 6: Tiempo para ejecutarlo!!!
Video
http://youtu.be/lV9WurONtV0
Como Resumen
El programa contará con 3 partes principales:
-La primera parte consta de declaración de variables, constantes y las importaciones de otros archivos. Importa el archivo "pitches.h", allí se encuentra la constante de las notas con sus frecuencias. Usted puede descargar de la página de arduino: http://arduino.cc/en/Tutorial/Tone3
-La segunda parte es el setup() que básicamente es la inicialización del programa. Aquí vamos a definir los pines de entrada/salida y otras cosas. La parte de configuración sólo se ejecutará una vez, al principio del programa.
-La tercera parte is el loop(). Esto será siempre hasta que usted apague el arduino. Allí usted encontrará el código del programa principal que juega la canción y luz para arriba el led con diferentes colores. También perciben el valor del potenciómetro para definir la velocidad (tempo) que va a jugar.
Todo el código completo:
/ * Melodía
Juega una melodía
circuito:
* 8 ohmios Altavoz en el pin digital 8
Base en el ejemplo de http://arduino.cc/en/Tutorial/Tone por Tom Igoe
Modificado por: Irene Meiying Cheung Ruiz
*/
#include "pitches.h"
#define SONG1_SIZE 24
#define SONG2_SIZE 14
Notas de la melodía 1:
int melody1 [] = {}
NOTE_D3, NOTE_B3, NOTE_A3, NOTE_G3, NOTE_D3,
NOTE_D3, NOTE_D3, NOTE_D3, NOTE_B3, NOTE_A3, NOTE_G3, NOTE_E3, 0,
NOTE_E3, NOTE_C4, NOTE_B3, NOTE_A3, NOTE_FS3, 0,
NOTE_D4, NOTE_D4, NOTE_C4, NOTE_A3, NOTE_B3
};
Notas de la melodía 2:
int melody2 [] = {}
NOTE_F4, NOTE_E4, NOTE_D4, NOTE_C3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_F3,
NOTE_C4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_F4
};
Tenga en cuenta las duraciones de melodía 1:4 = cuarto nota, 8 = corchea, etc..:
int noteDurations1 [] = {}
4, 4, 4, 4, 2.5,
8, 8, 4, 4, 4, 4, 2.5, 2,
4, 4, 4, 4, 2.5, 2,
4, 4, 4, 4, 1};
Tenga en cuenta las duraciones de la melodía 2:4 = cuarto nota, 8 = corchea, etc..:
int noteDurations2 [] = {}
2, 2.5, 8, 1.5, 4, 2, 2, 1.5,
4, 1.8, 4, 1.8, 4, 1};
Pernos de
int redPin = 11;
int greenPin = 10;
bluePin int = 9;
int tecla = 2;
variables de control
int contador = 0;
presiona int = 0;
playsong boolean = false;
variables temp //Song
int songSizeS;
int * noteDurationS = 0;
int * melodyS = 0;
variables de control de velocidad
int sensorValue = 0;
tempo de flotador = 0;
inicialización de
void setup() {
pines de configuración
pinMode (redPin, salida);
pinMode (greenPin, salida);
pinMode (bluePin, salida);
pinMode (botón, entrada);
luz hasta verde al principio
mapColor(-1);
propósitos de depuración
Serial.Begin (9600); opcional
}
principal del programa
void loop() {
detectar cuando se presiona el botón
if(digitalRead(button) == LOW)
{
presiona = 1;
}
detectar cuando el botón es liberado
if(digitalRead(button) == alto & & presionado == 1)
{
contador ++;
presiona = 0;
playsong = true; variable para el control de cuándo iniciar la canción
decidir que canción
si (contador % 2 == 0)
{
songSizeS = SONG1_SIZE;
noteDurationS = noteDurations1;
melodyS = melody1;
}
otra cosa
{
songSizeS = SONG2_SIZE;
noteDurationS = noteDurations2;
melodyS = melody2;
}
}
comienzo la canción si se presiona el botón:
if(playsong)
{
playsong = false;
/ / iterar sobre las notas de la melodía
para (int thisNote = 0; thisNote < songSizeS; thisNote ++)
{
//sensor valor de potenciómetro asignado al rango de valores de velocidad de 1-3
sensorValue = analogRead(A0);
Tempo = sensorValue * (3.0 / 1023.0); Serial.println(tempo);
para calcular la duración de la nota, tomar un segundo
dividido por el tipo de nota.
por ejemplo, trimestre Nota = 1000 / 4, corchea = 1000/8, etc. int noteDuration = 1000/noteDurationS [thisNote];
tono (8, melodyS[thisNote],noteDuration);
encenderá el led rgb dependiendo de la nota
mapColor (melodyS [thisNote]);
para distinguir las notas, establecer un tiempo mínimo entre ellos.
duración de la nota * tempo
int pauseBetweenNotes = noteDuration * tempo;
Delay(pauseBetweenNotes);
detener la reproducción de tono:
noTone(8);
la luz del estado del led para inicial (color verde)
mapColor(-1);
}
}
}
función que se asigna la nota a un determinado color
combina el color de RGB a producir diferentes
void mapColor (int Nota)
{
Switch(Note)
{
caso NOTE_C3:
caso NOTE_C4:
analogWrite (redPin, 0);
analogWrite (greenPin, 255);
analogWrite (bluePin, 255);
rotura;
caso NOTE_D3:
caso NOTE_D4:
analogWrite (redPin, 0);
analogWrite (greenPin, 0);
analogWrite (bluePin, 255);
rotura;
caso NOTE_E3:
caso NOTE_E4:
analogWrite (redPin, 255);
analogWrite (greenPin, 0);
analogWrite (bluePin, 0);
rotura;
caso NOTE_F3:
caso NOTE_F4:
analogWrite (redPin, 0);
analogWrite (greenPin, 255);
analogWrite (bluePin, 0);
rotura;
caso NOTE_G3:
caso NOTE_G4:
analogWrite (redPin, 255);
analogWrite (greenPin, 0);
analogWrite (bluePin, 255);
rotura;
caso NOTE_A3:
caso NOTE_A4:
analogWrite (redPin, 255);
analogWrite (greenPin, 255);
analogWrite (bluePin, 0);
rotura;
caso NOTE_B3:
caso NOTE_B4:
analogWrite (redPin, 0);
analogWrite (greenPin, 0);
analogWrite (bluePin, 0);
rotura;
caso 0: / / representa el estado final o el silencio
analogWrite (redPin, 255);
analogWrite (greenPin, 255);
analogWrite (bluePin, 255);
rotura;
-1 del caso:/ representa el estado inicial
analogWrite (redPin, 255);
analogWrite (greenPin, 0);
analogWrite (bluePin, 255);
rotura;
por defecto:notas de //other
analogWrite (redPin, 105);
analogWrite (greenPin, 255);
analogWrite (bluePin, 100);
rotura;
}
}