#include "LiquidCrystal_I2C_Menu_Btns.h"
#include <Wire.h>
#include <SD.h>
#include <EEPROM.h>
LiquidCrystal_I2C_Menu_Btns lcd(0x27, 20, 4);
// Пины, к которым подключены кнопки
#define pinLeft 2
#define pinRight 3
#define pinEnter 4
#define pinBack 5 // Back - необязательная кнопка
uint8_t selectedMenuItem;
int brightness = 50;
int _delay = 10;
// Обработчики пунктов меню SetBrightness и SetDelay
// Используются для ввода значений brightness и _delay
void SetBrightness() {
brightness = lcd.inputVal("Input brightness(%)", 0, 100, brightness, 5);
Serial.println(selectedMenuItem);
}
void SetDelay() {
_delay = lcd.inputVal("Input delay(ms)", 0, 20, _delay);
//Serial.println(mkSetDelay);
}
// Объявим перечисление, используемое в качестве ключа пунктов меню
enum {mkBack, mkRoot, mkOptions, mkSetBrightness, mkSetDelay};
// Описание меню
// структура пункта меню: {ParentKey, Key, Caption, [Handler]}
sMenuItem menu[] = {
{mkBack, mkRoot, "Main menu",NULL},
{mkRoot, mkOptions, "Options",NULL},
{mkOptions, mkSetBrightness, "SetBrightness", SetBrightness},
{mkOptions, mkSetDelay, "SetDelay", SetDelay},
{mkOptions, mkBack, "Back", NULL},
{mkRoot, mkBack, "Back", NULL}
};
uint8_t menuLen = sizeof(menu) / sizeof(sMenuItem);
void setup() {
lcd.begin();
Serial.begin(115200);
//Serial.println(menuLen);
lcd.attachButtons(pinLeft, pinRight, pinEnter, pinBack);
}
void loop() {
/*uint8_t*/ selectedMenuItem = lcd.showMenu(menu, menuLen, 1); // Вызываем меню
/* Реакция на выбор пунктов меню SetBrightness и SetDelay реализована
* в функциях-обработчиках.
* При необходимости здесь может располагаться анализ значения selectedMenuItem
* для пунктов, не имеющих обработчиков:*/
// if (selectedMenuItem == mkOptions) { Serial.println(selectedMenuItem);}
//Serial.println();
//Serial.println(selectedMenuItem);
}