Ho provato a utilizzare la libreria SoftwareSerial per MIDI (da 47 effetti), ma sembra che riceva regolarmente messaggi corrotti / imprevisti.
Il circuito che sto usando funziona perfettamente quando lo collego con il Soluzione HardwareSerial (quindi il problema deve risiedere nel software).
Quello che vedo è:
- Quando premo note e note di rilascio, il LED 13 si accende e si spegne correttamente.
- Quando uso Serial.print per il debug ricevo messaggi corretti. Tuttavia, nell'esempio seguente ho rimosso le istruzioni print per avere un esempio minimo).
- Quando uso SoftwareSerial, il LED 13 si accende e si spegne correttamente per ogni nota. Tuttavia, quando invio molti messaggi (ad esempio tramite aftertouch / pitch bend che inviano molti messaggi in breve tempo), ho notato che vengono inviati comandi Note On / Off con valori "casuali".
Alcune fonti dicono che SoftwareSerial dovrebbe funzionare per MIDI, tuttavia, finora è tutt'altro che perfetto. Faccio qualche errore?
(btw, il baudrate del MIDI è 31.250 bps, quando uso la banda del passo vengono inviate diverse centinaia di byte al secondo, fino ad ora all'interno delle specifiche MIDI).
Lo schizzo che utilizzo è:
#include <MIDI.h> // Aggiungi libreria Midi # include <SoftwareSerial.h>SoftwareSerial swSerial (2, 11); // RX, TXMIDI_CREATE_INSTANCE (SoftwareSerial, swSerial, midiSw1); # define LED 13 // Arduino Board LED is on Pin 13void setup () {pinMode (LED, OUTPUT); // Imposta il pin 13 della scheda Arduino per emettere midiSw1.begin (MIDI_CHANNEL_OMNI); midiSw1.setHandleNoteOn (MyHandleNoteOn); midiSw1.setHandleNoteOff (MyHandleNoteOff);} void loop () {midiSw1.read ();} void MyHandleNoteOn (canale byte, passo byte, velocità byte) {digitalWrite (LED, HIGH); // Accendi il LED} void MyHandleNoteOff (canale byte, passo byte, velocità byte) {digitalWrite (LED, LOW); // Spegni il LED}