Untitled
unknown
plain_text
a month ago
4.7 kB
4
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