Fixed bug when EXT-B continued playing after incoming triggers stopped

This commit is contained in:
--global
2023-05-12 18:09:04 +03:00
parent d067bbb8e0
commit cf0bf0f188

View File

@ -106,7 +106,6 @@ void setup() {
saveState();
EEPROM.write(1023, 'R');
}
calculateCycles();
pinMode(ENC_BTN_PIN, INPUT_PULLUP);
pinMode(START_STOP_BTN_PIN, INPUT_PULLUP);
@ -131,9 +130,10 @@ void setup() {
delay(800);
updateScreen();
updateTiming();
calculateCycles();
calculateBPMTiming();
FlexiTimer2::set(1, 1.0/1000, clock); // 1.0/1000 = 1ms period. If other than 1ms updateTiming() might need tweaking
FlexiTimer2::set(1, 1.0/1000, clock); // 1.0/1000 = 1ms period. If other than 1ms calculateBPMTiming() might need tweaking
FlexiTimer2::start();
}
@ -143,30 +143,41 @@ void loop() {
display.clearDisplay();
display.display();
}
if (masterClockMode == 2) {
calculateBPMTiming();
}
}
void clock() {
if (isPlaying) {
// Action on each pulse
if (tickCount == 0) { //&& masterClockMode == 0) {
if (tickCount == 0) {
sendTriggers();
}
//this part gets the Pulse and Ticks ticking
//it's placed after the triggers to avoid problems on the start (when pulseCount==0)
tickCount++;
if (masterClockMode == 0 || 2) {
if (masterClockMode == 0) {
if (tickCount == pulsePeriod) {
tickCount = 0;
if (pulseCount < (PPQN-1)) { //-1 is here to avoid extra IF to reset to 0
pulseCount++;
} else if (masterClockMode == 0) {
} else {
pulseCount = 0;
}
}
}
//EXT-B
if (masterClockMode == 2) {
if (tickCount == pulsePeriod && pulseCount < (PPQN-1)) {
tickCount = 0;
pulseCount++;
}
}
// pull low all outputs after set pulse length
if (tickCount >= PULSE_LENGTH) {
for (int i = 0; i<6; i++) {
@ -220,9 +231,6 @@ void sendTriggers() {
//switching modes on the beat and resetting channel clock
if (pulseCount == 0) {
if (masterClockMode == 2) {
updateTiming();
}
calculateCycles();
for (int i = 0; i<6; i++) {
if (needPulseReset[i] == true) {
@ -272,7 +280,7 @@ void calculateCycles() {
}
}
void updateTiming() {
void calculateBPMTiming() {
if (masterClockMode == 0) {
pulsePeriod = 60000 / (bpm * PPQN);
} else if (masterClockMode == 2) { //for external beat clock
@ -346,7 +354,7 @@ void checkInputs() {
} else if (bpm < MINBPM) {
bpm = MINBPM;
}
updateTiming();
calculateBPMTiming();
} else if (displayTab != 0 && insideTab == 0) { //subdivision
channels[displayTab-1].mode = channels[displayTab-1].mode - change;
if (channels[displayTab-1].mode == 65535) { //65535 is 0-1 for unsigned vars