#define CLK 3
#define DT 2
#define SW 1
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8, 7, 6, 5, 4);
int lastvalueCLK = HIGH;
//MENUE
int MainMenue = 0;
const int Menue_count = 7;
int MainVAR_0 = 10, MainVAR_1 = 20, MainVAR_2 = 30, MainVAR_3 = 40;
const int MainFIX_0 = 74, MainFIX_1 = 55;
int MainSEG_0 = 2482;
int pos_ol = 0;
int edit_var = 0;
byte ol[] = {
0b11111,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup()
{
lcd.createChar(1, ol);
lcd.begin(20, 4);
pinMode(3, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
RefreshDisplay();
}
void loop()
{
Encoder();
}
void RefreshDisplay()
{
switch(MainMenue)
{
case 0:
lcd.setCursor(3, 0);
lcd.print("- VarMenue_1 -");
lcd.setCursor(9, 2);
if(edit_var == 1) {lcd.setCursor(8, 2); lcd.print(">");}
lcd.print(MainVAR_0);
if(edit_var == 1) {lcd.print("<");}
break;
case 1:
lcd.setCursor(3, 0);
lcd.print("- VarMenue_2 -");
lcd.setCursor(9, 2);
if(edit_var == 1) {lcd.setCursor(8, 2); lcd.print(">");}
lcd.print(MainVAR_1);
if(edit_var == 1) {lcd.print("<");}
break;
case 2:
lcd.setCursor(3, 0);
lcd.print("- VarMenue_3 -");
lcd.setCursor(9, 2);
if(edit_var == 1) {lcd.setCursor(8, 2); lcd.print(">");}
lcd.print(MainVAR_2);
if(edit_var == 1) {lcd.print("<");}
break;
case 3:
lcd.setCursor(3, 0);
lcd.print("- VarMenue_4 -");
lcd.setCursor(9, 2);
if(edit_var == 1) {lcd.setCursor(8, 2); lcd.print(">");}
lcd.print(MainVAR_3);
if(edit_var == 1) {lcd.print("<");}
break;
case 4:
lcd.setCursor(3, 0);
lcd.print("- FixMenue_1 -");
lcd.setCursor(9, 2);
lcd.print(MainFIX_0);
break;
case 5:
lcd.setCursor(3, 0);
lcd.print("- FixMenue_2 -");
lcd.setCursor(9, 2);
lcd.print(MainFIX_1);
break;
case 6:
lcd.setCursor(3, 0);
lcd.print("- SegMenue_1 -");
lcd.setCursor(8, 2);
if(edit_var == 1) {lcd.setCursor(7, 2); lcd.print(">");}
if(MainSEG_0 < 1000) {lcd.print("0");}
if(MainSEG_0 < 100) {lcd.print("0");}
if(MainSEG_0 < 10) {lcd.print("0");}
lcd.print(MainSEG_0);
if(edit_var == 1) {lcd.print("<");}
if(edit_var == 1)
{
lcd.setCursor(7 + pos_ol, 3);
lcd.print("\1");
}
break;
}
}
void Encoder()
{
int newvalueCLK = digitalRead(CLK);
if(lastvalueCLK != newvalueCLK)
{
int valueDT = digitalRead(DT);
lastvalueCLK = newvalueCLK;
if(newvalueCLK == LOW && valueDT == HIGH)
{
if(edit_var == 0 && MainMenue < Menue_count - 1) {MainMenue ++;}
if(edit_var == 1 && MainMenue == 0) {MainVAR_0 ++;}
if(edit_var == 1 && MainMenue == 1) {MainVAR_1 ++;}
if(edit_var == 1 && MainMenue == 2) {MainVAR_2 ++;}
if(edit_var == 1 && MainMenue == 3) {MainVAR_3 ++;}
if(edit_var == 1 && MainMenue == 6)
{
switch(pos_ol)
{
case 1:
if(((MainSEG_0 / 1000) % 10) < 9) {MainSEG_0 += 1000;}
break;
case 2:
if((MainSEG_0 / 1000) % 10 < 9) {MainSEG_0 += 100;}
break;
case 3:
if((MainSEG_0 / 1000) % 10 < 9) {MainSEG_0 += 10;}
break;
case 4:
if(MainSEG_0 % 10 < 9) {MainSEG_0 += 1;}
break;
}
}
lcd.clear();
RefreshDisplay();
}
if(newvalueCLK == LOW && valueDT == LOW)
{
if(edit_var == 0 && MainMenue > 0) {MainMenue --;}
if(edit_var == 1 && MainMenue == 0) {MainVAR_0 --;}
if(edit_var == 1 && MainMenue == 1) {MainVAR_1 --;}
if(edit_var == 1 && MainMenue == 2) {MainVAR_2 --;}
if(edit_var == 1 && MainMenue == 3) {MainVAR_3 --;}
if(edit_var == 1 && MainMenue == 6)
{
switch(pos_ol)
{
case 1:
if((MainSEG_0 / 1000) % 10 > 0) {MainSEG_0 -= 1000;}
break;
case 2:
if((MainSEG_0 / 100) % 10 > 0) {MainSEG_0 -= 100;}
break;
case 3:
if((MainSEG_0 / 10) % 10 > 0) {MainSEG_0 -= 10;}
break;
case 4:
if(MainSEG_0 % 10 > 0) {MainSEG_0 -= 1;}
break;
}
}
lcd.clear();
RefreshDisplay();
}
}
if(digitalRead(SW) == LOW && MainMenue != 4 && MainMenue != 5)
{
if(edit_var == 0) {edit_var = 1;}
else if(edit_var == 1 && MainMenue != 6) {edit_var = 0;}
if(MainMenue == 6) {pos_ol ++;}
if(pos_ol > 4) {pos_ol = 0; edit_var = 0;}
lcd.clear();
RefreshDisplay();
while(digitalRead(SW) == LOW) {}
}
}