Khóa điện tự bấm số sử dụng Keypad 4x3

Xin chào mọi người!

Mục đích nhằm chia sẻ kiến thức và học hỏi thêm kinh nghiệm từ các Pro. Bài viết này mình xin giới thiệu một sản phẩm liên quan đến khóa (khóa cửa, khóa két sắt...).

Mong rằng có được nhiều ủng hộ và đóng góp nhé. Xin cảm ơn!

1. Phần cứng

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;
  }
}
Youtube: 
lên
9 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Chế tạo Serial Monitor từ C# (C Sharp) - Một sản phẩm được truyền cảm hứng

Sau khi đọc bài viết C sharp (C#) - Một cách điều khiển ARDUINO bằng máy tính !!! của Đinh Hồng Thái mình thấy rất hay và muốn phát triển nó...Trong đầu mình chợt lóe lên những ý tưởng với C#. Mình tự đặt câu hỏi: Làm thế nào để tự tạo ra 1 Serial Monitor của chính mình!!! Qua một thời gian tìm hiểu, mình đã thành công!!!

lên
26 thành viên đã đánh giá bài viết này hữu ích.