#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TaskScheduler.h>
// ========================= //
// CẤU HÌNH CHÂN & BIẾN
// ========================= //
#define MQ2_PIN 34 // ADC chân input-only của ESP32
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Khai báo Task
void readMQ2();
void updateLCD();
// Tạo Task
Task tReadMQ2(500, TASK_FOREVER, &readMQ2); // đọc MQ2 mỗi 500ms
Task tUpdateLCD(1000, TASK_FOREVER, &updateLCD); // update LCD mỗi 1s
Scheduler runner;
int mq2Value = 0;
// ========================= //
// SETUP
// ========================= //
void setup() {
Serial.begin(115200);
// LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("MQ2 Sensor Init");
// Thêm task
runner.addTask(tReadMQ2);
runner.addTask(tUpdateLCD);
// Bắt đầu task
tReadMQ2.enable();
tUpdateLCD.enable();
delay(1000);
lcd.clear();
}
// ========================= //
// TASK ĐỌC MQ-2
// ========================= //
void readMQ2() {
mq2Value = analogRead(MQ2_PIN);
// In ra Serial để kiểm tra
Serial.print("MQ2 Value: ");
Serial.println(mq2Value);
}
// ========================= //
// TASK CẬP NHẬT LCD
// ========================= //
void updateLCD() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MQ2 Gas Value:");
lcd.setCursor(0, 1);
lcd.print(mq2Value);
}
// ========================= //
// LOOP
// ========================= //
void loop() {
runner.execute();
}