Paso 4: Escribir el código
Cuando se presiona un pedal, el mando para encender la nota a una cierta velocidad. El potenciómetro (pedal de volumen) se utiliza para determinar eso. Da valores de 0-1023. La función de mapa se utiliza para asignar proporcionalmente ese número a otro número entre 0-127. Para activar una nota apagado cuando no se presiona el pedal, se envía el mismo comando para esa nota, excepto que la velocidad es 0.
Tener los arduinos enviar que comando cuando un pedal se empuja mediante una instrucción "if" en el circuito funcionaría excepto que enviaría este comando cada vez que el bucle se repite cuando el pedal esté abajo. Si el "Else" se utiliza también para enviar el comando para detener la nota (velocidad 0), los arduinos enviaría este comando para cada pedal que no se presiona cada vez que el bucle se repite. No podían manejar los arduinos y sintetizador de enviar o recibir todo lo que los datos.
Para solucionarlo, los arduinos debe enviar el comando para jugar una nota una vez después de presiona el pedal. También debe hacer lo mismo para cuando se suelta el pedal. Para ello, los arduinos debe "recordar" el último estado (presionado o no presionado) los pedales estaban en el último tiempo repite el bucle.
Para agregar esta característica, he hecho una variable "último estado". Lo primero que los arduinos hacer después de detectar cuando un pedal ha sido presionado es comparar el último estado que estaban en el estado que están ahora. Esto hace posible para los arduinos para enviar el comando para una nota una vez cuando se ha presionado y cuando ha sido liberado.
Porque hay dos Arduinos, hay dos programas que se escriben. Es simplemente copiar la primera de ellas y pegar en un nuevo proyecto y cambiar todas las notas. Recuerde que un programa lo use en una nota más que otra!
Ambos Arduinos necesita enviar comandos en el canal de MIDI del mismo . Usé el canal MIDI 1.
Para obtener los arduinos para enviar datos MIDI en esta guía: http://arduino.cc/en/Tutorial/Midi. No enviar las notas o la velocidad en hexadecimal. Decimal funciona perfectamente porque la Serial.write(); comando lo envía como un byte.
Hay dos programas en el archivo zip; uno para un ATmega, otro para el otro.