#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define I2C_ADDR 0x27
#define LED_PIN1 18
#define BUZZER_PIN 14
#define LED_PIN2 19
#define LCD_COLS 16
#define LCD_ROWS 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLS, LCD_ROWS);
#define DHTPIN 34
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const int nutbam = 4;
const int coi = 14;
int bam = 0;
unsigned long lastBlinkTime = 0;
const int blinkInterval = 50;
void setup() {
Wire.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" Nhiet do: ");
dht.begin();
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(nutbam, INPUT);
pinMode(coi, OUTPUT);
}
void loop() {
float nhietdo = dht.readTemperature();
lcd.setCursor(0, 0);
lcd.print(nhietdo);
lcd.print("C");
if (nhietdo > 40 && nhietdo < 60 ) {
digitalWrite(LED_PIN1, HIGH);
lcd.setCursor(0, 1);
lcd.print(" Nhiet do cao! ");
} else {
digitalWrite(LED_PIN1, LOW);
lcd.setCursor(0, 1);
lcd.print(" ");
}
if (nhietdo > 60 ) {
lcd.setCursor(0, 1);
lcd.print(" Nhiet do cuc cao! ");
tone(BUZZER_PIN, 1000); // Phát âm thanh từ loa còi
} else {
noTone(BUZZER_PIN); // Tắt âm thanh từ loa còi
}
bam = digitalRead(nutbam);
Serial.println(bam);
if (bam == HIGH || nhietdo > 60) {
// Khi nút được nhấn, còi sẽ kêu và giữ kêu trong 10000 milliseconds (10 giây)
digitalWrite(coi, HIGH);
tone ( coi, 10000);
delay(100);
digitalWrite(coi, LOW);
} else {
digitalWrite(coi, LOW);
}
if (bam == HIGH || nhietdo > 60) {
// Khi nút được nhấn, LED sẽ nhấp nháy trong khoảng thời gian blinkInterval
unsigned long currentMillis = millis();
if (currentMillis - lastBlinkTime >= blinkInterval) {
digitalWrite(LED_PIN2, !digitalRead(LED_PIN2)); // Đảo trạng thái của LED
lastBlinkTime = currentMillis;
delay(10000); // Cập nhật thời gian cuối cùng nhấp nháy
}
} else {
digitalWrite(LED_PIN2, LOW);
}
delay(10);
}