Paso 8: Juego de notas musicales
Dado que la función buzz() en el bosquejo de ejemplo permite una frecuencia de paso a especificar, es hora de ver qué frecuencias hacen notas musicales y probar una escala musical.
Búsqueda Google [frecuencias de nota musical] reveló esta gran tabla que contiene las frecuencias de una amplia gama musical. Ayudó a responder a la pregunta, "¿cómo hacer el zumbador hacer tonos musicales?".
Un boceto para jugar una octava de notas podría tener este aspecto:
---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
void setup() {}
pinMode (4, salida); configurar un pin de salida de zumbador
}
void loop() {}
Buzz (4, 996, 1000); PIN, frecuencia de la nota, jugar duración en milisegundos
Buzz (4, 1050, 1000);
Buzz (4, 1110, 1000);
Buzz (4, 1180, 1000);
Buzz (4, 1250, 1000);
Buzz (4, 1320, 1000);
Buzz (4, 1400, 1000);
Buzz (4, 1490, 1000);
Buzz (4, 1580, 1000);
Buzz (4, 1670, 1000);
Buzz (4, 1770, 1000);
Buzz (4, 1870, 1000);
Delay(1000); esperar un poco entre zumbidos
}
{} 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---
Que funcionaría, pero buscando las frecuencias en una tabla cada vez que se crea una nota sería demasiado incómodo para algunos. El bosquejo a continuación agrega una matriz de frecuencias de referencia y una nueva función de playNote() que tiene una frecuencia de referencia en la matriz por número y llama a la función de zumbido con frecuencia.
Una nota sobre matrices, es que empiezan con 0, no 1. Así que el primer elemento de noteFreqArr a continuación se hace referencia a como noteFreqArr [0], el segundo sería noteFreqArr [1] y así sucesivamente.
---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
referencia de http://www.phy.mtu.edu/~suits/notefreqs.html
a partir de F noteFreqArr [0]
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};
void setup() {}
pinMode (4, salida); configurar un pin de salida de zumbador
}
void playNote (int noteInt, larga duración, de largo aliento = 0) {}
longitud = longitud - respiración;
Buzz (4, noteFreqArr [noteInt], longitud);
if(Breath > 0) {//take una breve pausa o 'aliento' si se especifica
Delay(Breath);
}
}
void loop() {}
playNote (52, 1000);
playNote (53, 1000);
playNote (54, 1000);
playNote (55, 1000, 100);
playNote (56, 1000);
playNote (57, 1000);
playNote (58, 1000);
playNote (59, 1000, 100);
playNote (60, 1000);
playNote (61, 1000);
playNote (62, 1000);
playNote (63, 1000, 100);
Delay(1000); esperar un poco entre zumbidos
}
{} 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---
¡ Genial! Ahora a hacer música en el siguiente paso...