/*FreeRTOS com display LCD e sensor de temperatura e umidade DHT11*/
#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;
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));
xTaskCreate(lerSensor, "Ler sensor DHT11", 2048, NULL, 2, NULL);
xTaskCreate(printLCD, "Imprime no LCD", 2048, NULL, 1, NULL);
}
void loop() {
}
void lerSensor(void *parametro){
while(true){
float h = dht.readHumidity();
float t = dht.readTemperature();
xQueueOverwrite(umidade, &h);
xQueueOverwrite(temperatura, &t);
vTaskDelay(300/portTICK_PERIOD_MS);
}
}
void printLCD(void *parametro){
float umid = 0;
float temp = 0;
while(true){
if(xQueueReceive(umidade, &umid, 200)){
lcd.setCursor(0, 0);
lcd.print(LIMPA_LINHA);
lcd.setCursor(0, 0);
lcd.print(" Umid = ");
lcd.print(umid);
lcd.print(" %");
}
if(xQueueReceive(temperatura, &temp, 200)){
lcd.setCursor(0, 1);
lcd.print(LIMPA_LINHA);
lcd.setCursor(0, 1);
lcd.print(" Temp = ");
lcd.print(temp);
lcd.print(" oC");
}
}
}