/*FreeRTOS com display LCD e sensor de temperatura e umidade DHT11*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHT_SENSOR1_PIN 5
#define DHT_SENSOR2_PIN 18
#define DHT_SENSOR3_PIN 19
#define DHTTYPE DHT22
#define Empty_line " "
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht1(DHT_SENSOR1_PIN, DHTTYPE);
DHT dht2(DHT_SENSOR2_PIN, DHTTYPE);
DHT dht3(DHT_SENSOR3_PIN, DHTTYPE);
float h1, h2, h3, t1, t2, t3;
QueueHandle_t humidity;
QueueHandle_t temperature;
void setup() {
// put your setup code here, to run once:
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
pinMode(23, OUTPUT);
lcd.init();
lcd.backlight();
lcd.clear();
dht1.begin(); dht2.begin(); dht3.begin();
humidity = xQueueCreate(1, sizeof(float));
temperature = xQueueCreate(1, sizeof(float));
xTaskCreate(ReadSensor01, "Ler sensor DHT11", 2048, NULL, 2, NULL);
xTaskCreate(ReadSensor02, "Ler sensor DHT11", 2048, NULL, 2, NULL);
xTaskCreate(ReadSensor03, "Ler sensor DHT11", 2048, NULL, 2, NULL);
xTaskCreate(Display, "Imprime no LCD", 2048, NULL, 1, NULL);
}
void loop() {
}
void ReadSensor01(void *parameter){
while(true){
digitalWrite(2, HIGH);
float h = dht1.readHumidity();
float t = dht1.readTemperature();
xQueueOverwrite(humidity, &h);
xQueueOverwrite(temperature, &t);
digitalWrite(2, LOW);
vTaskDelay(2000/portTICK_PERIOD_MS);
}
}
void ReadSensor02(void *parameter){
while(true){
digitalWrite(4, HIGH);
float h = dht2.readHumidity();
float t = dht2.readTemperature();
xQueueOverwrite(humidity, &h);
xQueueOverwrite(temperature, &t);
digitalWrite(4, LOW);
vTaskDelay(3000/portTICK_PERIOD_MS);
}
}
void ReadSensor03(void *parameter){
while(true){
digitalWrite(23, HIGH);
float h = dht3.readHumidity();
float t = dht3.readTemperature();
xQueueOverwrite(humidity, &h);
xQueueOverwrite(temperature, &t);
digitalWrite(23, LOW);
vTaskDelay(2500/portTICK_PERIOD_MS);
}
}
void Display(void *parameter){
float humi = 0;
float temp = 0;
while(true){
if(xQueueReceive(humidity, &humi, 200)){
lcd.setCursor(0, 0);
lcd.print(Empty_line);
lcd.setCursor(0, 0);
lcd.print(" Humi = ");
lcd.print(humi);
lcd.print(" %");
}
if(xQueueReceive(temperature, &temp, 200)){
lcd.setCursor(0, 1);
lcd.print(Empty_line);
lcd.setCursor(0, 1);
lcd.print(" Temp = ");
lcd.print(temp);
lcd.print(" oC");
}
}
}