// Serial Variables int baud = 31250; // MIDI Real Time Bytes byte midi_start = 0xfa; byte midi_stop = 0xfc; byte midi_clock = 0xf8; byte midi_continue = 0xfb; // Working Variables and Pins int nano_flip = 0; int play_flag = 0; byte data; byte nano_high = B00111111; byte lsdj_high = B00111111; // Setup void setup() { Serial.begin(baud); DDRB = DDRB | B00111111; DDRC = DDRC | B00111111; PORTC = lsdj_high; } // Program void loop() { if(Serial.available() > 0) { data = Serial.read(); if(data == midi_start) { play_flag = 1; } else if(data == midi_continue) { play_flag = 1; } else if(data == midi_stop) { play_flag = 0; nano_flip = 0; } else if((data == midi_clock) && (play_flag == 1)) { Sync(); } } } // Functions void Sync() { if(nano_flip == 0) { PORTB = 0; nano_flip = 1; } else if(nano_flip == 1) { PORTB = nano_high; nano_flip = 0; } for (int i=0; i < 8; i++) { PORTC = 0; PORTC = lsdj_high; } }