#include <U8g2.h>
#include <DHT.h>
#include <Adafruit_Sensor.h>
#include <Preferences.h>
// Pines de Botones
#define BTN1 35
#define BTN2 34
#define SENSOR_TEMP 23
#define LED 25
//Maquina de estados
int Maquina;
//Estados
#define PantallaInit 39
#define ConfirmBTN1 40
#define Umbral 41
#define ConfirmBTN2 42
#define Confirmar_Subir 56
//Variables
int umb;
float temp;
unsigned long Time = 0;
int VerificacionUP;
int VerificacionDown;
Preferences preferences;
DHT dht(SENSOR_TEMP, DHT11);
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE);
void setup() {
// put your setup code here, to run once:
pinMode(BTN1, INPUT_PULLUP);
pinMode(BTN2, INPUT_PULLUP);
Serial.begin(9600);
u8g2.begin();
dht.begin();
preferences.begin("my-app", false);
umb = preferences.getInt("Umbralsito", 24);
Maquina = PantallaInit;
}
void loop() {
// put your main code here, to run repeatedly:
// unsigned long Millis = millis();
temp = dht.readTemperature();
switch (Maquina) {
case PantallaInit:
INIT();
if (digitalRead(BTN1) == LOW && digitalRead(BTN2) == HIGH) {
Maquina = ConfirmBTN1;
Time = millis();
}
// Serial.println("INIT");
break;
case ConfirmBTN1:
// Serial.println("ConfirmBTN1");
INIT();
if (digitalRead(BTN1) == HIGH && millis() - Time >= 5000 && digitalRead(BTN2) == HIGH) {
Maquina = Umbral;
}
if (digitalRead(BTN1) == HIGH && millis() - Time <= 5000) {
Maquina = PantallaInit;
}
break;
case Umbral:
Serial.println("Umbral");
Time = millis();
Pantalla_Umbral();
VerificacionDown = 0;
VerificacionUP = 0;
if (digitalRead(BTN1) == LOW && VerificacionUP == 0) {
Maquina = Confirmar_Subir;
VerificacionUP = 1;
}
if (digitalRead(BTN2) == LOW) {
Maquina = ConfirmBTN2;
}
break;
case Confirmar_Subir:
if (digitalRead(BTN1) == HIGH) {
umb++;
Maquina = Umbral;
}
break;
case ConfirmBTN2:
//Serial.println("ConfirmBTN2");
Pantalla_Umbral();
if (digitalRead(BTN2) == HIGH && millis() - Time >= 5000 && digitalRead(BTN1) == HIGH) {
Maquina = PantallaInit;
preferences.putInt("Umbralsito", umb); // Guardar el umbral
}
if (digitalRead(BTN2) == HIGH && millis() - Time <= 5000 && VerificacionDown == 0) {
umb--;
Maquina = Umbral;
VerificacionDown=1;
}
break;
}
}
void Pantalla_Umbral() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.setCursor(32, 30);
u8g2.print(umb);
u8g2.drawStr(55, 30, "°C");
u8g2.drawStr(15, 50, "-");
u8g2.drawStr(100, 50, "+");
u8g2.sendBuffer();
}
void INIT() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.drawStr(4, 15, "TP EEPROM");
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawStr(0, 30, "Temperatura: ");
u8g2.setCursor(80, 30);
u8g2.print(temp);
u8g2.drawStr(110, 30, "°C");
u8g2.drawStr(0, 45, "Umbral:");
u8g2.setCursor(80, 45);
u8g2.print(umb);
u8g2.drawStr(110, 45, "°C");
u8g2.sendBuffer();
}