/*
Make distinction between long and short press
Based on example at bottom of:
https://forum.arduino.cc/t/long-short-button-press-issue/472257/10
*/
#include <Bounce2.h>
#define buttonPin 8
// define times for short and long presses:
#define shortTime 250
#define longTime 1000
#define noEvent 0
#define shortPress 1
#define longPress 2
// Instantiate a Bounce object called button :
Bounce button = Bounce();
unsigned long buttonPressStartTimeStamp;
unsigned long buttonPressDuration;
boolean startTimeout = false;
boolean endTimeout = false;
byte event;
void setup()
{
Serial.begin(115200);
pinMode(buttonPin, INPUT_PULLUP);
button.attach(buttonPin);
button.interval(20);//set debounce interval
}
void loop()
{
event = checkButton();
switch (event)
{
case shortPress:
Serial.println("Short press");
break;
case longPress:
Serial.println("Long press");
break;
case noEvent:
// nothing...
break;
}
}
byte checkButton()
{
byte event = noEvent;
// Update the Bounce instance, does digitalRead of button
button.update();
// Button press transition from HIGH to LOW)
if (button.fell())
{
buttonPressStartTimeStamp = millis();
startTimeout = true;
}
// Button release transition from LOW to HIGH) :
if (button.rose())
{
buttonPressDuration = (millis() - buttonPressStartTimeStamp);
startTimeout = false;
}
if (buttonPressDuration > 0 && buttonPressDuration <= shortTime)
{
event = shortPress;
buttonPressDuration = 0;
}
if (startTimeout == true && (millis() - buttonPressStartTimeStamp) > longTime)
{
event = longPress;
startTimeout = false;
buttonPressDuration = 0;
}
return event;
}
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
rgb1:R
rgb1:COM
rgb1:G
rgb1:B
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r