wukongxuetang 发表于 2015-7-8 21:37:40

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

本帖最后由 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 = {
{0,1,2,3},
{4,5,6,7},
{8,9,10,11},
{12,13,14,15}
};
byte rowPins = {5, 4, 3, 2};
byte colPins = {9, 8, 7, 6};
void setup()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
for(int xu=0;xu<ROWS;xu++){pinMode(rowPins,OUTPUT);delay(1);}
for(int xu=0;xu<COLS;xu++){pinMode(colPins,INPUT);digitalWrite(colPins, HIGH);delay(1);}
}

void loop()
{
int j=0;//tongshi you duoshao ge anjian jishu
for(int ii=0;ii<ROWS;ii++){
   digitalWrite(rowPins, LOW);//为该行端口输出低电平
   for (int jj=0;jj<COLS;jj++){
   if (digitalRead(colPins)==HIGH&&jj==COLS-1){
   digitalWrite(rowPins, HIGH);
   }
   if (digitalRead(colPins)==LOW){
       int k=key;
       h=rowPins;
       l=colPins;
       r=rgb;
       g=rgb;
       b=rgb;
       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);
   }
}
}
页: [1]
查看完整版本: 不使用keyboard库编写矩阵键盘代码实现多键识别