#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 4 // Pin data DHT22
#define DHTTYPE DHT22 // Tipe sensor DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
float suhu = 0.0, kelembaban = 0.0;
// Task untuk membaca sensor DHT22 (Core 0)
void TaskReadDHT22(void *pvParameters) {
while (1) {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
if (!isnan(temp) && !isnan(hum)) {
suhu = temp;
kelembaban = hum;
} else {
Serial.println("Gagal membaca DHT22!");
}
vTaskDelay(2000 / portTICK_PERIOD_MS); // Delay 2 detik
}
}
// Task untuk menampilkan data ke LCD (Core 1)
void TaskDisplayLCD(void *pvParameters) {
while (1) {
lcd.clear();
if (!isnan(suhu) && !isnan(kelembaban)) {
lcd.setCursor(0, 0);
lcd.print("Suhu: "); lcd.print(suhu); lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Kelembaban: "); lcd.print(kelembaban); lcd.print(" %");
} else {
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
}
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
}
void setup() {
Serial.begin(115200);
dht.begin();
lcd.init();
lcd.backlight();
delay(2000); // Tambahkan delay agar DHT22 siap
xTaskCreatePinnedToCore(TaskReadDHT22, "TaskReadDHT22", 10000, NULL, 1, NULL, 0);
xTaskCreatePinnedToCore(TaskDisplayLCD, "TaskDisplayLCD", 10000, NULL, 1, NULL, 1);
}
void loop() {
// Kosong karena semua pekerjaan dilakukan dalam task FreeRTOS
}