#include #include #include #include #include #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 // OLED Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Pines #define ONE_WIRE_BUS D0 #define BUTTON_PIN D7 #define LED_PIN D6 // Sensor temperatura OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); // Variables de control float temperature = 0; bool ledEncendido = false; bool parpadeando = false; bool esperandoNuevaPulsacion = false; unsigned long tiempoInicioParpadeo = 0; unsigned long ultimoParpadeo = 0; const float TEMP_LIMITE = 30.0; void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT); digitalWrite(LED_PIN, LOW); sensors.begin(); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println("OLED no encontrada"); while (true); } display.setTextSize(2); display.setTextColor(SSD1306_WHITE); } void loop() { leerTemperatura(); gestionarBoton(); gestionarLED(); mostrarPantalla(); } void leerTemperatura() { sensors.requestTemperatures(); temperature = sensors.getTempCByIndex(0); Serial.print("Temp: "); Serial.println(temperature); } void gestionarBoton() { if (esperandoNuevaPulsacion) return; if (temperature >= TEMP_LIMITE) return; if (digitalRead(BUTTON_PIN) == HIGH) { ledEncendido = true; digitalWrite(LED_PIN, HIGH); Serial.println("LED ENCENDIDO"); delay(300); } } void gestionarLED() { if (ledEncendido && temperature >= TEMP_LIMITE && !parpadeando) { parpadeando = true; tiempoInicioParpadeo = millis(); Serial.println("Inicia parpadeo"); } if (parpadeando) { if (millis() - ultimoParpadeo >= 500) { ultimoParpadeo = millis(); digitalWrite(LED_PIN, !digitalRead(LED_PIN)); } if (millis() - tiempoInicioParpadeo >= 5000) { digitalWrite(LED_PIN, LOW); parpadeando = false; ledEncendido = false; esperandoNuevaPulsacion = true; Serial.println("Parpadeo terminado"); } } if (temperature < TEMP_LIMITE) { esperandoNuevaPulsacion = false; } } void mostrarPantalla() { display.clearDisplay(); display.setCursor(0, 10); display.print("Temp:"); display.setCursor(0, 35); display.print(temperature); display.print(" C"); display.display(); }