Paso 5: El código
Aquí está el código de Arduino. Notas acerca de están por debajo.
Biblioteca de segmento siete:
Como se indica anteriormente escribí una biblioteca de siete segmentos con rápida escritura a los pines digitales. Debe ser rápido, o bien disminuye el MIDI procesamiento abajo perceptiblemente.
Biblioteca de MIDI microtonal:
También escribí una biblioteca MIDI microtonal que controla la entrada de los eventos de nota MIDI y la salida de eventos de nota microtonal de n-TTE. Para mantener el código rápido, esta biblioteca filtra, es decir, hace nada con comandos MIDI o datos que no están relacionados con eventos de nota.
El código utiliza los 16 canales MIDI sucesivamente y cíclicamente para enviar pitchbend y notas. Esto es porque el pitchbend afecta un canal entero, y cada nota microtonal requiere a menudo un valor diferente de pitchbend. Se puede ajustar para utilizar menos canales, pero el número de canales sería el número de notas disponibles de la polifonía.
Implementé un modo monofónico que retriggers la nota anterior cuando sea necesario. Cuando se trata de escalas microtonales con más de 12 notas, en algunos casos la misma nota de MIDI se utiliza para adyacentes microtonales notas con valores diferentes de pitchbend. Si se realizan dos notas y uno liberado, cuando una nota de comando es enviado para una de las notas microtonales en un sintetizador monofónico a continuación ambas notas se dan vuelta apagado. Cuando está activado el modo monophonic el código retriggers el restante Nota microtonal y pitchbend valor, que es lo que esperas cuando se reproduce un monosynth. El iluminado botón alterna entre retrigger siendo en para un monosynth y apagado para un sintetizador polifónico.
También implementé Pythagorean tuning en el código, asignado a los "00" pasos por octava creación, pero está comentada porque requiere si declaraciones causaron latencia perceptible. Quizás hay más optimización para hacer, o tal vez un microcontrolador más rápido como en un Teensy permitiría que mi código funcione bien. O tal vez seguir con 53-TET para una buena suficiente aproximación de la entonación justo 5-límite. :)
Código principal:
El código principal incluye interrupción para el codificador rotativo y botón. Encontré esta página y esta página útil para escribir el código de interrupción.
El ISR encarga de codificador rotatorio y funcionalidad de la tecla iluminada. Cuando se gira un codificador, el movimiento se asigna a un cambio en los pasos por octava o nota MIDI, y esos valores se actualizan para el display de siete segmentos. Cuando se presiona el botón, modo monofónico se enciende o apaga y el LED interno se activa o desactiva para que coincida con.
El bucle principal consiste en esencialmente una llamada a manejar un byte de datos MIDI entrantes y luego un solo destello de los LEDs correspondientes en el display de siete segmentos.