Paso 1: Aprender más sobre MIDI y Arduino
Este instructable cubre enviar y recibir MIDI con un Arduino era un buen lugar para empezar a aprender sobre MIDI, pero sólo araña la superficie. Uno de los problemas que encontré fue cómo manejar los mensajes MIDI sistema en tiempo real que uno de mi MIDI teclados envía. MIDI-OX era útil para el seguimiento de los mensajes, salvo que no siempre estaba seguro acerca de los mensajes que muestra. Más tarde aprendí que enmascara "estado de funcionamiento", más abajo.
Así que escribí el código que utiliza Arduino para controlar la entrada de MIDI y escribe en el monitor serie. Tuve que usar un puerto de serie de software para MIDI desde el MIDI 31250 en baudios no es compatible con el monitor serie. De esta forma que cada puerto serie puede tener una velocidad en baudios diferente. El código siguiente pantallas cualquier comandos MIDI que no sean "Nota sobre" o "Nota de" sólo impresión los comandos y datos por debajo de 160, pero también es instructivo para construir a pantalla no cualquier comandos. Vea este Resumen de los mensajes MIDI de todos los valores posibles de MIDI.
#include <SoftwareSerial.h>
// receive on pin 7 and transmit on pin 8 SoftwareSerial softSer(7, 8);
int data = 0;
void setup() { Serial.begin(57600); softSer.begin(31250); }
void loop() { if (softSer.available()) { data = softSer.read(); // screen out commands other than note on or note off if (data < 160) { Serial.println(data, DEC); } } }
Otra pieza del rompecabezas que necesitaba era el concepto de "Estado de funcionamiento." Esto significa que puede omitirse un comando duplicado sucesivos, como "Nota," y se pueden enviar sólo los datos. Así, por ejemplo, al tocar un acorde de la 3 Nota, en lugar de enviar comandos "Nota sobre" 3 con 3 pares de velocidad--totales, 9 bytes y nota correspondiente en su lugar comando 1 "Nota sobre" es enviados y luego 3 pares de nota y velocidad--7 bytes. También, "Nota sobre" comandos con velocidad cero pueden ser utilizados en lugar de "note off". Esto significa que si solamente estás jugando las teclas y un teclado MIDI podría enviar sólo 1 "Nota sobre" mando y par después de par de bytes de nota y velocidad. Esto hace que para un tipo de comunicación más eficiente y reduce la latencia.
Mi camino final para mejorar la parte MIDI de mi dispositivo original de Arduino es construir el hardware de componentes en vez de usar un escudo Linksprite MIDI. La ventaja de hacer que esto es que puede ser agregado a un proto-board con otras funcionalidades como codificadores y un display y panel montaron puertos MIDI puede ser utilizada. Es un esquema del circuito que utiliza. Para referencia, aquí está la especificación eléctrica oficial. Tenga en cuenta que llama para un resistor conectado al MIDI out pin 5. He encontrado que la resistencia reduce el nivel de voltaje de los datos transmitidos suficientemente que el extremo receptor no pudo leer la it, así que omití la resistencia.