Hi! I need your help with my thesis project. I do struggle about the how to make a submenu in a menu and another submenu in that submenu.
this project will be displayed in i2c LCD 20x4 display with 4 buttons. UP ,DOWN, ENTER and BACK buttons
example:
in [main menu] there's......
more
log in
settings
and in "more" section i wanted to see (example....)....
billing
attachment
about
and in "billing" section i wanted to see (example....).....
tax
total amount
etc...
i hope you understand . please help. thank you guys
(i will be adding rtc later once im done configuring the menu and submenu)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//#include <DS3231.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
//DS3231 rtc(SDA, SCL);
int menu = 1;
int morsec = 1;
bool menub = false;
bool moreb = false;
int escButton = 8;
int downButton = 9;
int upButton = 10;
int selectButton = 11;
void setup() {
//rtc.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(6,1);
lcd.print("WELCOME!");
lcd.setCursor(5,2);
lcd.print("GOOD DAY!");
delay(1500);
lcd.clear();
lcd.setCursor(4,1);
lcd.print("INITIALIZING");
lcd.setCursor(5,2);
lcd.print(".");
delay(300);
lcd.setCursor(5,2);
lcd.print("..");
delay(300);
lcd.setCursor(5,2);
lcd.print("...");
delay(300);
lcd.setCursor(5,2);
lcd.print("....");
delay(300);
lcd.setCursor(5,2);
lcd.print(".....");
delay(300);
lcd.setCursor(5,2);
lcd.print("......");
delay(300);
lcd.setCursor(5,2);
lcd.print(".......");
delay(300);
lcd.setCursor(5,2);
lcd.print("........");
delay(300);
lcd.setCursor(5,2);
lcd.print(".........");
delay(300);
lcd.setCursor(5,2);
lcd.print("..........");
delay(300);
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
pinMode(escButton, INPUT_PULLUP);
mainMenu();
}
void loop (){
if (menub == true){
if (!digitalRead(downButton)){
menu++;
mainMenu();
delay(100);
//while (!digitalRead(downButton));
}
if (!digitalRead(upButton)){
menu--;
mainMenu();
delay(100);
//while(!digitalRead(upButton));
}
if ((!digitalRead(selectButton)) && (menu == 2))
{
menub = false;
moreb = true;
//mainMenu();
moreSection();
delay(100);
}
else if ((!digitalRead(selectButton)) && (menu == 3))
{
//mainMenu();
loginSection();
delay(100);
}
else if ((!digitalRead(selectButton)) && (menu == 5))
{
//mainMenu();
aboutSection();
delay(100);;
}
}
if (moreb == true){
if (!digitalRead(downButton)){
morsec++;
//moreDetails();
delay(100);
//while (!digitalRead(downButton));
}
if (!digitalRead(upButton)){
morsec--;
//moreDetails();
delay(100);
//while(!digitalRead(upButton));
}
if (!digitalRead(escButton)){
menu = 2;
moreb = false;
menub = true;
mainMenu();
return menu;
delay(100);
}
}
}
void mainMenu() {
menub= true;
switch (menu) {
case 0:
menu = 1;
break;
case 1:
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("LIVE MONITORING");
lcd.setCursor(0, 1);
lcd.print("KWH: ");
lcd.setCursor(0, 2);
lcd.print("COST: ");
lcd.setCursor(5, 3);
lcd.print("MARCH 2020");
//lcd.print(rtc.getDateStr());
break;
case 2:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">MORE");
lcd.setCursor(0, 1);
lcd.print(" LOG IN");
lcd.setCursor(0, 2);
lcd.print(" SETTINGS");
lcd.setCursor(0, 3);
lcd.print(" ABOUT");
break;
case 3:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" MORE");
lcd.setCursor(0, 1);
lcd.print(">LOG IN");
lcd.setCursor(0, 2);
lcd.print(" SETTINGS");
lcd.setCursor(0, 3);
lcd.print(" ABOUT");
break;
case 4:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" MORE");
lcd.setCursor(0, 1);
lcd.print(" LOG IN");
lcd.setCursor(0, 2);
lcd.print(">SETTINGS");
lcd.setCursor(0, 3);
lcd.print(" ABOUT");
break;
case 5:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" MORE");
lcd.setCursor(0, 1);
lcd.print(" LOG IN");
lcd.setCursor(0, 2);
lcd.print(" SETTINGS");
lcd.setCursor(0, 3);
lcd.print(">ABOUT");
break;
}
}
void moreSection() {
moreb = true;
if (morsec == 1){
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("BILLING DETAILS");
lcd.setCursor(0, 1);
lcd.print("GEN: ");
lcd.setCursor(0, 2);
lcd.print("TRANS: ");
lcd.setCursor(0, 3);
lcd.print("SYS LOST: ");
}
else if (morsec == 2){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DISTRI: ");
lcd.setCursor(0, 1);
lcd.print("SUBS: ");
lcd.setCursor(0, 2);
lcd.print("GOV TAX: ");
lcd.setCursor(0, 3);
lcd.print("UNIV CHRG: ");
}
}
void loginSection(){
switch (menu) {
case 3:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">GUEST");
lcd.setCursor(0, 1);
lcd.print(" ADMIN");
delay(10);
break;
}
}
void aboutSection(){
switch (menu) {
case 5:
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("GROUP #0");
lcd.setCursor(6, 3);
lcd.print("VER 1.0");
delay(10);
break;
}
}
void moreDetails() {
if (morsec == 1){
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("BILLING DETAILS");
lcd.setCursor(0, 1);
lcd.print("GEN: ");
lcd.setCursor(0, 2);
lcd.print("TRANS: ");
lcd.setCursor(0, 3);
lcd.print("SYS LOST: ");
}
if (morsec == 2){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DISTRI: ");
lcd.setCursor(0, 1);
lcd.print("SUBS: ");
lcd.setCursor(0, 2);
lcd.print("GOV TAX: ");
lcd.setCursor(0, 3);
lcd.print("UNIV CHRG: ");
}
}