#include <Arduino_FreeRTOS.h>
#include <semphr.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define LED_VERDE 9
#define LED_AMARILLO 10
#define LED_ROJO 11
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
QueueHandle_t colaTemperaturas;
void TareaControlTemperatura(void *pvParameters);
void setup() {
Serial.begin(9600);
sensors.begin();
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_AMARILLO, OUTPUT);
pinMode(LED_ROJO, OUTPUT);
colaTemperaturas = xQueueCreate(1, sizeof(float));
if (colaTemperaturas != NULL) {
xTaskCreate(TareaControlTemperatura, "Control Temp", 128, NULL, 1, NULL);
}
}
void loop() {
// Intencionalmente vacío.
}
void TareaControlTemperatura(void *pvParameters) {
for (;;) {
sensors.requestTemperatures();
float temperatura = sensors.getTempCByIndex(0);
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO, LOW);
if (temperatura < 25.0) {
digitalWrite(LED_VERDE, HIGH);
} else if (temperatura >= 25.0 && temperatura < 30.0) {
digitalWrite(LED_AMARILLO, HIGH);
} else {
digitalWrite(LED_ROJO, HIGH);
Serial.println("Alarma: ACTIVADA debido a alta temperatura");
}
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
Loading
ds18b20
ds18b20