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