// MACRO-START * MACRO-START * MACRO-START * MACRO-START * MACRO-START * MACRO-START *
#define dbg(myFixedText, variableName) \
Serial.print( F(#myFixedText " " #variableName"=") ); \
Serial.println(variableName);
#define dbgi(myFixedText, variableName,timeInterval) \
{ \
static unsigned long intervalStartTime; \
if ( millis() - intervalStartTime >= timeInterval ){ \
intervalStartTime = millis(); \
Serial.print( F(#myFixedText " " #variableName"=") ); \
Serial.println(variableName); \
} \
}
#define dbgc(myFixedText, variableName) \
{ \
static long lastState; \
if ( lastState != variableName ){ \
Serial.print( F(#myFixedText " " #variableName" changed from ") ); \
Serial.print(lastState); \
Serial.print( F(" to ") ); \
Serial.println(variableName); \
lastState = variableName; \
} \
}
#define dbgcf(myFixedText, variableName) \
{ \
static float lastState; \
if ( lastState != variableName ){ \
Serial.print( F(#myFixedText " " #variableName" changed from ") ); \
Serial.print(lastState); \
Serial.print( F(" to ") ); \
Serial.println(variableName); \
lastState = variableName; \
} \
}
// MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END *
/*
https://www.hackster.io/LithiumION/simple-lcd-menu-using-arduino-877004
MADE BY Lithium Ion
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int upButton = A3;
int downButton = A1;
int selectButton = A2;
int menu = 1;
int A;
int B;
void setup() {
Serial.begin(115200);
Serial.println("Setup-Start");
lcd.begin(16, 2);
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
updateMenu();
}
void loop() {
dbgc("01:", digitalRead(downButton) );
dbgc("02:", digitalRead(upButton) );
dbgc("03:", digitalRead(selectButton) );
if (!digitalRead(downButton)) {
menu++;
updateMenu();
delay(100);
while (!digitalRead(downButton));
}
if (!digitalRead(upButton)) {
menu--;
updateMenu();
delay(100);
while (!digitalRead(upButton));
}
if (!digitalRead(selectButton)) {
executeAction();
updateMenu();
delay(100);
while (!digitalRead(selectButton));
}
}
void updateMenu() {
switch (menu) {
case 0:
menu = 1;
break;
case 1:
lcd.clear();
lcd.print(">LED1");
lcd.setCursor(0, 1);
lcd.print(" LED2");
break;
case 2:
lcd.clear();
lcd.print(" LED1");
lcd.setCursor(0, 1);
lcd.print(">LED2");
break;
case 3:
lcd.clear();
lcd.print(">LED3");
lcd.setCursor(0, 1);
lcd.print(" LED4");
break;
case 4:
lcd.clear();
lcd.print(" LED3");
lcd.setCursor(0, 1);
lcd.print(">LED4");
break;
case 5:
menu = 4;
break;
}
}
void executeAction() {
Serial.println("Entering executeAction");
dbgc("exAct:", menu);
switch (menu) {
case 1:
action1();
break;
case 2:
action2();
break;
case 3:
action3();
break;
case 4:
action4();
break;
}
Serial.println("leaving executeAction");
}
void action1() {
Serial.println("entering action1");
dbgc("a1:", digitalRead(A3) );
dbgc("a1:", digitalRead(A1) );
if (digitalRead(A3) == LOW)
{
A++;
delay(100);
}
if (digitalRead(A1) == LOW)
{
A--;
delay(100);
}
//lcd.clear();
lcd.print("# A ");
lcd.print(A );
Serial.println("leaving action1");
}
void action2() {
Serial.println("entering action2");
if (digitalRead(A3) == LOW)
{
B++;
delay(100);
}
if (digitalRead(A1) == LOW)
{
B--;
delay(100);
}
lcd.clear();
lcd.print("# B ");
lcd.print(B );
Serial.println("leaving action2");
}
void action3() {
Serial.println("entering action3");
lcd.clear();
lcd.print(">Toggle Led #3");
Serial.println("leaving action3");
}
void action4() {
Serial.println("entering action4");
lcd.clear();
lcd.print(">Toggle Led #4");
Serial.println("leaving action4");
}