#define ENCODER_CLK 23
#define ENCODER_DT 22
#define BUTTON 4
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
#define SDA 13
#define SCL 12
#define NUM_MENU 2
#define NUM_VOCI 5
#define DIM_RIGA 16
char menu[NUM_MENU][NUM_VOCI][DIM_RIGA] {
{ "Imp. SSID","Imp. Password","Imp. Data","Imp. Ora","" },
{ "SSID","Password","Data","Ora","Return" }
};
int menu_level = 0;
int menu_index = 0;
void printMenu(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menu[menu_level][menu_index]);
lcd.setCursor(0,1);
lcd.print(menu[menu_level][menu_index+1]);
lcd.setCursor(15,0);
lcd.cursor();
lcd.blink_on();
}
void setup() {
Wire.begin(SDA,SCL);
Serial.begin(115200);
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(BUTTON, INPUT_PULLUP);
lcd.init();
lcd.backlight();
printMenu();
}
int lastClk = HIGH;
void loop() {
static long lastMillis;
int newClk = digitalRead(ENCODER_CLK);
if (newClk != lastClk) {
// There was a change on the CLK pin
lastClk = newClk;
int dtValue = digitalRead(ENCODER_DT);
if (newClk == LOW && dtValue == HIGH) {
Serial.println("Rotated clockwise ⏩");
menu_index = menu_index +1;
if(menu_index >= NUM_VOCI-2) menu_index = NUM_VOCI-2;
Serial.println(menu_index);
printMenu();
}
if (newClk == LOW && dtValue == LOW) {
Serial.println("Rotated counterclockwise ⏪");
menu_index = menu_index -1;
if(menu_index <0 ) menu_index = 0;
Serial.println(menu_index);
printMenu();
}
}
if(digitalRead(BUTTON) == LOW ){
if(millis()- lastMillis >200){
Serial.printf("Bottone Premuto con indice %d",menu_index);
}
lastMillis = millis();
}
}