Paso 10: Mejorar, texturizar, danza!
Ahora que el Arduino juega el que puede puede, es tiempo de terminar con delicadeza!
Para hacer las cosas más interesantes, la función playNote() en el código siguiente toca cada nota en 4 octavas, la secuencia a través de octavas rápidamente para dar una textura interesante al sonido. Además, se han añadido 4 modos para jugar el curso principal de Can Can en los patrones de octavas diferentes. Las posibilidades son casi ilimitadas. Pruébalo y disfruta!
---copia después de esta línea---
Función de ejemplo de timbre para el timbre de CEM-1203 (de Sparkfun parte #COM-07950).
por Rob Faludi
http://www.Faludi.com
Adiciones por Christopher Stevens
http://www.christopherstevens.cc
referencia de http://www.phy.mtu.edu/~suits/notefreqs.html
a partir de F noteFreqArr [1]
int noteFreqArr [] = {}
49.4 52.3, 55.4, 58.7, 62.2, 65.9, 69.9, 74, 78.4, 83.1, 88, 93.2,
98.8, 105, 111, 117, 124, 132, 140, 148, 157, 166, 176, 186,
198, 209, 222, 235, 249, 264, 279, 296, 314, 332, 352, 373,
395, 419, 444, 470, 498, 527, 559, 592, 627, 665, 704, 746,
790 837, 887, 940, 996, 1050, 1110, 1180, 1250, 1320, 1400, 1490,
1580, 1670, 1770, 1870, 1990, 2100};
modo largo = 0;
void setup() {}
pinMode (4, salida); configurar un pin de salida de zumbador
}
void playNote (noteInt largo, longitud, modo largo, largo aliento = 25) {}
longitud = longitud - respiración;
noteInt2 largo = noteInt + 12; 1 octava arriba
noteInt3 largo noteInt = 24; 2 octavas arriba
noteInt4 largo = noteInt + 36; 3 octavas hacia arriba
playLoop largo = longitud / 100; dividir la longitud por 4, para el uso en secuencia del juego
if(Mode == 0) {//mode 0 secuencia
para (largo i = 0; i < playLoop; i ++) {}
Buzz (4, noteFreqArr [noteInt], 20);
Delay(5);
Buzz (4, noteFreqArr [noteInt2], 20);
Delay(5);
Buzz (4, noteFreqArr [noteInt3], 20);
Delay(5);
Buzz (4, noteFreqArr [noteInt4], 20);
Delay(5);
}
} else if(mode == 1) {//mode 1 secuencia
para (largo i = 0; i < playLoop; i ++) {}
Buzz (4, noteFreqArr [noteInt3], 20);
Delay(5);
Buzz (4, noteFreqArr [noteInt4], 20);
Delay(5);
Buzz (4, noteFreqArr [noteInt3], 20);
Delay(5);
Buzz (4, noteFreqArr [noteInt4], 20);
Delay(5);
}
} else if(mode == 2) {//mode 2 secuencia
para (largo i = 0; i < playLoop; i ++) {}
Buzz (4, noteFreqArr [noteInt3], 20);
Delay(5);
Buzz (4, noteFreqArr [noteInt3], 20);
Delay(5);
Buzz (4, noteFreqArr [noteInt3], 20);
Delay(5);
Buzz (4, noteFreqArr [noteInt2], 20);
Delay(5);
}
} else if(mode == 3) {//mode 3 secuencia
para (largo i = 0; i < playLoop; i ++) {}
Buzz (4, noteFreqArr [noteInt4], 40);
Delay(5);
Buzz (4, noteFreqArr [noteInt2], 40);
Delay(5);
}
}
if(Breath > 0) {//take una breve pausa o 'aliento' si se especifica
Delay(Breath);
}
}
void loop() {}
plato principal
playNote (12, 500, modo);
playNote (5, 1000, modo);
playNote (7, 250, modo);
playNote (10, 250, modo);
playNote (9, 250, modo);
playNote (7, 250, modo);
playNote (12, 500, modo);
playNote (12, 500, modo);
playNote (12, 250, modo);
playNote (14, 250, modo);
playNote (9, 250, modo);
playNote (10, 250, modo);
playNote (7, 500, modo);
playNote (7, 500, modo);
playNote (7, 250, modo);
playNote (10, 250, modo);
playNote (9, 250, modo);
playNote (7, 250, modo);
playNote (5, 250, modo);
playNote (17, 250, modo);
playNote (16, 250, modo);
playNote (14, 250, modo);
playNote (12, 250, modo);
playNote (10, 250, modo);
playNote (9, 250, modo);
playNote (7, 250, modo);
playNote (5, 1000, modo);
playNote (7, 250, modo);
playNote (10, 250, modo);
playNote (9, 250, modo);
playNote (7, 250, modo);
playNote (12, 500, modo);
playNote (12, 500, modo);
playNote (12, 250, modo);
playNote (14, 250, modo);
playNote (9, 250, modo);
playNote (10, 250, modo);
playNote (7, 500, modo);
playNote (7, 500, modo);
playNote (7, 250, modo);
playNote (10, 250, modo);
playNote (9, 250, modo);
playNote (7, 250, modo);
playNote (5, 250, modo);
playNote (12, 250, modo);
playNote (7, 250, modo);
playNote (9, 250, modo);
playNote (5, 250, modo);
Delay(250);
if(Mode == 0) {}
modo = 1;
} else if(mode == 1) {}
modo = 2;
} else if(mode == 2) {}
Mode = 3;
} else if(mode == 3) {}
modo = 0;
}
}
{} void buzz (int targetPin, frecuencia largo, longitud)
delayValue largo = 1000000/frecuencia/2; calcular el valor de retardo entre las transiciones
1 segundo 's valor de microsegundos, divididos por la frecuencia, luego dividir por la mitad desde
Hay dos fases en cada ciclo
numCycles largo = frecuencia * longitud / 1000; calcular el número de ciclos de tiempo adecuado
multiplicar la frecuencia, que es realmente ciclos por segundo, por el número de segundos para
obtener el número total de ciclos para producir
para (largo i = 0; i < numCycles; i ++) {/ / de la longitud calculada del tiempo...
digitalWrite(targetPin,HIGH); escribo el pin del zumbador para empujar el diafragma
delayMicroseconds(delayValue); Espere a que el valor de retardo calculado
digitalWrite(targetPin,LOW); Escriba el pin de zumbador baja a tire hacia atrás del diafragma
delayMicroseconds(delayValue); againf de espera o el valor de retardo calculado
}
}
---copiar antes de esta línea---
Todo terminado! Ahora en el piso, escenario o mobiliario de elección y celebrar con danza!