/* 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; } }