#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHT_SENSOR_PIN 2
#define DHTTYPE DHT22
#define LIMPA_LINHA " "
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHT_SENSOR_PIN, DHTTYPE);
QueueHandle_t umidade;
QueueHandle_t temperatura;
TimerHandle_t timer1;
void setup() {
// put your setup code here, to run once:
lcd.init();
lcd.backlight();
lcd.clear();
dht.begin();
umidade = xQueueCreate(1, sizeof(float));
temperatura = xQueueCreate(1, sizeof(float));
timer1 = xTimerCreate("Timer1", pdMS_TO_TICKS(100), pdTRUE, NULL, lerSensor);
xTimerStart(timer1, 0);
xTaskCreate(printLCD, "Imprime no LCD", 2048, NULL, 1, NULL);
}
void loop() {
}
void lerSensor(TimerHandle_t timer1){
float h = dht.readHumidity();
float t = dht.readTemperature();
xQueueOverwrite(umidade, &h);
xQueueOverwrite(temperatura, &t);
}
void printLCD(void *parametro){
float umid = 0;
float temp = 0;
while(true){
if(xQueueReceive(umidade, &umid, portMAX_DELAY)){
lcd.setCursor(0, 0);
lcd.print(LIMPA_LINHA);
lcd.setCursor(0, 0);
lcd.print(" Umid = ");
lcd.print(umid);
lcd.print(" %");
}
if(xQueueReceive(temperatura, &temp, portMAX_DELAY)){
lcd.setCursor(0, 1);
lcd.print(LIMPA_LINHA);
lcd.setCursor(0, 1);
lcd.print(" Temp = ");
lcd.print(temp);
lcd.print(" oC");
}
//vTaskDelay(pdMS_TO_TICKS(100));
}
}