// ESP32 Code
#include <ST7032_asukiaaa.h>

ST7032_asukiaaa lcd;

// Флаги нажатия кнопок
volatile bool flag_S1 = false; // Увеличить (Increase)
volatile bool flag_S2 = false; // Уменьшить (Decrease)

// Буфер для приёма числа. 
// 2^10 = 1024 (4 цифры). Нужно 4 символа + '\0' = 5 байт.
char recvBuf[5] = "   0";

// 🔹 Обработчики прерываний
void IRAM_ATTR onS1() { flag_S1 = true; }  // Кнопка S1: Увеличить
void IRAM_ATTR onS2() { flag_S2 = true; }  // Кнопка S2: Уменьшить

void setup() {
  // Инициализация LCD
  lcd.begin(16, 2);
  lcd.setContrast(60);
  lcd.print("Val:          "); // Заголовок
  lcd.setCursor(0, 1);
  lcd.print("Cmd: WAIT     ");
  
  // 🔹 UART для связи с ESP8266
  // Serial1: RX=16, TX=17
  Serial1.begin(9600, SERIAL_8N1, 16, 17); 
  
  // 🔹 Настройка кнопок
  pinMode(5, INPUT_PULLUP);  // S1
  pinMode(18, INPUT_PULLUP); // S2
  
  attachInterrupt(digitalPinToInterrupt(5), onS1, FALLING);
  attachInterrupt(digitalPinToInterrupt(18), onS2, FALLING);
}

void loop() {
  // 🔹 Приём данных от ESP8266
  // Ожидаем 4 байта данных (так как формат %4ld)
  if (Serial1.available() >= 4) {
    for (int i = 0; i < 4; i++) {
      recvBuf[i] = Serial1.read();
    }
    recvBuf[4] = '\0';  // Завершающий нуль
    
    // Вывод на дисплей
    // Показываем принятое число (например, "1024")
    lcd.setCursor(0, 0);
    lcd.print("Val:");
    lcd.setCursor(4, 0);
    lcd.print(recvBuf);
  }
  
  // 🔹 Обработка кнопки S1 → команда "Увеличить n"
  if (flag_S1) {
    Serial1.write('I'); // Отправляем символ I (Increase)
    
    lcd.setCursor(0, 1);
    lcd.print("Cmd: INC      "); // Показываем действие
    flag_S1 = false;
  }
  
  // 🔹 Обработка кнопки S2 → команда "Уменьшить n"
  if (flag_S2) {
    Serial1.write('D'); // Отправляем символ D (Decrease)
    
    lcd.setCursor(0, 1);
    lcd.print("Cmd: DEC      "); // Показываем действие
    flag_S2 = false;
  }
  
  delay(20); // Антидребезг и стабильность цикла
}