/*
control() detects and handles all button presses and knob adjustments.
*/
void control(){
// poll rotary encoder
ROT_B_STATE = digitalRead(ROT_B);
ROT_A_STATE = digitalRead(ROT_A);
if (ROT_A_STATE != PROT_A_STATE && ROT_A_STATE == false && millis() > rdb){
rdb = millis();
if (ROT_B_STATE)
switch(MODE){
case TEN:
{
COARSE_FINE = 0;
tu();
break;
}
case ONE:
{
COARSE_FINE = 1;
tu();
break;
}
case NUM:
{
pmeter = (pmeter < 12) ? (pmeter+1):pmeter;
break;
}
case DEN:
{
du();
break;
}
}
else
switch(MODE){
case TEN:
{
COARSE_FINE = 0;
td();
break;
}
case ONE:
{
COARSE_FINE = 1;
td();
break;
}
case NUM:
{
pmeter = (pmeter-1) ? (pmeter-1):pmeter;
break;
}
case DEN:
{
dd();
break;
}
}
lcddisp();
}
PROT_A_STATE = ROT_A_STATE;
// poll Mode button
ROT_BTN_STATE = digitalRead(ROT_BTN);
if (ROT_BTN_STATE != PROT_BTN_STATE && ROT_BTN_STATE == false && millis() - 100 > rotdb){
rotbtn();
rotdb = millis();
lcddisp();
}
PROT_BTN_STATE = ROT_BTN_STATE;
// reset tap counter after 1.9 seconds without tap
if (millis() - tref2 > 1900)
tap_index = 0;
// poll Tap button
TAP_STATE = digitalRead(TAP);
if (TAP_STATE != PTAP_STATE && TAP_STATE == false && millis() - 100 > tapdb){
ref = millis();
beat = 1;
click();
METRONOME_STATE = false;
tap_index++;
tapdb = millis();
tap();
}
PTAP_STATE = TAP_STATE;
// poll Start/Stop button
SSS = digitalRead(START_STOP);
if (SSS != PSSS && SSS == false && millis() - 100 > ssdb){
if (!METRONOME_STATE){
tempo = ptempo;
denom = pdenom;
meter = pmeter;
ssdb = millis();
lcddisp();
}
PSSS = SSS;
METRONOME_STATE = !METRONOME_STATE;
ref = millis();
beat = 1;
}
}