极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9487|回复: 0

不使用keyboard库编写矩阵键盘代码实现多键识别

[复制链接]
发表于 2015-7-8 21:37:40 | 显示全部楼层 |阅读模式
本帖最后由 wukongxuetang 于 2015-7-31 14:22 编辑

      经常做一些教育娱乐方面的小东西,想开发一个儿童架子鼓的小东西,想着实现时是离不开多按键开关识别的,就选择了keyboard矩阵键盘代码,但测试中发现因为加入了防抖延时程序,做按键还可以,但要实现同时多键盘操作,好像就不行了。
     在工坊里也有之间的帖子有机器人五子棋的案例,给出了一些启示,可惜没有代码,再说咱们也用不到自己去设计键盘,手上有的都是现成的3*4或者4*4的键盘,就自己写一个得了。
     使用的硬件为arduino Nano和4*4键盘,代码中只为实现功能,在串口输出调试中能看出来,发出来让大家给提提意见,如果有需要改进的地方,还请各位留言。悟空学堂站里也有一些我收集验证过的代码,各位有时间可以去增加些流量。


4*4矩阵键盘占用D2,D3,D4,D5,D6,D7,D8,D9八个针,输出16个按键,结合processing已经可以做出更多的应用了。
     
int h=0,l=0;
int g=0,b=0,r=0;
int num=1;
int mingling=0;

int rgb[]={221,242,45,26,6,34,222,242,46,26,6,34,
           223,242,47,27,6,34,224,242,48,28,6,34,
           225,242,49,28,6,34,226,242,50,30,6,34,
           227,242,51,29,6,34,228,242,52,32,6,34};
           //{ '223','242','45','26','6','34','223','242','45','26','6','34'}
char huifu;

const byte ROWS = 4;
const byte COLS = 4;

int key[ROWS][COLS] = {
  {0,1,2,3},
  {4,5,6,7},
  {8,9,10,11},
  {12,13,14,15}
};
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {9, 8, 7, 6};
void setup()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
for(int xu=0;xu<ROWS;xu++){pinMode(rowPins[xu],OUTPUT);delay(1);}
for(int xu=0;xu<COLS;xu++){pinMode(colPins[xu],INPUT);digitalWrite(colPins[xu], HIGH);delay(1);}
}

void loop()
{
  int j=0;//tongshi you duoshao ge anjian jishu
  for(int ii=0;ii<ROWS;ii++){
     digitalWrite(rowPins[ii], LOW);//为该行端口输出低电平
     for (int jj=0;jj<COLS;jj++){
     if (digitalRead(colPins[jj])==HIGH&&jj==COLS-1){
     digitalWrite(rowPins[ii], HIGH);
     }
     if (digitalRead(colPins[jj])==LOW){
       int k=key[ii][jj];
       h=rowPins[ii];
       l=colPins[jj];
       r=rgb[k*3];
       g=rgb[k*3+1];
       b=rgb[k*3+2];
       j=j+1;
          Serial.print(h);
          Serial.print(",");
          Serial.print(l);
          Serial.print(",");
          Serial.print(r);
          Serial.print(",");
          Serial.print(g);
          Serial.print(",");
          Serial.print(b);
          Serial.print(",");
          Serial.print(k);
          Serial.print(",");
          Serial.print(mingling);
          Serial.print(",");
          Serial.print(num);
          Serial.print(",");
          Serial.print(j);
          Serial.print("\n");
     }
     delay(10);
     }
  }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 19:56 , Processed in 0.037700 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表