0 đánh giá

Làm sao để lập trình Keypad 4x4 với Arduino

Bài hướng dẫn này sẽ giới thiệu đến các bạn làm sao để lập trình keypad (bàn phím ma trận) 4x4. 

Bước 1: Bàn phím ma trận 4x4 là gì ?

Về nguyên lý, bàn phím 4x4 có cách nối như hình trên. Về nguyên tắc lập trình thì có thể hiểu như sau:

        Đầu tiên ta set cho row1 giá trị 5v, nếu col1 đầu ra cũng có 5v chứng tỏ nó đã được nhấn, nếu ko ta bỏ qua. Người ta sẽ làm như vậy cho lần lượt row 2,3,4 và kiểm tra các col1,2,3,4 tương ứng.

Bước 2: Tải về và thêm thư viện Keypad

Đâu tiên bạn tải về thư viện Keypad tại đây, bạn thêm vào thư viện của Arduino IDE

Tiến hành nối các phím với chân của Arduino như sau:

byte rowPins[rows] = {5, 6, 7, 8}; //Cách nối chân các row1,2,3,4 với Arduino tương ứng các chân 5,6,7,8 digital
byte columnPins[columns] = {9, 10, 11, 12};//Cách nối chân các col1,2,3,4 với Arduino tương ứng các chân 9,10,11,12 digital

Bước 3: 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 = 500; //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] =
{
  {a, d, g, j},
  {m, p, s, v},
  {y, 1, 4, 7},
  {-, -, #, -}
};

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

Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rows, columns);
void setup() {
  Serial.begin(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);
}

 

(!) Nếu có bất kỳ thắc mắc nào cần hỏi vui lòng đặt câu hỏi tại HỏiHay.Net, Cộng đồng Hỏi đáp Hỏi Hay sẽ trả lời bạn.
1,136 lượt xem ^tháng ^ngày, ^năm
admin 2,030 điểm

Please log in or register to Comment this Media.