#include <Button_SL.hpp>
//////////////////////////////////////////////////
// Global constants and variables
//////////////////////////////////////////////////
constexpr uint8_t BUTTON_PIN1{2};
constexpr uint8_t LED1_PIN{4};
constexpr uint8_t LED2_PIN{6};
constexpr unsigned long TIMEOUT {3000};
using namespace Btn;
ButtonSL btn{BUTTON_PIN1, 5000}; // 5000ms for long press
unsigned long timeStamp;
//////////////////////////////////////////////////
// Function forward declaration
//////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
/// @brief Initialize the program.
///
//////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(115200);
Serial.println("Start");
// Initialize Buttons
pinMode(LED1_PIN,OUTPUT);
pinMode(LED2_PIN,OUTPUT);
btn.begin();
btn.setDebounceTime_ms(20);
btn.releaseOn(); // Autorelease if long press detected
}
//////////////////////////////////////////////////////////////////////////////
/// @brief Check Buttons.
///
//////////////////////////////////////////////////////////////////////////////
void loop() {
static bool isLedOn {false};
switch (btn.tick()) {
case ButtonState::shortPressed:
digitalWrite(LED1_PIN,HIGH);
digitalWrite(LED2_PIN,LOW);
timeStamp = millis();
isLedOn = true;
Serial.print("B1 . ");
Serial.print(btn.getDuration_ms());
Serial.println(" ms");
break;
case ButtonState::longPressed:
digitalWrite(LED1_PIN,LOW);
digitalWrite(LED2_PIN,HIGH);
timeStamp = millis();
isLedOn = true;
Serial.print("B1 + ");
Serial.print(btn.getDuration_ms());
Serial.println(" ms");
break;
default: break;
}
if (millis() - timeStamp > TIMEOUT && true == isLedOn) {
Serial.println("Switch LED off");
digitalWrite(LED1_PIN,LOW);
digitalWrite(LED2_PIN,LOW);
isLedOn = false;
}
}