// Teensyduino MIDI Beat Clock // LSDJ and Nanoloop Sync // by Sebastian Tomczak // 30 August 2011 // At the time of writing, requires edited Teensyduino usb_midi/usb_api.cpp and usb_midi/usb_api.h // See here: http://little-scale.blogspot.com/2011/08/how-to-deal-with-real-time-midi-beat.html byte counter; byte CLOCK = 248; byte START = 250; byte CONTINUE = 251; byte STOP = 252; void setup() { pinMode(11, OUTPUT); pinMode(0, OUTPUT); pinMode(1, OUTPUT); digitalWrite(11, HIGH); usbMIDI.setHandleRealTimeSystem(RealTimeSystem); } void loop() { usbMIDI.read(); } void RealTimeSystem(byte realtimebyte) { if(realtimebyte == 248) { lsdjSync(); nanoSync(); counter++; if(counter == 24) { counter = 0; digitalWrite(11, HIGH); } if(counter == 12) { digitalWrite(11, LOW); } } if(realtimebyte == START || realtimebyte == CONTINUE) { counter = 0; digitalWrite(11, HIGH); } if(realtimebyte == STOP) { digitalWrite(11, LOW); } } void lsdjSync() { for(int i = 0; i < 8; i ++) { digitalWrite(0, LOW); digitalWrite(0, HIGH); } } void nanoSync() { digitalWrite(1, counter % 12); }