查看: 8107|回复: 3

使用Arduino实现矩阵键盘检测

[复制链接]

该用户从未签到

发表于 2015-3-15 16:36 | 显示全部楼层 |阅读模式
程序作用:实现下图这样的矩阵键盘控制,将按键代表的数字或字母输出到上位机。
/***************horizontal port******************/#define hor1 30#define hor2 31#define hor3 32#define hor4 33int horizontal[] = {30, 31, 32, 33};/***************vertical port****************/#define ver1 34#define ver2 35#define ver3 36#define ver4 37int vertical[] = {34, 35, 36, 37};
int i = 0, j = 0;int num = 0;int count = 0;char sym = '0';int height=0;

void setup(){  Serial.begin(9600);  for (i = 0; i < 4; i++)  {    pinMode(13, OUTPUT);    pinMode(horizontal[i], OUTPUT);    pinMode(vertical[i], INPUT_PULLUP);  }}
void loop(){  for (i = 0; i < 4; i++)  {    digitalWrite(hor1, HIGH);    digitalWrite(hor2, HIGH);    digitalWrite(hor3, HIGH);    digitalWrite(hor4, HIGH);    digitalWrite(horizontal[i], LOW);    for (j = 0; j < 4; j++)    {      if (digitalRead(vertical[j]) == LOW)      {        delay(10);        if (digitalRead(vertical[j]) == LOW)        {          if (i != 3 && j != 3)          {            num = j + 3 * i + 1;            Serial.println(num);            count++;            if (count == 1)              //The first Number We take            {              height = num * 10;            }            else if (count == 2)            {              height += num;            }            else            {              count = 0;              num=0;            }          }          if (j == 3)          {            switch (i)            {              case 0:                sym = 'A';                num = 0;                count = 0;                break;              case 1:                sym = 'B';                break;              case 2:                sym = 'C';                break;              case 3:                sym = 'D';                if(count == 1)                Serial.println(height/10);                else                Serial.println(height);                num = 0;                count = 0;                break;            }            Serial.println(sym);          }          if (i == 3 && j != 3)          {            if (j == 0)              sym = '*';            if (j == 2)              sym = '#';            Serial.println(sym);            if (j == 1)            {              num = 0;              Serial.println(num);              count++;              if (count == 1)                            {                height = num * 10;              }              else if (count == 2)              {                height += num;              }              else              {                count = 0;                num=0;              }            }          }        }        while (digitalRead(vertical[j]) == LOW);        delay(10);      }    }  }}

QQ截图20150315163450.png
  • TA的每日心情
    奋斗
    2020-11-4 11:07
  • 签到天数: 37 天

    [LV.5]常住居民I

    发表于 2015-3-16 23:37 | 显示全部楼层
    亲,请在代码取粘贴代码好吗,你这样没法看啊。
    BaiduShurufa_2015-3-16_23-38-11.png

    该用户从未签到

    发表于 2015-3-20 17:17 | 显示全部楼层
    wotamacaonima

    该用户从未签到

    发表于 2015-7-10 10:03 | 显示全部楼层
    代码这么乱。。。。。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    制作番茄计时器 提高学习效率        番茄钟   计时器
    制作番茄计时器 提高学习
    *学业重,本贴在未来几个月内无法及时维护 #视频介绍(推荐) https://www.bilibili.co
    关于arduino开发的工程方面的一些探索
    关于arduino开发的工程方
    刚开始用Arduino IDE写代码,连个代码提示都没有,后来发现在vscode上有arduino的插件
    雄霸Arduino中文开发平台
    雄霸Arduino中文开发平台
    雄霸Arduino中文开发平台适合于小白学习,中英文无缝切换。由于文件较大无法上传,请
    点灯·blinker esp8266加上DHT_11温度传感器
    点灯·blinker esp8266加
    #定义 BLINKER_WIFI #定义 BLINKER_MIOT_SENSOR //小爱同学定义为传感器设备
    【花雕动手做】太搞笑啦,一支胶管制成二只蠕动机器人
    【花雕动手做】太搞笑啦,
    装修屋子,用完了一筒千里马密封胶,偶然脑洞大开,想要试试看......
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表