#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