-
-
-
Tổng tiền thanh toán:
-
Khóa điện tự bấm số sử dụng Keypad 4x3
11/10/2018
Khóa điện tự bấm số sử dụng Keypad 4x3
1. Phần cứng
- Keypad 4x3 (Cũng có thể sử dụng 4x4)
- Arduino Uno, Mega, Nano (tùy chọn)
- Động cơ Servo Sg90
- LCD1602
- I2C LCD. Kết nối với LCD để giảm bớt số chân cắm vào Arduino
2. Code
#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 const byte ROWS = 4; // Bốn hàng const byte COLS = 3; // Ba cột char keys[ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; byte rowPins[ROWS] = {5, 4, 3, 2}; byte colPins[COLS] = {8, 7, 6}; Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); Servo myServo; char STR[4] = {'2', '0', '1', '8'}; // Cài đặt mật khẩu tùy ý char str[4] = {' ', ' ', ' ', ' '}; int i, j, count = 0; void setup() { myServo.attach(9); // 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(" Enter Password"); } 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(1000); // 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(1000); lcd.setCursor(7, 1); lcd.print("*"); } if (i == 2) { str[2] = key; lcd.setCursor(8, 1); lcd.print(str[2]); delay(1000); lcd.setCursor(8, 1); lcd.print("*"); } if (i == 3) { str[3] = key; lcd.setCursor(9, 1); lcd.print(str[3]); delay(1000); 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(" Correct!"); delay(3000); myServo.write(180); // Mở cửa lcd.clear(); lcd.print(" Opened!"); i = 0; count = 0; } else { lcd.clear(); lcd.print(" Incorrect!"); delay(3000); lcd.clear(); lcd.print(" Try Again!"); delay(3000); lcd.clear(); lcd.print(" Enter Password"); i = 0; count = 0; } } switch (key) { case '#': lcd.clear(); myServo.write(90); Đóng cửa lcd.print(" Closed!"); delay(10000); lcd.clear(); lcd.print(" Enter Password"); i = 0; break; } }