#include <Servo.h> // Khai báo thư viện sử dụng cho động cơ+
#include <LiquidCrystal_I2C.h> // Khai báo thư viện LCD sử dụng I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 địa chỉ LCD, 16 cột và 2 hàng
#include <Keypad.h> // Khai báo thư viện Keypad
#include <Wire.h>
// Gọi thư viện DHT11
#include "DHT.h"
const int DHTPIN = A3; //Đọc dữ liệu từ DHT11 ở chân 2 trên mạch Arduino
const int DHTTYPE = DHT22; //Khai báo loại cảm biến, có 2 loại là DHT11 và DHT22
DHT dht(DHTPIN, DHTTYPE);
const byte ROWS = 4;
const byte COLS = 4;
char hexakeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(hexakeys), rowPins, colPins, ROWS, COLS);
Servo myServo;
char STR[4] = {'1', '5', '0', '1'}; // Cài đặt mật khẩu tùy ý
char str[4] = {' ', ' ', ' ', ' '};
int i, j, count = 0;
void setup() {
Serial.begin(9600);
dht.begin();
myServo.attach(10); // Khai báo chân điều khiển động cơ
lcd.init(); // Khai báo sử dụng LCD
lcd.begin(16, 2);
lcd.backlight();
lcd.clear();
lcd.print(" Nhap mat khau");
}
void loop() {
char key = keypad.getKey(); // Ký tự nhập vào sẽ gán cho biến Key
if (key) // Nhập mật khẩu
{
if (i == 0) {
str[0] = key;
lcd.setCursor(6, 1);
lcd.print(str[0]);
delay(200); // Ký tự hiển thị trên màn hình LCD trong 1s
lcd.setCursor(6, 1);
lcd.print("*"); // Ký tự được che bởi dấu *
}
if (i == 1) {
str[1] = key;
lcd.setCursor(7, 1);
lcd.print(str[1]);
delay(200);
lcd.setCursor(7, 1);
lcd.print("*");
}
if (i == 2) {
str[2] = key;
lcd.setCursor(8, 1);
lcd.print(str[2]);
delay(200);
lcd.setCursor(8, 1);
lcd.print("*");
}
if (i == 3) {
str[3] = key;
lcd.setCursor(9, 1);
lcd.print(str[3]);
delay(300);
lcd.setCursor(9, 1);
lcd.print("*");
count = 1;
}
i = i + 1;
}
if (count == 1) {
if (str[0] == STR[0] && str[1] == STR[1] && str[2] == STR[2] && str[3] == STR[3]) {
lcd.clear();
lcd.print(" Chinh Xac !");
delay(1000);
myServo.write(0); // Mở cửa
lcd.clear();
lcd.print(" Da mo cua!");
i = 0;
count = 0;
} else {
lcd.clear();
lcd.print(" Sai mat khau!");
delay(3000);
lcd.clear();
lcd.print(" Hay thu lai!");
delay(3000);
lcd.clear();
lcd.print(" Nhap mat khau");
i = 0;
count = 0;
}
}
switch (key) {
case '*':
lcd.clear();
myServo.write(90);
lcd.clear();
lcd.print(" Nhap mat khau");
i = 0;
break;
}
switch (key) {
case 'B':
lcd.clear();
float h = dht.readHumidity(); //Đọc độ ẩm
float t = dht.readTemperature(); //Đọc nhiệt độ
lcd.setCursor(0,0);
lcd.print("Nhiet do: ");
lcd.print(t);
lcd.println("C");
lcd.setCursor(0,1);
lcd.print("Do am: ");
lcd.print(h);
lcd.print("%");
delay(2000); //Delay 2 sec between temperature/humidity check.
lcd.clear();
lcd.print(" Nhap mat khau");
i = 0;
break;
}
}