Paso 5: Reproducción de música
La respuesta fue la excelente biblioteca de Playtune. (https://code.google.com/p/arduino-playtune/) En el ATMEGA328p utilizado en el proyecto, es capaz de tres voces simultáneas. Los sonidos se generan utilizando los temporizadores de hardware (con prescaler apropiado y separadores) y son squarewaves sin ninguna envoltura. Lo bueno de este método es una vez tienes el temporizador configurado, simplemente se ejecuta y su código es libre de hacer lo que sea necesario hasta el próximo evento de nota.
Escribir notas manualmente sería tedioso, por lo que la herramienta MIDITONES para convertir un .mid en código. tiene útiles opciones para limitar las notas simultáneas desde el archivo de origen que hacen lo mejor de las voces disponibles.
Como se implementó, sólo uso dos de los tres canales posibles. Eso es porque quería mantener el timer0 para 'millis()' tiempo y otras funciones. Resulta que, playtune.cpp incluye una función de temporización de sustituto que hubiera permitido una tercera voz. Bueno, algo a tener en cuenta.
Sonidos de las salidas del contador de tiempo se envían a través de resistencias de 500 ohmios y luego directamente a un disco piezoeléctrico grande. La combinación de controlador, orificio y cavidad caso ayudar a reforzar el sonido. Es sin duda lo suficientemente alta como para despertarlo de una mesita de noche o incluso a través de la habitación.