#define DecBtnPin 12 // blue button
#define IncBtnPin 11 // green button
#include <LiquidCrystal_I2C.h> // подключаем библу
// адрес дисплея 0x3f или 0x27
// размер дисплея 16x2 (поддерживаются и другие, например 20x4)
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес, столбцов, строк
short int CursorPosition = 1;
short int PositionInList = 0; // 0 - позиция курсора на задачае 1. Red led
void setup() {
lcd.init(); // инициализация
lcd.backlight(); // включить подсветку
lcd.setCursor(6, 0); // столбец 1 строка 0
lcd.print("Menu");
lcd.setCursor(0, 1); // столбец 4 строка 1
lcd.print("1. Red led");
lcd.setCursor(0, CursorPosition);
lcd.blink();
Serial.begin(9600);
// set pins to input with a pullup
pinMode(DecBtnPin, INPUT_PULLUP);
pinMode(IncBtnPin, INPUT_PULLUP);
}
int btnTimer = 0;
bool IncBtn = 0, DecBtn = 0;
bool flag = 0;
void loop() {
IncBtn = !digitalRead(IncBtnPin);
DecBtn = !digitalRead(DecBtnPin);
if (IncBtn && !flag && millis() - btnTimer > 200) {
flag = true;
btnTimer = millis();
UpCursorPosition();
}
if (!IncBtn && flag && millis() - btnTimer > 200) {
flag = false;
btnTimer = millis();
}
if (DecBtn && !flag && millis() - btnTimer > 200) {
flag = true;
btnTimer = millis();
DownCursorPosition();
}
if (!DecBtn && flag && millis() - btnTimer > 200) {
flag = false;
btnTimer = millis();
}
}
void UpCursorPosition(void) {
PositionInList++;
if (PositionInList > 6){
PositionInList = 0;
}
display_current_tasks();
}
void DownCursorPosition(void) {
PositionInList--;
if (PositionInList < 0){
PositionInList = 6;
}
display_current_tasks();
}
void display_current_tasks(){
switch(PositionInList){
case 0:
display_tasks_0();
break;
case 1:
CursorPosition = 0;
display_tasks_1();
break;
case 2:
CursorPosition = 1;
display_tasks_1();
break;
case 3:
CursorPosition = 0;
display_tasks_2();
break;
case 4:
CursorPosition = 1;
display_tasks_2();
break;
case 5:
CursorPosition = 0;
display_tasks_3();
break;
case 6:
CursorPosition = 1;
display_tasks_3();
break;
}
}
void display_tasks_0(){
lcd.clear();
lcd.setCursor(6, 0); // столбец 1 строка 0
lcd.print("Menu");
lcd.setCursor(0, 1); // столбец 4 строка 1
lcd.print("1. Red led");
lcd.setCursor(0, 1);
}
void display_tasks_1(){
lcd.clear();
lcd.setCursor(0, 0); // столбец 1 строка 0
lcd.print("1. Red led");
lcd.setCursor(0, 1); // столбец 4 строка 1
lcd.print("2. Yellow led");
lcd.setCursor(0, CursorPosition);
}
void display_tasks_2(){
lcd.clear();
lcd.setCursor(0, 0); // столбец 1 строка 0
lcd.print("2. Yellow led");
lcd.setCursor(0, 1); // столбец 4 строка 1
lcd.print("3. Blue led");
lcd.setCursor(0, CursorPosition);
}
void display_tasks_3(){
lcd.clear();
lcd.setCursor(0, 0); // столбец 1 строка 0
lcd.print("3. Blue led");
lcd.setCursor(0, 1); // столбец 4 строка 1
lcd.print("4. Buzzer");
lcd.setCursor(0, CursorPosition);
}