Untitled

 avatar
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