// Include the library code:
#include<Bounce2.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Bounce2::Button buttonUP = Bounce2::Button();
Bounce2::Button buttonDOWN = Bounce2::Button();
#define UPDATE_INTERVAL 1 // Time is seconds
#define BUTTONUP_PIN 4
#define BUTTONDOWN_PIN 3
int menuIndex = 0;
unsigned long prevMillis = 0;
void setup()
{
Serial.begin(9600);
buttonUP.attach(BUTTONUP_PIN, INPUT_PULLUP);
buttonDOWN.attach(BUTTONDOWN_PIN, INPUT_PULLUP);
buttonUP.interval(5);
buttonUP.setPressedState(LOW);
buttonDOWN.interval(5);
buttonDOWN.setPressedState(LOW);
lcd.init();
lcd.backlight();
prevMillis = (millis() - (UPDATE_INTERVAL * 1000UL));
Serial.print("prevMillis: ");
Serial.println(prevMillis);
}
uint8_t i = 0;
void loop()
{
buttonUP.update();
buttonDOWN.update();
if (buttonUP.pressed())
{
menuIndex++;
prevMillis = millis() - (UPDATE_INTERVAL * 1000UL);
if (menuIndex > 3)
{
menuIndex = 3;
}
}
if (buttonDOWN.pressed())
{
menuIndex--;
prevMillis = millis() - (UPDATE_INTERVAL * 1000UL);
if (menuIndex < 0)
{
menuIndex = 0;
}
}
switch (menuIndex)
{
case 0:
{
if ((millis() - prevMillis) > (UPDATE_INTERVAL * 1000UL))
{
lcd.setCursor(0, 0);
lcd.print("Menu 0");
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
prevMillis = millis();
}
break;
}
case 1:
{
if ((millis() - prevMillis) > (UPDATE_INTERVAL * 1000UL))
{
lcd.setCursor(0, 0);
lcd.print("Menu 1");
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
prevMillis = millis();
}
break;
}
case 2:
{
if ((millis() - prevMillis) > (UPDATE_INTERVAL * 1000UL))
{
lcd.setCursor(0, 0);
lcd.print("Menu 2");
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
prevMillis = millis();
}
break;
}
case 3:
{
if ((millis() - prevMillis) > (UPDATE_INTERVAL * 1000UL))
{
lcd.setCursor(0, 0);
lcd.print("Menu 3");
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
prevMillis = millis();
}
break;
}
default:
{
break;
}
}
}