Paso 5: código
Aquí es donde la magia sucede. El código no es compleja pero muy larga con gran cantidad de repetición. Gran parte del código tiene áspero comentario describiendo la función de una sección de código.Un poco de los controles de IO en el código no está escrito en estándar Arduino código algo C de AVR. La razón es - velocidad.
Lo que parece ser una sola línea en el código de Arduino, por ejemplo digitalRead(), es realmente una biblioteca llamada por el compilador, que tomaría el procesador a 5 microsegundos a un comando de lectura de pin simplemente digital. Y eso es demasiado lento para un funcionamiento fiable donde la sincronización es esencial.
Por otro lado el bajo nivel código AVR C se traduce en sólo unas pocas líneas de ensamblador. Reloj de la misma acción en menos de tiempo de instrucción de 80ns. Menos tiempo a la espera de los datos de entrada da el procesador más tiempo el proceso de la onda acústica, un rendimiento mucho más fiable.
El código recorre cada microsegundo 45, que nos da 22.2kSPS. Una variable de tipo entero se asigna a cada nota de música, que incrementa cada ciclo hasta que esa nota ya no está registrada por las puertas de IR. El nivel de tensión correspondiente se tira de la tabla de la onda basada en su variable. Después de que ha sido a través de los cálculos de que los datos se pasan a través del bus SPI a la DAC para convertir.
He hecho algunas modificaciones al código recientemente para la gama de la octava en la que el sistema cubre. Ahora la mayoría sensor de la derecha IR PD14 banderas el desplazamiento hacia arriba de toda la hoja en una octava. Por ejemplo si usted quiere conseguir Nota C6 se marca la hoja en "C5" y "Up".