Hướng dẫn sử dụng module bàn phím 4x4 với Arduino

Mô tả dự án: 

Sau một thời gian dài theo dõi cộng đồng, mình thấy có một số bạn hỏi về module bàn phím 4x4 nhưng vẫn chưa có một sự hướng dẫn rõ ràng. Hôm nay, qua bài viết này, mình xin hướng dẫn các bạn phương pháp sử dụng module 4x4 với một thư viện khá hay trên Arduino.

Bàn phím ma trận 4x4 (matrix keypad 4x4) là gì ?

Trên đây là hình ảnh sơ đồ nguyên lý của module bàn phím 4x4. Tuy có đến 16 nút nhấn, nghĩa là nếu làm một cách thông thường (dùng chân digital) thì chúng ta phải cần đến 16 chân Arduino để đọc. Nhưng với bàn phím này, chúng ta chỉ cần dùng 8 chân (4 chân hàng ngang (row), và 4 chân cột dọc (column)). 

Để kiểm tra một nút có được nhấn hay không? Họ sẽ sử dụng phương pháp quét được mô tả bằng đoạn mã giả như sau:

Với mỗi hàng (R1 đến R4), Chọn ra hàng Ri

Cấp cực âm (0v) cho hàng Ri

Nếu điện áp ở chân Cj bất kì là dương (INPUT PULLUP) => chưa nhấn

Nếu điện áp ở chân Cj bất kì là âm (INPUT PULLUP) => đang nhấn

Hướng dẫn sử dụng module này với board Arduino

Bạn hoàn toàn có thể tự làm một chương trình để sử dụng theo thuật toán trên. Tuy nhiên, sẽ rất khó cho một newbie để làm các hiệu ứng trên nút nhấn khác như: nhấn giữ, nhấn double click,... Nên mình sẽ hướng dẫn các bạn sử dụng một thư viện khá phổ biến trong Arduino, đó là thư viện Keypad.

Tải về thư viện Keypad

Nối dây

Arduino Keypad
5 R1
6 R2
7 R3
8 R4
9 C1
10 C2
11 C3
12 C4

Các bạn nối dây theo bảng này nhé

 

Mã lập trình

#include Keypad.h

//Bạn có thể tham khảo thêm tại: https://github.com/Chris--A/Keypad/blob/master/examples/HelloKeypad/HelloKeypad.ino

const byte rows = 4; //số hàng
const byte columns = 4; //số cột

int holdDelay = 700; //Thời gian trễ để xem là nhấn 1 nút nhằm tránh nhiễu
int n = 3; // 
int state = 0; //nếu state =0 ko nhấn,state =1 nhấn thời gian nhỏ , state = 2 nhấn giữ lâu
char key = 0;

//Định nghĩa các giá trị trả về
char keys[rows][columns] =
{
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'},
};

byte rowPins[rows] = {5, 6, 7, 8}; //Cách nối chân với Arduino
byte columnPins[columns] = {9, 10, 11, 12};

//cài đặt thư viện keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rows, columns);
void setup() {
  Serial.begin(9600);//bật serial, baudrate 9600

}
void loop() {  
  char temp = keypad.getKey();

  if ((int)keypad.getState() ==  PRESSED) {
    if (temp != 0) {
      key = temp;
    }
  }
  if ((int)keypad.getState() ==  HOLD) {
    state++;
    state = constrain(state, 1, n-1);
    delay(holdDelay);
  }

  if ((int)keypad.getState() ==  RELEASED) {
    key += state;
    state = 0;
    //Xuất lên Máy tính để xem kết quả
    Serial.println(key);

  }
  delay(100);
}

 

Lời kết

Chúc các bạn thành công. Thấy hay thì share và rate node giúp mình nhé yes.

lên
42 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

ROBOT HAI BÁNH TỰ CÂN BẰNG - 2 WHEEL SELF BALANCING ROBOT

Hôm nay mình xin chia sẻ với các bạn cách làm một robot tự cân bằng trên hai bánh xe bằng Arduino từ xe đồ chơi bị hỏng của thằng nhóc ở nhà. Tất nhiên, hai động cơ và hai bánh xe chưa bị hỏng nhé. laugh. Để robot tự cân bằng trên hai bánh xe thì chuyển động của nó tương tự như việc giữ thăng bằng một cây gậy trên ngón tay. Điều này chắc các bạn cũng đã từng thử trước đây.

lên
16 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Giới thiệu về các loại hộp số (bộ giảm tốc) chúng ta thường dùng khi làm xe mô hình với Arduino

Là một người yêu thích chế tạo xe, vì vậy mình mong muốn truyền cảm hứng cho các bạn yêu thích Arduino có thể tự làm cho mình một chiếc xe điều khiển từ xa. Tuy nhiên, khi mình triển khai hướng dẫn thì có nhiều bạn hỏi về các loại hộp số dùng cho xe mô hình. Vì vậy, hôm nay, mình sẽ tổng hợp các loại hộp số thường dùng trong xe mô hình điều khiển từ xa.

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

Cảm biến nhiệt độ TTL - Độ nhạy cao

Mình thấy bài viết của Đỗ Hữu Toàn rất hay, nay mình có cơ hội dùng cái cảm biến nhiệt độ TTL này nên giới thiệu với mọi người luôn. Do hướng dẫn sử dụng cũng giống cái của Toàn nên mình viết dưới dạng bài viết truyền cảm hứng để gom nhóm với Toàn.

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