external beat clock partly works now

This commit is contained in:
2023-05-03 19:35:58 +03:00
parent a27787174f
commit b954f0a28b

View File

@ -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 (pulseClockCount < pulsePeriod) {
pulseClockCount++;
}
if (clockCount == 0) {
pulseCount++;
beatCounted = false;
pulseCounted = false;
}
break;
}
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() {
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"));