查看: 2752|回复: 5

4*4薄膜按键求助

[复制链接]
  • TA的每日心情
    奋斗
    2020-4-16 13:55
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2018-9-19 17:22 | 显示全部楼层 |阅读模式
    按照教程代码写入单片机后,串口只能输出1,其他的按都没有反应!代码不知哪里有问题,请路过的大佬指点一二!

    const int numRows = 4;//定义4 行
    const int numCols = 4;//定义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] = {9,8,7,6};//设置硬件对应的引脚
    const int colPins[numCols] = {5,4,3,2};
    //初始化功能
    void setup(){
    Serial.begin(9600);
    for(int row = 0; row < 4; row++){
    pinMode(rowPins[row],INPUT_PULLUP);
    //digitalWrite(rowPins[row],HIGH);
    }
    for(int column = 0;column < 4; column++){
    pinMode(colPins[column],OUTPUT);
    digitalWrite(colPins[column],HIGH);
    }
    }
    //主循环
    void loop() {
    // 添加其他的程序,循环运行
    char key = getkey();
    if(key !=0)
    {
    Serial.print("Got key ");//串口打印键值
    Serial.println(key);
    }
    }
    //读取键值程序
    char getkey(){
    char key = 0;
    for(int column = 0;column < 4; column++){
    digitalWrite(colPins[column],LOW);
    for(int row = 0 ;row < 4; row++){
    if(digitalRead(rowPins[row]) == LOW){ //是否有按键按下
    delay(100);
    while(digitalRead(rowPins[row]) == LOW) //等待按键释放
    {
    key = keymap[row][column];
    }
    }
    digitalWrite(colPins[column],HIGH); //De-active the current column
    }
    return key;
    }

    }


    微信截图_20180919172045.png
  • TA的每日心情
    慵懒
    2019-12-23 17:45
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2018-9-19 23:05 | 显示全部楼层
    #include <Keypad.h>


    const byte ROWS = 4; //四行

    const byte COLS = 4; //四列

    //定义键盘的按键

    char hexaKeys[ROWS][COLS] = {

    {'1','2','3','A'},

    {'4','5','6','B'},

    {'7','8','9','C'},

    {'*','0','#','D'}

    };

    byte rowPins[ROWS] = {9, 8, 7, 6}; //连接到键盘的行线

    byte colPins[COLS] = {5, 4, 3, 2}; //连接到键盘列引脚


    //初始化键盘

    Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

    void setup(){

      Serial.begin(9600);

    }

    void loop(){

      char customKey = customKeypad.getKey();
      if (customKey){ //当键盘按下时
        Serial.println(customKey); //发送键盘值
      }
    }
  • TA的每日心情
    奋斗
    2020-4-16 13:55
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-9-20 09:18 | 显示全部楼层

    谢了,兄弟,如果不用库呢?
  • TA的每日心情
    奋斗
    2020-4-16 13:55
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-9-20 10:07 | 显示全部楼层
    重新了一遍,好了!不知,再查查看!

    const int numRows = 4;

    const int numCols = 4;
    const char keymap[numRows][numCols]= {
      { '1','2','3','+' },

      {'4','5','6','-'  },

      {'7','8','9','X'  },

      {'*','0','#','/'  }
    };
    const int rowPins[numRows] = {9,8,7,6};
    const int colPins[numCols] = {5,4,3,2};

    void setup(){
       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);
    }
    }

    void loop() {
       
        char key = getkey();
        if(key !=0){
          Serial.print("Got key ");
          Serial.println(key);
        }
      }

    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(20);
              while(digitalRead(rowPins[row]) == LOW) ;
               
              key = keymap[row][column];   
            }
          }
          digitalWrite(colPins[column],HIGH); //De-active the current column
        }
        return key;
      }
  • TA的每日心情
    奋斗
    2020-4-16 13:55
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-9-20 10:13 | 显示全部楼层
    已完工,收工!
  • TA的每日心情
    开心
    2018-9-21 15:12
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2018-9-21 11:10 来自手机 | 显示全部楼层
    用示例代码试试
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    求大神看看哪里有问题,设备在线,米家也同步正常,就.....
    求大神看看哪里有问题,设
    代码: #define BLINKER_PRINT Serial //用于打开串口 #define BLINKER_WIFI #define
    晒图ESP8266一个框架
    晒图ESP8266一个框架
    好久没发帖了,出来活跃活跃一下。ESP8266免身份登录截图。 最近外研究新的架构M2M或P
    Arduino 求助 串口接收数据不正确,数据丢失问题
    Arduino 求助 串口接收数
    问题整了好久,我自己写的C#程序发送数据,arduino接收数据。 但是发现arduino接收的
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表