//in setup:
Serial.println(F("usbMIDI.read()"));
int readCounter = 0;
while (int p = usbMIDI.read())
{
Serial.print(F("-----readCounter "));
Serial.print(readCounter);
Serial.print(F(": "));
Serial.println(p);
readCounter++;
debugIncomingMIDI();
}
// from example: teeny-usb midi - inputRead.ino: (renamed)
void debugIncomingMIDI(void) {
byte type, channel, data1, data2, cable;
// fetch the MIDI message, defined by these 5 numbers (except SysEX)
//
type = usbMIDI.getType(); // which MIDI message, 128-255
channel = usbMIDI.getChannel(); // which MIDI channel, 1-16
data1 = usbMIDI.getData1(); // first data byte of message, 0-127
data2 = usbMIDI.getData2(); // second data byte of message, 0-127
cable = usbMIDI.getCable(); // which virtual cable with MIDIx8, 0-7
// uncomment if using multiple virtual cables
//Serial.print("cable ");
//Serial.print(cable, DEC);
//Serial.print(": ");
// print info about the message
//
switch (type) {
case usbMIDI.NoteOff: // 0x80
Serial.print("Note Off, ch=");
Serial.print(channel, DEC);
Serial.print(", note=");
Serial.print(data1, DEC);
Serial.print(", velocity=");
Serial.println(data2, DEC);
break;
case usbMIDI.NoteOn: // 0x90
Serial.print("Note On, ch=");
Serial.print(channel, DEC);
Serial.print(", note=");
Serial.print(data1, DEC);
Serial.print(", velocity=");
Serial.println(data2, DEC);
break;
case usbMIDI.AfterTouchPoly: // 0xA0
Serial.print("AfterTouch Change, ch=");
Serial.print(channel, DEC);
Serial.print(", note=");
Serial.print(data1, DEC);
Serial.print(", velocity=");
Serial.println(data2, DEC);
break;
case usbMIDI.ControlChange: // 0xB0
Serial.print("Control Change, ch=");
Serial.print(channel, DEC);
Serial.print(", control=");
Serial.print(data1, DEC);
Serial.print(", value=");
Serial.println(data2, DEC);
break;
case usbMIDI.ProgramChange: // 0xC0
Serial.print("Program Change, ch=");
Serial.print(channel, DEC);
Serial.print(", program=");
Serial.println(data1, DEC);
break;
case usbMIDI.AfterTouchChannel: // 0xD0
Serial.print("After Touch, ch=");
Serial.print(channel, DEC);
Serial.print(", pressure=");
Serial.println(data1, DEC);
break;
case usbMIDI.PitchBend: // 0xE0
Serial.print("Pitch Change, ch=");
Serial.print(channel, DEC);
Serial.print(", pitch=");
Serial.println(data1 + data2 * 128, DEC);
break;
case usbMIDI.SystemExclusive: // 0xF0
// Messages larger than usbMIDI's internal buffer are truncated.
// To receive large messages, you *must* use the 3-input function
// handler. See InputFunctionsComplete for details.
Serial.print("SysEx Message: ");
printBytes(usbMIDI.getSysExArray(), data1 + data2 * 256);
Serial.println();
break;
case usbMIDI.TimeCodeQuarterFrame: // 0xF1
Serial.print("TimeCode, index=");
Serial.print(data1 >> 4, DEC);
Serial.print(", digit=");
Serial.println(data1 & 15, DEC);
break;
case usbMIDI.SongPosition: // 0xF2
Serial.print("Song Position, beat=");
Serial.println(data1 + data2 * 128);
break;
case usbMIDI.SongSelect: // 0xF3
Serial.print("Sond Select, song=");
Serial.println(data1, DEC);
break;
case usbMIDI.TuneRequest: // 0xF6
Serial.println("Tune Request");
break;
case usbMIDI.Clock: // 0xF8
Serial.println("Clock");
break;
case usbMIDI.Start: // 0xFA
Serial.println("Start");
break;
case usbMIDI.Continue: // 0xFB
Serial.println("Continue");
break;
case usbMIDI.Stop: // 0xFC
Serial.println("Stop");
break;
case usbMIDI.ActiveSensing: // 0xFE
Serial.println("Actvice Sensing");
break;
case usbMIDI.SystemReset: // 0xFF
Serial.println("System Reset");
break;
default:
Serial.println("Opps, an unknown MIDI message type!");
}
}