/* -------------------------------------------------------------------------------------------------- Master Clock Generator V0_1 (januari 2008): MIDI, LSDj, nanoloop and sync24 PITCH CONTROLE/CLOCK GENERATOR with Start/Stop for MIDI and sync24 By: Gijs Gieskes 2007/2008 http://gieskes.nl MIDI Clock out on Pins: 8 and 9. LSDj Clock out on Pins: 10 to 13. sync24 start/stop out on Pin: 2 and 3. sync24 on analog Pins: a1 and a2 nanoloop/sync12 on analog Pins: a3 to a5 LED Start/Stop indication on Pin: 4. LED Clock indication on Pin: 5. Stop Button on Pin: 6. Start Button on Pin: 7. potentiometer on Pin: a0 -------------------------------------------------------------------------------------------------- */ int analogValueA = 0; int SSdin1 = 2; int SSdin2 = 3; int ledOnOff = 4; int ledPin = 5; int SSButton2 = 6; int SSButton1 = 7; int SSRead1 = 0; int SSRead2 = 0; int eenKeer = 1; int ledTeller = 0; int nanoOnOff = 0; void setup(){ DDRB = B111111; DDRC = B111100; pinMode(SSdin1, OUTPUT); pinMode(SSdin2, OUTPUT); pinMode(ledPin, OUTPUT); pinMode(ledOnOff, OUTPUT); pinMode(SSButton1, INPUT); pinMode(SSButton2, INPUT); digitalWrite(ledOnOff, LOW); digitalWrite(SSdin1, LOW); digitalWrite(SSButton1, HIGH); digitalWrite(SSButton2, HIGH); } void loop(){ analogValueA = analogRead(0); analogValueA = 2200+(analogValueA*10); // delay settings SSRead1 = digitalRead(SSButton1); SSRead2 = digitalRead(SSButton2); if (SSRead1 == LOW && eenKeer == 1) { eenKeer = 0; Cstart(); lsdjClock(eenKeer); digitalWrite(SSdin1, HIGH); digitalWrite(SSdin2, HIGH); digitalWrite(ledOnOff, HIGH); nanoOnOff = ClockDelay(analogValueA, nanoOnOff, eenKeer); } if (SSRead2 == LOW && eenKeer == 0) { eenKeer = 1; Cstop(); digitalWrite(SSdin1, LOW); digitalWrite(SSdin2, LOW); digitalWrite(ledOnOff, LOW); nanoOnOff = ClockDelay(analogValueA, 1, 1); } midiClock(); lsdjClock(eenKeer); ledTeller = ledCounter(ledTeller); nanoOnOff = ClockDelay(analogValueA, nanoOnOff, eenKeer); } void midiClock(){ PORTB = B111100; delayMicroseconds(128); PORTB = B111111; } void Cstart(){ PORTB = B111100; delayMicroseconds(64); PORTB = B111111; delayMicroseconds(32); PORTB = B111100; delayMicroseconds(32); PORTB = B111111; } void Cstop(){ PORTB = B111100; delayMicroseconds(96); PORTB = B111111; } void lsdjClock(int eenKeer){ if(eenKeer == 0){ for (int i=0; i <= 7; i++){ PORTB = B000011; delayMicroseconds(61); PORTB = B111111; delayMicroseconds(61); } }else{ delayMicroseconds(976); } } int ClockDelay(int clockspeedA, int input, int eenKeerIn){ if(input == 1){ if(eenKeerIn == 1){ PORTC = B111110; delayMicroseconds(clockspeedA); delayMicroseconds(clockspeedA); PORTC = B111000; delayMicroseconds(clockspeedA); delayMicroseconds(clockspeedA); }else{ PORTC = B111110; delayMicroseconds(clockspeedA); delayMicroseconds(clockspeedA); PORTC = B111000; delayMicroseconds(clockspeedA); delayMicroseconds(clockspeedA); } return 0; }else{ if(eenKeerIn == 1){ PORTC = B111110; delayMicroseconds(clockspeedA); delayMicroseconds(clockspeedA); PORTC = B111000; delayMicroseconds(clockspeedA); delayMicroseconds(clockspeedA); }else{ PORTC = B000110; delayMicroseconds(clockspeedA); delayMicroseconds(clockspeedA); PORTC = B000000; delayMicroseconds(clockspeedA); delayMicroseconds(clockspeedA); } return 1; } } int ledCounter(int input){ if(input < 23){ if(input < 12){ digitalWrite(ledPin, HIGH); }else{ digitalWrite(ledPin, LOW); } return input+1; }else{ return 0; } }