Fixed bug when EXT-B continued playing after incoming triggers stopped
This commit is contained in:
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user