【求助】4x4矩阵键盘无法实现预定功能

2018-07-151.1万
AI 快速预览详细 收起
本文解决了4x4矩阵键盘与Arduino连接后,按下A键LED灯不亮的问题。通过详细分析代码,发现getkey()函数中的digitalRead语句有误。正确的写法是digitalRead(rowPins[row]) == LOW。此外,还提供了完整的代码示例和故障排查步骤,帮助新手快速定位并修复问题。
我是新手,求大神解答我的问题!
我把4x4矩阵键盘和Arduino板子连在一起,最终想要实现的是,通过按不同按键,可以实现不同功能。
打算先从最简单的试一试,就根据书上的(《Arduino入门到实践》)4x4矩阵键盘的代码,删了几行,再加了几行简单的控制LED灯亮的代码。希望达到的效果是按下A键,LED灯就亮。
代码如下:
//4x4矩阵键盘
int LED = 13; //我加的代码第一行
const int numRows = 4;
const int numCols = 4;
const int debounceTime = 20;
const char keymap[numRows][numCols] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
const int rowPins[numRows] = {7, 6, 5, 4};
const int colPins[numCols] = {11, 10, 9, 8};
void setup() {
  pinMode(LED, OUTPUT); //我加的代码第二行
  Serial.begin(9600);
  for (int row = 0; row < numRows; row++) {
    pinMode(rowPins[row], INPUT);
    digitalWrite(rowPins[row], HIGH);
  }
  for (int column = 0; column < numCols; column++) {
    pinMode(colPins[column], OUTPUT);
    digitalWrite(colPins[column], HIGH);
  }
}
char getkey();
void loop() {
  char key = getkey();
  if (key == 'A') { //整条if语句是我加的代码第四行
    digitalWrite(LED, HIGH);
    delay(2000);
    digitalWrite(LED, LOW);
  }
}
char getkey() {
  char key = 0;
  for (int column = 0; column < numCols; column++) {
    digitalWrite(colPins[column], LOW);
    for (int row = 0; row < numRows; row++) {
      if (digitalRead(rowPins[row] == LOW)) {
        delay(debounceTime);
        while (digitalRead(rowPins[row]) == LOW);
        key = keymap[row][column];
      }
    }
    digitalWrite(colPins[column], HIGH);
  }
  return key;
}
可是结果是按下A键,或者任何一个键,LED灯都没有反应。请问是为什么呢?又有什么办法改呢?真诚求助!谢谢!
【求助】4x4矩阵键盘无法实现预定功能图1

截图201807151655009155.png (304.71 KB, 下载次数: 1835)

4x4矩阵键盘与Arduino连接问题 > 故障排查_image_3.webp

截图201807151656247533.png (227.34 KB, 下载次数: 1868)

4x4矩阵键盘与Arduino连接问题 > 故障排查_image_6.webp

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
zsz
zsz
Led加一个220的电阻
20060606
20060606回复zsz
这好像不是问题所在
- 没有更多了 -