/* LSDJ Sync Tank by Sebastian Tomczak April 2008 */ byte data = 0; int switch_pin = 12; byte portd_on_byte = B11111100; byte portb_on_byte = B00101111; byte portc_on_byte = B00111100; void setup() { Serial.begin(31250); DDRB = DDRB | B00101111; DDRD = DDRD | B11111100; DDRC = DDRC | B00111100; PORTB = B00111111; PORTD = B10111100; PORTC = B00111100; pinMode(switch_pin, INPUT); delay(500); } void loop () { while(digitalRead(switch_pin) == 0) { midiSync(); } while(digitalRead(switch_pin) == 1) { analogSync(); } } void midiSync() { if(Serial.available() > 0) { data = Serial.read(); if(data == 0xf8) { lsdjClock(); } } } void analogSync() { lsdjClock(); delay((analogRead(0) / 26) + 11 ); delayMicroseconds((analogRead(1) + 1) * 4); } void lsdjClock () { for (int i=0; i < 8; i++){ PORTD = B00000000; PORTB = B00000000; PORTC = B00000000; PORTD = portd_on_byte; PORTB = portb_on_byte; PORTC = portc_on_byte; } }