#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
String menutitle = "Menu Title";
String linearray[]={"menu1", "menu2", "menu3", "menu4", "menu5", "menu6"};
int currentcursorpos=0;
int linearraylen = sizeof(linearray)/sizeof(linearray[0]);//Serial.print("Arraylen ");Serial.println(arraylen);
///////////////////////////////////////////
void setup() {
Serial.begin(9600);
// Init
lcd.init();
lcd.backlight();
}
////////////////////////////////////////////
void loop() {
displaylcdmenu(menutitle, linearray, currentcursorpos, linearraylen);
//TESTING CHANGING CURSOR POS EVERY 3 SECONDS
currentcursorpos++;if (currentcursorpos==6) currentcursorpos=0;
Serial.println(currentcursorpos);
delay(5000);
}
//////////////////////////////////////////////
void displaylcdmenu(String _menutitle, String _linearray[], int _cpos, int _linearraylen){
int arraylen = _linearraylen;//sizeof(_linearray)/sizeof(_linearray[0]);
//Serial.print("Arraylen ");Serial.println(arraylen);
int scrl=0;
while(_cpos>scrl+2) {scrl++;}
while(_cpos<scrl) {scrl--;}
_menutitle="** "+_menutitle+" **";
int offset = (20-(_menutitle.length()))/2;
lcd.clear();
//lcd.setCursor(offset, 0);lcd.print(_menutitle);
for(int n=0;n<4;n++){
if (n==0){
lcd.setCursor(offset, 0);
lcd.print(_menutitle);
}else{
char crsr=' ';
if (n==_cpos-scrl+1) crsr='>';
char scrlarrow='|';//tbd logic for up and dn arrows on line 1 and 3
if((n==1) && (scrl>0) )scrlarrow='A';
if((n==3) && !(arraylen-3==scrl))scrlarrow='V';
lcd.setCursor(0, n);lcd.print(crsr+_linearray[(n-1)+scrl]);
lcd.setCursor(19, n);lcd.print(scrlarrow);
}
}
}
////////////////////////////////////////////////
/*
// Print something
lcd.setCursor(3, 0);
lcd.print("Hello, world!");
lcd.setCursor(2, 1);
lcd.print("Wokwi Online IoT");
lcd.setCursor(5, 2);
lcd.print("Simulator");
lcd.setCursor(7, 3);
lcd.print("Enjoy!");
delay(3000);
lcd.setCursor(7, 3);
lcd.print(" ");
lcd.clear();
uvolt = 200.4;
ufreq = 50.0;
evolt = 220.4;
efreq = 51.0;
displayparams();
//////////////////////////
///////////////////////////////////////////
void displayparams(){
//Parameters
for (int n=0; n<LCD_LINES; n++){
lcd.setCursor(0, n);dispLines[n];
//lcd.setCursor(0, n);dispLines[n+lcdScrl];
}
//Values
lcd.setCursor(10, 0);lcd.print(uvolt);
lcd.setCursor(10, 1);lcd.print(ufreq);
lcd.setCursor(10, 2);lcd.print(evolt);
lcd.setCursor(10, 3);lcd.print(efreq);
//Units
lcd.setCursor(17, 0);lcd.print(" V");
lcd.setCursor(17, 1);lcd.print(" Hz");
lcd.setCursor(17, 2);lcd.print(" V");
lcd.setCursor(17, 3);lcd.print(" Hz");
}
*/