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