From b954f0a28bedb3ecd1f3f0a712501f2b27b7514a Mon Sep 17 00:00:00 2001 From: Oleksiy Date: Wed, 3 May 2023 19:35:58 +0300 Subject: [PATCH] external beat clock partly works now --- software/GToE/GToE.ino | 53 ++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/software/GToE/GToE.ino b/software/GToE/GToE.ino index 0ab5d5a..65a8658 100644 --- a/software/GToE/GToE.ino +++ b/software/GToE/GToE.ino @@ -46,8 +46,6 @@ int outsClocksCounts[6]; int playingModes[6]; //actual channel modes array updated from channels each beat int clockCount = 0; - -int pulseClockCount = 0; int pulseCount = 0; int pulsePeriod; bool isPlaying = 0; @@ -55,8 +53,10 @@ int needToResetChannel; bool beatCounted = false; bool pulseCounted = false; -int masterClockMode = 0; // 0 - internal, 1 - external 24ppqn +unsigned int masterClockMode = 0; // 0 - internal, 1 - external 24ppqn, 2 - external beat bool externalPulseCounted = true; +unsigned long lastExtPulseTime; +unsigned long newExtPulseTime; int displayTab = 0; int displayTabOld; @@ -122,7 +122,7 @@ void setup() { display.setTextColor(SSD1306_WHITE); display.println(F("V:0.1a")); //Version display.display(); - delay(2000); + delay(1200); updateScreen(); updateTiming(); @@ -139,7 +139,7 @@ void clock() { if (isPlaying) { // Action on each pulse - if (pulseClockCount == 0 && !pulseCounted) { + if (clockCount == 0 && !pulseCounted) { //modulation for (int i = 0; i<6; i++) { @@ -193,7 +193,7 @@ void clock() { switch (masterClockMode) { case 0: //internal - if (pulseClockCount == 0) { + if (clockCount == 0) { pulseCount++; beatCounted = false; pulseCounted = false; @@ -207,18 +207,34 @@ void clock() { pulseCounted = false; } break; + case 2: //external beat + if (externalPulseCounted == false) { + externalPulseCounted = true; + clockCount == 0; + lastExtPulseTime = newExtPulseTime; + newExtPulseTime = millis(); + if (lastExtPulseTime) { + updateTiming(); + } + } + if (clockCount == 0) { + pulseCount++; + beatCounted = false; + pulseCounted = false; + } + break; } - if (pulseClockCount < pulsePeriod) { - pulseClockCount++; + if (clockCount < pulsePeriod) { + clockCount++; } else { - pulseClockCount = 0; + clockCount = 0; } if (pulseCount >= PPQN) { pulseCount = 0; } // pull low all outputs after set pulse length - if (pulseClockCount >= PULSE_LENGTH) { + if (clockCount >= PULSE_LENGTH) { for (int i = 0; i<6; i++) { digitalWrite(outsPins[i], LOW); } @@ -231,7 +247,12 @@ void externalClock() { } void updateTiming() { - pulsePeriod = 60000 / (bpm * PPQN); + if (masterClockMode == 0) { + pulsePeriod = 60000 / (bpm * PPQN); + } else if (masterClockMode == 2) { //for external beat clock + pulsePeriod = (newExtPulseTime - lastExtPulseTime) / PPQN; + //Serial.println("pulsePeriod"); + } } void resetClocks() { @@ -278,8 +299,8 @@ void checkInputs() { updateScreen(); } else if (encReleasedTime - encPressedTime < 2000 && displayTab == 0) { // switch to external clock mode - if (masterClockMode == 0) { - masterClockMode = 1; + if (masterClockMode < 2) { + masterClockMode++; } else { masterClockMode = 0; } @@ -383,8 +404,10 @@ void updateScreen() { if (displayTab == 0 && masterClockMode == 0) { display.print(bpm); display.println(F("bpm")); - } else if (displayTab == 0 && masterClockMode != 0) { - display.println(F("EXT")); + } else if (displayTab == 0 && masterClockMode == 1) { + display.println(F("EXT-24")); + } else if (displayTab == 0 && masterClockMode == 2) { + display.println(F("EXT-B")); } else { if (clockModes[channels[displayTab-1].mode] == 0) { display.print(F("OFF"));