//#include <Arduino.h>
#include "WiFiManager.h"
//#include "mqttClient.h"
#include "LCDDisplay.h"
#include "SensorHandler.h"
// Pines de LED y botones
#define LED_WIFI_PIN 2
#define LED_OPERATOR_MODE_PIN 15
#define BUTTON_OPERATOR_MODE_PIN 4
#define BUTTON_NEXT_SENSOR_PIN 16
#define BUTTON_PREV_SENSOR_PIN 17
WiFiManager wifiManager(LED_WIFI_PIN, LED_OPERATOR_MODE_PIN);
//mqttClient mqttClient;
LCDDisplay lcddisplay;
SensorHandler sensorHandler;
// Variables de control de tiempo y navegación
unsigned long lastSensorRead = 0;
unsigned long sensorInterval = 1000; // Leer cada segundo
int currentView = 0; // Almacena la vista actual (0 a 3)
unsigned long lastDebounceNext = 0;
unsigned long lastDebouncePrev = 0;
const unsigned long debounceDelay = 200; // Retardo para evitar rebotes de botones+
void setup() {
Serial.begin(115200);
// Configurar los pines
pinMode(LED_WIFI_PIN, OUTPUT);
pinMode(LED_OPERATOR_MODE_PIN, OUTPUT);
pinMode(BUTTON_OPERATOR_MODE_PIN, INPUT_PULLUP);
pinMode(BUTTON_NEXT_SENSOR_PIN, INPUT_PULLUP);
pinMode(BUTTON_PREV_SENSOR_PIN, INPUT_PULLUP);
// Iniciar módulos
displayManager.init();
sensorHandler.init();
wifiManager.init();
//mqttClient.init();
// Configuración de WiFi y MQTT
if (digitalRead(BUTTON_OPERATOR_MODE_PIN) == LOW) {
wifiManager.startAccessPoint("911", "123456789");
} else {
wifiManager.connectToWiFi();
}
}
void loop() {
// Conexión WiFi
wifiManager.update();
// Conexión MQTT
if (wifiManager.isConnected()) {
//mqttClient.update();
}
// Manejo de botones de navegación
handleNavigationButtons();
// Lectura de sensores y envío cada segundo
if (millis() - lastSensorRead > sensorInterval) {
lastSensorRead = millis();
sensorHandler.readSensors();
String payload = sensorHandler.getJSONPayload();
if (//mqttClient.isConnected()) {
//mqttClient.publish("esp32/data", payload.c_str());
}
displayManager.showData(currentView); // Actualizar display con la vista actual
}
}
void handleNavigationButtons() {
// Lógica para botón siguiente
if (digitalRead(BUTTON_NEXT_SENSOR_PIN) == LOW && (millis() - lastDebounceNext > debounceDelay)) {
lastDebounceNext = millis();
currentView = (currentView + 1) % 4; // Cambia a la siguiente vista (4 vistas en total: sensores 1, 2, 3 y promedio)
displayManager.setView(currentView); // Actualizar vista en DisplayManager
}
// Lógica para botón anterior
if (digitalRead(BUTTON_PREV_SENSOR_PIN) == LOW && (millis() - lastDebouncePrev > debounceDelay)) {
lastDebouncePrev = millis();
currentView = (currentView - 1 + 4) % 4; // Cambia a la vista anterior
displayManager.setView(currentView); // Actualizar vista en DisplayManager
}
}