#include "mtbutton.h"
#define S_TEST_ISPRESSED 0
#define S_TEST_WASPRESSED 1
#define S_TEST_WASPRESSEDFOR 2
#define S_TEST_ISSPRESSED_R 3
#define N_MAX_TEST 4
// PIN_BTN_DWN is blue button
#define PIN_BTN_DWN 9
// PIN_BTN_UP is red button
#define PIN_BTN_UP 6
// PIN_BTN_NEXT is green button
#define PIN_BTN_NEXT 5
// PIN_BTN_NEXT is yellow button
#define PIN_BTN_PREV 4
uint16_t g_cnt;
uint8_t g_test;
uint8_t g_oldTest = ~0;
bool g_onEntry;
MtButton btnPdwn(PIN_BTN_DWN, InputMode::EXPDWN);
MtButton btnPup(PIN_BTN_UP); // default InputMode::IPUP
MtButton nextTest(PIN_BTN_NEXT);
MtButton prevTest(PIN_BTN_PREV);
void selectTest() {
if (prevTest.wasClicked()) {
g_test = (((g_test -1) % (N_MAX_TEST))
+ (N_MAX_TEST)) % (N_MAX_TEST);
Serial.println();
} else if (nextTest.wasClicked()) {
g_test = (g_test + 1) % (N_MAX_TEST);
Serial.println();
}
}
void setup() {
Serial.begin(115200);
g_test = S_TEST_ISPRESSED; // start test
btnPdwn.begin();
btnPup.begin();
nextTest.begin();
prevTest.begin();
}
// calcAndPrintTcm Calcola e stampa il tempo di ciclo medio
// tcm è espresso in millesimi di secondo.
// moltiplicare tcm x 1000 per ottenere il tempo in microsecondi
// Decommentare (1) e (2) per stampare il valore di loopCounter
// oppure calcolarlo manualmente così: lc = 1000 / tcm.
void calcAndPrintTcm() {
static uint32_t loopCounter;
static uint32_t oneSec = millis();
loopCounter++;
if (millis() - oneSec >= 1000) {
oneSec = millis();
float tcm = 1000.0/loopCounter;
Serial.print("Tempo di ciclo medio: ");
Serial.print(tcm, 5);
Serial.println(" ms");
//Serial.print("loopCounter: "); // (1)
//Serial.println(loopCounter); // (2)
loopCounter = 0;
}
}
void loop() {
calcAndPrintTcm();
btnPdwn.read();
btnPup.read();
nextTest.read();
prevTest.read();
selectTest();
if (g_oldTest != g_test) {
g_onEntry = true;
g_oldTest = g_test;
} else {
g_onEntry = false;
}
switch(g_test) {
case S_TEST_ISPRESSED:
if (g_onEntry) {
Serial.println("isPressed test.");
Serial.println("Blue button increment count, red button decrement.");
}
if (btnPdwn.isPressed()) {
if (g_cnt > 0) {
g_cnt--;
Serial.println(g_cnt);
}
} else if (btnPup.isPressed()) {
g_cnt++;
Serial.println(g_cnt);
}
break;
case S_TEST_WASPRESSED:
if (g_onEntry) {
Serial.println("wasClicked() test.");
}
if (btnPdwn.wasClicked()) {
Serial.println("redLeft");
g_cnt++;
} else if (btnPup.wasClicked()) {
Serial.println("bluRight");
g_cnt++;
}
break;
case S_TEST_WASPRESSEDFOR:
if (g_onEntry) {
Serial.println("wasPressedFor() test.");
Serial.println("Press left red button more than 500ms.");
Serial.println("Press right red button more than 1500ms.");
}
if (btnPdwn.wasPressedFor(500)) {
Serial.println("redleft 500");
g_cnt++;
} else if (btnPup.wasPressedFor(1500)) {
Serial.println("redRight 1500");
g_cnt++;
}
break;
case S_TEST_ISSPRESSED_R:
if (g_onEntry) {
Serial.println("isPressed_r() test.");
Serial.println("Press red left o red right button for long time");
}
if (btnPdwn.isPressed_r(100, 1)) {
if (g_cnt > 0) {
g_cnt--;
Serial.println(g_cnt);
}
} else if (btnPup.isPressed_r(100, 50)) {
g_cnt++;
Serial.println(g_cnt);
}
break;
}
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn6:1.l
btn6:2.l
btn6:1.r
btn6:2.r
r1:1
r1:2
gnd1:GND
vcc1:VCC