|
本帖最后由 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
|