#include <ST7032_asukiaaa.h>

ST7032_asukiaaa lcd;

// Флаги нажатия кнопок (volatile для работы с прерываниями)
volatile bool flag_S1 = false;
volatile bool flag_S2 = false;

// Буфер для приёма числа (3 цифры + завершающий \0)
char recvBuf[4] = "  0";

// 🔹 Обработчики прерываний
void IRAM_ATTR onS1() { flag_S1 = true; }  // Кнопка вверх
void IRAM_ATTR onS2() { flag_S2 = true; }  // Кнопка вниз

void setup() {
  // Инициализация LCD
  lcd.begin(16, 2);
  lcd.setContrast(60);
  lcd.print("Count:      ");
  lcd.setCursor(0, 1);
  lcd.print("Mode: UP    ");
  
  // 🔹 UART для связи с ESP8266
  // Serial0 — это основной порт (USB), используем Serial1 (GPIO16/17)
  Serial1.begin(9600, SERIAL_8N1, 16, 17); // RX=16, TX=17 — измените под вашу схему!
  
  // 🔹 Настройка кнопок (предполагаем: S1=GPIO5, S2=GPIO4)
  pinMode(5, INPUT_PULLUP);  // S1
  pinMode(18, INPUT_PULLUP);  // S2
  
  attachInterrupt(digitalPinToInterrupt(5), onS1, FALLING);
  attachInterrupt(digitalPinToInterrupt(18), onS2, FALLING);
}

void loop() {
  // 🔹 Приём данных от ESP8266
  if (Serial1.available() >= 3) {
    for (int i = 0; i < 3; i++) {
      recvBuf[i] = Serial1.read();
    }
    recvBuf[3] = '\0';  // Завершающий нуль для строки
    
    // Вывод на дисплей (позиция 7, строка 0)
    lcd.setCursor(7, 0);
    lcd.print(recvBuf);
  }
  
  // 🔹 Обработка кнопки S1 → команда "считать вверх"
  if (flag_S1) {
    Serial1.write('U');
    lcd.setCursor(0, 1);
    lcd.print("Mode: UP    ");  // Очищаем строку пробелами
    flag_S1 = false;
  }
  
  // 🔹 Обработка кнопки S2 → команда "считать вниз"
  if (flag_S2) {
    Serial1.write('D');
    lcd.setCursor(0, 1);
    lcd.print("Mode: DOWN  ");
    flag_S2 = false;
  }
  
  delay(20); // Небольшая задержка для стабильности
}