Hi,
I´m trying to create a tree menu on the LCD display. The first menu is displayed without problems but the second one cannot be selected or displayed for some reason.
Thanks in advance for your help ![]()
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
const int ROW_NUM = 4;
const int COLUMN_NUM = 4;
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3', 'A'},
{'4','5','6', 'B'},
{'7','8','9', 'C'},
{'*','0','#', 'D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6};
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2};
int menu = 1;
int status = 0;
LiquidCrystal_I2C lcd(0x27, 20, 4);
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
void setup() {
Serial.begin(9600);
lcd.backlight();
lcd.init();
}
void loop() {
HomeMenu();
}
void HomeMenu(){
if(status == 0){
lcd.clear();
lcd.print("A: MODE 1 ");
lcd.setCursor(0,1);
lcd.print("B: MODE 2 ");
lcd.setCursor(0,2);
lcd.print("C: MODE 3 ");
lcd.setCursor(0,3);
lcd.print("D: MODE 4 ");
status = status+1;
}
char key = keypad.getKey();
switch (key){
//--Mode 1--//
case 'A':
Menu1();
break;
//--Mode 2--//
case 'B':
break;
//--Mode 3--//
case 'C':
break;
//--Mode 4--//
case 'D':
break;
default:
break;
}
}
void Menu1(){
if(status == 1){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Menu 1 ");
lcd.setCursor(0,2);
lcd.print("A Option1 B Option2");
lcd.setCursor(0,3);
lcd.print("C Option3 D Option4 ");
status = status+1;
}
char key = keypad.getKey();
switch (key){
//Option 1//
case 'A':
Menu2();
break;
//Option 2//
case 'B':
break;
//Option 3//
case 'C':
break;
//Option 4//
case 'D':
break;
default:
break;
}
}
void Menu2(){
if(status == 2){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Menu 2 ");
lcd.setCursor(0,2);
lcd.print("A Option1 B Option2");
lcd.setCursor(0,3);
lcd.print("C Option3 D Option4");
status = status+1;
}
char key = keypad.getKey();
switch (key){
case 'A':
break;
case 'B':
break;
case 'C':
break;
case 'D':
break;
default:
break;
}
}