Paso 16: Arduino MIDI en
Por último, puede enviar MIDI en el Arduino y utilizarlo para controlar cosas conectadas a salidas de Arduino. Aquí es un kit de batería robótica, hecho por mi compañero de trabajo, randofo.
También un héroe de guitarra hackeado que dispara llamas:
Aquí está un ejemplo simple de cómo se puede analizar un MIDI entrante mensaje con Arduino y utilizar la información para controlar la birghtness de un LED. En mi ejemplo, lo enciendo un LED cuando se dispara la nota 60 (c media), y a escala del brillo de lo LED según la velocidad de la nota entrante:
Hay unos nuevos comandos aquí:
Serial.Available() devuelve el número de bytes disponibles para leer del puerto serie de Arduino.
Serial.Read() es lo contrario de Serial.print(), devuelve el siguiente byte disponible de datos de puerto serie de Arduino.
En este código, el Arduino lee el primer byte disponible y comprueba si es un byte de comando (recuerda, bytes de comando son siempre > 127)
Si (incomingByte > 127)
Entonces, puesto que sólo estamos buscando nota en comandos, Arduino, comprueba si el comando es un comando de nota en:
Si (incomingByte == noteOn)
Entonces el Arduino lee en los siguientes dos bytes y los almacena como noteByte y velocityByte:
byte noteByte = Serial.read();
byte velocityByte = Serial.read();
Entonces el Arduino se comprueba si la nota que tenemos es la nota que nos interesa, y si la velocidad es mayor que 0 (Nota sobre o note off). Si es en la nota, el Arduino utiliza map() para escalar de la velocidad (0-127) a una intensidad entre 0 y 255 y envía este brillo a analogWrite(). Si es un mensaje de nota Off, Arduino apaga el LED.
Astuto lo que he añadido a este código es el delay(10) en el loop(). Encontré que el Arduino era capaz de leer en los mensajes de MIDI más confiablemente con este retraso en allí. También podría ensuciar con la velocidad en baudios para asegurarse de que nunca se pierda un mensaje MIDI.