Stap 1: Leren van meer over MIDI en Arduino
Dit instructable daarmee verzenden en ontvangen op MIDI met een Arduino is een goede plaats om te beginnen leren over MIDI, maar het krassen alleen het oppervlak. Een van de problemen die ik tegenkwam was hoe de MIDI systeem Real-Time berichten dat één van mijn MIDI keyboard stuurt worden verwerkt. MIDI-OX was nuttig voor het toezicht op de berichten, behalve dat ik niet altijd zeker was over de berichtgeving blijkt. Later leerde ik dat het "lopende status"--meer maskers hieronder.
Dus schreef ik code die maakt gebruik van de Arduino te controleren van de MIDI-input en schrijft het naar de seriële monitor. Ik moest een software seriële poort gebruiken voor MIDI aangezien de MIDI 31250 baud-rate wordt niet ondersteund door de seriële monitor. Op deze manier die elke seriële poort een andere baudrate kan hebben. De onderstaande code schermen elke MIDI-opdrachten dan "opmerking over" of "nota van" door alleen afdrukken van de opdrachten en de gegevens onder 160 uit, maar het is ook leerzaam om te bouwen naar scherm niet alle opdrachten uit. Zie deze Samenvatting van MIDI-berichten voor alle mogelijke waarden van 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); } } }
Een ander stukje van de puzzel die ik nodig had was het concept van "actief status." Dit betekent dat een opeenvolgende dubbele opdracht, zoals "note op," kan worden overgeslagen, en alleen de gegevens kunnen worden verzonden. Dus, bijvoorbeeld, bij het afspelen van een snaar 3 opmerking, in plaats van het verzenden van 3 "Let op" opdrachten met 3 overeenkomstige nota en snelheid paren--9 bytes totaal, in plaats daarvan slechts 1 "opmerking op" opdracht is verzonden en vervolgens 3 paren van opmerking en snelheid--7 bytes. Ook, "Let op" opdrachten met nul snelheid kunnen worden gebruikt in plaats van "opmerking uit." Dit betekent dat als je alleen de toetsen speelt, dan is een MIDI keyboard slechts 1 "opmerking op" opdracht en paar na paar opmerking en snelheid bytes verzenden kan. Dit zorgt voor een meer efficiënte seriële communicatie-tarief en latentie verlaagd.
Mijn definitieve manier om te verbeteren van het MIDI-gedeelte van mijn oorspronkelijke Arduino-apparaat is het bouwen van de hardware van componenten in plaats van met behulp van een Linksprite MIDI-shield. Het voordeel van het doen die dit is dat kan worden toegevoegd op een proto-bord met andere functionaliteit zoals encoders en een scherm, en paneel gemonteerd MIDI poorten kan worden gebruikt. Boven is een schematische voorstelling van het circuit die ik gebruikte. Ter vergelijking is hier de officiële elektrische specificatie. Merk op dat er een weerstand wordt aangedrongen op aangesloten MIDI uit pin 5 Ik vond dat de weerstand het spanningsniveau van de toegezonden gegevens genoeg vermindert dat het ontvangende einde niet de it, lezen kon zodat ik de weerstand weggelaten.