#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "dhtnew.h"
DHTNEW dht22(14);
#define AC 23
#define HEAT 22
int result =-8;
int lastResult =0;
float temp = 19, hum;
uint16_t threshold_high = 20;
uint16_t threshold_low = 18;
void DHT_task(void *arg);
void setup() {
pinMode(AC, OUTPUT);
pinMode(HEAT, OUTPUT);
Serial.begin(115200);
dht22.powerUp();
xTaskCreate(DHT_task, "Task1", 4096, 0, 5, 0);
}
void loop() {
// Nothing here - all work done in DHT_task
}
void DHT_task(void *arg){
while(true){
result = dht22.read();
if(!result){
temp = dht22.getTemperature();
hum = dht22.getHumidity();
Serial.printf("Temp: %.1f°C, Hum: %.1f%%\n", temp, hum);
if(temp >= threshold_high){
digitalWrite(AC, HIGH);
digitalWrite(HEAT, LOW);
}
else if(temp <= threshold_low){
digitalWrite(AC, LOW);
digitalWrite(HEAT, HIGH);
}
else {
digitalWrite(AC, LOW);
digitalWrite(HEAT, LOW);
}
result = -8;
}
else if(result != lastResult){
Serial.print("DHT Error: ");
Serial.println(result);
lastResult = result;
}
vTaskDelay(2000/portTICK_PERIOD_MS);
}
}