Untitled
unknown
plain_text
7 months ago
4.7 kB
5
Indexable
#include "DHT.h"
//LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
// Khai báo chân kết nối
#define DHT11Pin 2
#define DHTType DHT11
#define PIR_PIN 3
#define LED_PIN1 7
#define LED_PIN2 8
#define LED_PIN3 9
#define buzzer 6
DHT dht(DHT11Pin, DHT11);
LiquidCrystal_I2C lcd(0X27, 16, 2);
SoftwareSerial BT(10, 11);
// Biến lưu temp, humi, gas
float humidity, tempC;
const int mq02Pin = A0;
// Cảm biến PIR
int calibrationTime = 10;
long unsigned int lowIn;
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
//bluetooth
bool commandReady = false;
String inputString = "";
void setup() {
Serial.begin(9600);
BT.begin(9600);
lcd.init();
lcd.backlight();
dht.begin();
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
pinMode(LED_PIN3, OUTPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(PIR_PIN, LOW);
Serial.print("Đang hiệu chỉnh cảm biến...");
for (int i = 0; i < calibrationTime; i++) {
Serial.print(".");
delay(500);
}
Serial.println("\nCảm biến đã sẵn sàng!");
}
void loop() {
readSensors();
// updateDisplay();
handleBluetooth();
checkMotion();
delay(500);
}
void readSensors() {
humidity = dht.readHumidity();
tempC = dht.readTemperature();
int mq02Value = analogRead(mq02Pin);
BT.print("*G");
BT.println(mq02Value);
// Serial.print("Độ ẩm: "); Serial.print(humidity);
// Serial.print("% - Nhiệt độ: "); Serial.print(tempC);
// Serial.println("°C");
// Serial.print("Giá trị MQ-02: ");
// Serial.println(mq02Value);
if (mq02Value >= 200) {
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
lcd.clear();
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(buzzer, LOW);
readSensors();
} else {
digitalWrite(buzzer, LOW);
updateDisplay();
}
}
void updateDisplay() {
lcd.setCursor(2, 0);
lcd.print("Humi:" + String(humidity) + "%");
lcd.setCursor(0, 1);
lcd.print("TempC:" + String(tempC) + "*C");
//send to mobile
BT.print("*H");
BT.println(humidity);
BT.print("*T");
BT.println(tempC);
}
void handleBluetooth() {
while (BT.available()) {
char c = BT.read();
if (c == '\n') {
commandReady = true;
} else if (c != '\r') {
inputString += c;
}
}
if (commandReady) {
inputString.trim();
// Serial.println(); // Thêm xuống dòng trước khi in lệnh
// Serial.print("Nhận lệnh: ["); Serial.print(inputString); Serial.println("]");
processCommand(inputString);
inputString = "";
commandReady = false;
}
}
void checkMotion() {
if (digitalRead(PIR_PIN) == HIGH) {
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, HIGH);
//send to mobile
BT.print("*L");
BT.println("ON");
BT.print("*A");
BT.println("ON");
BT.print("*F");
BT.println("ON");
if (lockLow) {
lockLow = false;
Serial.println(" Phát hiện chuyển động!");
delay(50);
}
takeLowTime = true;
}
else {
if (takeLowTime) {
lowIn = millis();
takeLowTime = false;
}
if (!lockLow && (millis() - lowIn) > pause) {
lockLow = true;
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
BT.print("*L");
BT.println("OFF");
BT.print("*A");
BT.println("OFF");
BT.print("*F");
BT.println("OFF");
Serial.println(" Chuyển động kết thúc.");
delay(50);
}
}
}
void processCommand(String cmd) {
// Serial.print("Xử lý lệnh: ["); Serial.print(cmd); Serial.println("]");
if (cmd == "ON1") {
digitalWrite(LED_PIN1, HIGH);
BT.print("*L");
BT.println("ON");
} else if (cmd == "OFF1") {
digitalWrite(LED_PIN1, LOW);
BT.print("*L");
BT.println("OFF");
} else if (cmd == "ON2") {
digitalWrite(LED_PIN2, HIGH);
BT.print("*A");
BT.println("ON");
} else if (cmd == "OFF2") {
digitalWrite(LED_PIN2, LOW);
BT.print("*A");
BT.println("OFF");
} else if (cmd == "ON3") {
digitalWrite(LED_PIN3, HIGH);
BT.print("*F");
BT.println("ON");
} else if (cmd == "OFF3") {
digitalWrite(LED_PIN3, LOW);
BT.print("*F");
BT.println("OFF");
// } else {
// Serial.print("Lệnh không hợp lệ: ["); Serial.print(cmd); Serial.println("]");
// }
}
}Editor is loading...
Leave a Comment