#include <Encoder.h>
#define ENCODER_PIN_A 3
#define ENCODER_PIN_B 2
#define SW_PIN 4
const int buttonPin = SW_PIN;
int menuItem = 0;
int buttonState = HIGH;
int lastButtonState = HIGH;
int menu0Value = 0;
int menu1Value = 0;
int menu2Value = 0;
int menu3Value = 0;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
unsigned long longpressDelay = 1000;
void setup() {
uint16_t time = millis();
time = millis() - time;
Serial.begin(9600);
Serial.println("Basic Encoder Test:");
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) { //Button is pressed, start counting for debounce
if ( (millis() - lastDebounceTime) > debounceDelay) { //button pressed long enough
if (buttonState == LOW) {
if (menuItem == 0) {
menuItem = 1;
Serial.println("menuItem was 0, set to 1");
}
else if (menuItem == 1) {
menuItem = 2;
Serial.println("menuItem was 1, set to 2");
}
else {
menuItem = 0;
Serial.println("menuItem was 2, set to 0");
}
Serial.println((String)"menuItem " + menuItem);
if ( (millis() - lastDebounceTime) > longpressDelay) { //Listen for long press
menuItem = 3;
Serial.println("menuItem set to 3");
}
}
lastDebounceTime = millis(); //Reset debounce
lastButtonState = buttonState;
}
}
}