#define CLK 2
#define DT 3
#define SW 4
#define LINES 4
#define SETTINGS_AMOUNT 10
#include <GyverEncoder.h>
Encoder enc( CLK,DT,SW);
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
int val1=0;
int val2=0;
int val3=0;
int val4=0;
int vals[SETTINGS_AMOUNT];
int8_t arrowPos =0;
int8_t screenPos=0;
const char *settingsNames[]={
"Speed",
"Temp",
"Mode",
"Direction",
"Limit",
"Color",
"Timeout",
"Light",
"Parameter1",
"Parameter2",
};
int val=0;
void printGUI(){
lcd.clear();
screenPos =arrowPos/LINES;
for(byte i=0;i<LINES; i++) {
lcd.setCursor(0,i);
if(arrowPos==LINES*screenPos+i) lcd.write(126);
else lcd.write(32);
if(LINES*screenPos+i==SETTINGS_AMOUNT) break;
lcd.print(settingsNames[LINES*screenPos+i]);
lcd.print(":");
lcd.print(vals[LINES*screenPos+i]);
}
}
void setup() {
Serial.begin(9600);
enc.setType(TYPE2);
lcd.init();
lcd.backlight();
printGUI();
}
void loop() {
// put your main code here, to run repeatedly:
enc.tick();
if(enc.isTurn()){
lcd.clear();
int increment=0;
if(enc.isRight()) increment=1;
if(enc.isLeft()) increment=-1;
arrowPos+=increment;
arrowPos=constrain(arrowPos,0,SETTINGS_AMOUNT-1);
increment=0;
if(enc.isRightH()) increment=1;
if(enc.isLeftH()) increment=-1;
vals[arrowPos] +=increment;
printGUI();
}
}