#include <GyverOLED.h>
#include <EncButton.h>
#include "GyverOLEDMenu.h"
#define ID 1
#define FIRST 1
#define COUNT 1
#define WAITING_LCD 5
#define WAITING_ANSWER 2
#define WAITING_RFID 7
#define MEM_ADDR 200
#define TIMER_DEVICE_RESPONSE 1000
#define EB_FAST_TIME 120
#define SERIAL_485 Serial
EncButton eb(6, 7, 5, INPUT_PULLUP);
GyverOLED<SSD1306_128x64> oled;
OledMenu<9, GyverOLED<SSD1306_128x64>> menu(&oled);
uint8_t newId = ID;
int waitingLCD = WAITING_LCD;
int waitingAnswer = WAITING_ANSWER;
int waitingRfid = WAITING_RFID;
int countLocks = COUNT;;
int firstNumber = FIRST;;
int startMemoryAddr = MEM_ADDR;
void setup() {
SERIAL_485.begin(9600);
SERIAL_485.setTimeout(500);
Serial.println("Start");
oled.init();
Wire.setClock(400000L);
oled.clear();
oled.update();
menu.onChange(onItemChange, true);
menu.addItem(PSTR("ID"), GM_N_BYTE(1), &newId, GM_N_BYTE(0), GM_N_BYTE(40)); //0
menu.addItem(PSTR("First locker"), GM_N_INT(1), &firstNumber, GM_N_INT(1), GM_N_INT(5000));
menu.addItem(PSTR("Count lockers"), GM_N_INT(1), &countLocks, GM_N_INT(1), GM_N_INT(16));
menu.addItem(PSTR("Waiting LCD"), GM_N_INT(1), &waitingLCD, GM_N_INT(1), GM_N_INT(10)); //3
menu.addItem(PSTR("Waiting Answer"), GM_N_INT(1), &waitingAnswer, GM_N_INT(1), GM_N_INT(10));
menu.addItem(PSTR("Waiting Rfid"), GM_N_INT(1), &waitingRfid, GM_N_INT(1), GM_N_INT(20)); //5
menu.addItem(PSTR("Memory Addr"), GM_N_INT(1), &startMemoryAddr, GM_N_INT(1), GM_N_INT(5000));
menu.addItem(PSTR("WRITE")); // 7
menu.addItem(PSTR(""));
menu.showMenu(true);
eb.attach(cb);
}
void onItemChange(const int index, const void* val, const byte valType) {
if (valType == VAL_ACTION) {
if (index == 7) {
Serial.println("click");
sendConfig(1);
}
}
}
void cb() {
switch (eb.action()) {
case EB_TURN:
if (eb.dir() == 1) {
menu.selectPrev(eb.fast());
} else {
menu.selectNext(eb.fast());
}
break;
case EB_CLICK:
menu.toggleChangeSelected();
break;
}
}
uint8_t getIdDevice(){
return newId;
}
void loop() {
eb.tick();
}