#include <mechButton.h>
#include <timeObj.h>
mechButton btnA(2);
int varA;
// Button A: Needs to count up a variable each time it's pressed.
mechButton btnB(3);
int varB;
timeObj btnBTimer(3000,false);
// Button B: Needs to count up a variable each time it's pressed and
// count the same variable down if it's held for more than 3 seconds.
// (Only one increment/decrement per press)
#define START_PERIOD_MS 2000
#define DELTA_PERIOD_MS 100
#define MIN_PERIOD_MS 200
mechButton btnC(4);
int varC;
bool btnCDn;
float periodC;
timeObj btnCTimer(START_PERIOD_MS,false);
// Button C: Counts a variable up while it's held. Starts slowly and
// then gets faster the longer it's held.
#define LED_D_PIN 7
mechButton btnD(5);
bool ledDState;
// Button D: Toggle LED. Press button: LED on. Press again: LED off.
// Press again: LED on and so on.
#define DBL_CLIK_MS 250
mechButton btnE(6);
int varE;
bool timingE;
timeObj btnETimer(DBL_CLIK_MS,false);
// Button E: Counts variable up if it's pressed. Counts variable down
// if it's pressed quickly twice.
void setup() {
Serial.begin(115200);
varA = 0;
btnA.setCallback(btnAClk);
varB = 0;
btnB.setCallback(btnBClk);
varC = 0;
btnCDn = false;
periodC = START_PERIOD_MS;
btnC.setCallback(btnCClk);
ledDState = false;
pinMode(LED_D_PIN,OUTPUT);
digitalWrite(LED_D_PIN,false);
btnD.setCallback(btnDClk);
varE = 0;
timingE = false;
btnE.setCallback(btnEClk);
}
void btnAClk(void) {
if (!btnA.getState()) {
varA++;
Serial.print("varA :");
Serial.println(varA);
}
}
void btnBClk(void) {
if (!btnB.getState()) {
btnBTimer.start();
} else {
if (btnBTimer.ding()) {
varB--;
} else {
varB++;
}
btnBTimer.reset();
Serial.print("\tvarB :");
Serial.println(varB);
}
}
void btnCClk(void) {
if (!btnC.getState()) {
btnCTimer.start();
btnCDn = true;
} else {
btnCTimer.reset();
btnCDn = false;
periodC = START_PERIOD_MS;
varC = 0;
}
}
void btnDClk(void) {
if (!btnD.getState()) {
ledDState = !ledDState;
digitalWrite(LED_D_PIN,ledDState);
}
}
void btnEClk(void) {
if (!btnE.getState()) {
if (timingE) {
varE--;
btnETimer.reset();
timingE = false;
showVarE();
} else {
btnETimer.start();
timingE = true;
}
}
}
void showVarE(void) {
Serial.print("\t\t\tvarE :");
Serial.println(varE);
}
void loop() {
idle();
if (btnCDn) {
if (btnCTimer.ding()) {
varC++;
Serial.print("\t\tvarC :");
Serial.println(varC);
periodC = periodC - DELTA_PERIOD_MS;
if (periodC<MIN_PERIOD_MS) {
periodC = MIN_PERIOD_MS;
}
btnCTimer.setTime(periodC,true);
}
}
if (timingE) {
if (btnETimer.ding()) {
varE++;
btnETimer.reset();
timingE = false;
showVarE();
}
}
}