Tôi yêu Arduino gửi vào
- 148582 lượt xem
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.
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é .