// This example shows mechButton, wich debounces a button then,
// if desired, can do a callback when that button's state changes.
// Completely NON BLOCKING
//
//                  Hide the mess of millis!

#include <mechButton.h>


#define NUM_KEYS  9


mechButton  btn[NUM_KEYS] {2, 3, 4, 5, 6, 7, 8, 9, 10 };
char        keyCodes[NUM_KEYS] = {'A','A','A','S','D','F','G','H','J'};


void setup() {
  
  Serial.begin(115200);
  Serial.println("hello!");
  btn[0].setCallback(btnClk0);   // Link their button to the button callback.
  btn[1].setCallback(btnClk1);
  btn[2].setCallback(btnClk2); 
  btn[3].setCallback(btnClk3);
  btn[4].setCallback(btnClk4); 
  btn[5].setCallback(btnClk5);
  btn[6].setCallback(btnClk6); 
  btn[7].setCallback(btnClk7);
  btn[8].setCallback(btnClk8);                                 
}


void btnClick(int btnID) {

  Serial.print("Key ");
  Serial.print(keyCodes[btnID]);
  if (!btn[btnID].getState()) { // If this player's button is mashed..
    Serial.println(" Has been pressed.");
  } else {
    Serial.println(" Has been released.");
  } 
}


// When a button's state changes.. Call this!
void btnClk0(void) { btnClick(0); }
void btnClk1(void) { btnClick(1); }
void btnClk2(void) { btnClick(2); }
void btnClk3(void) { btnClick(3); }
void btnClk4(void) { btnClick(4); }
void btnClk5(void) { btnClick(5); }
void btnClk6(void) { btnClick(6); }
void btnClk7(void) { btnClick(7); }
void btnClk8(void) { btnClick(8); }


void loop() {
  
  idle();                   // Runs things like the buttons.
}