查看: 2681|回复: 1

使用Arduino实现矩阵键盘检测

[复制链接]

该用户从未签到

发表于 2015-4-9 17:56 | 显示全部楼层 |阅读模式
程序功能:实现下图这样的矩阵键盘控制,将按键代表的数字或字母输出到上位机。


[mw_shl_code=cpp,true]/***************horizontal port******************/
#define hor1 30
#define hor2 31
#define hor3 32
#define hor4 33
int horizontal[] = {30, 31, 32, 33};
/***************vertical port****************/
#define ver1 34
#define ver2 35
#define ver3 36
#define ver4 37
int 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, OUTPUT);   
        pinMode(vertical, INPUT_PULLUP);  
    }
}
void loop()
{  
    for (i = 0; i < 4; i++)  
    {   
        digitalWrite(hor1, HIGH);   
        digitalWrite(hor2, HIGH);   
        digitalWrite(hor3, HIGH);   
        digitalWrite(hor4, HIGH);   
        digitalWrite(horizontal, 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);      
            }   
        }
    }
}
                        
[/mw_shl_code]

163455nzk6ky4yukqni4z4.png
  • TA的每日心情
    奋斗
    2015-7-16 18:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2015-7-20 21:24 | 显示全部楼层
    你是用的mega2560吗,怎么样将按下的一串数字脱机输入到板子里呢
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    制作番茄计时器 提高学习效率        番茄钟   计时器
    制作番茄计时器 提高学习
    *学业重,本贴在未来几个月内无法及时维护 #视频介绍(推荐) 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!   
    快速回复 返回顶部 返回列表