求助:刚学arduino碰到问题了。请高手看下代码 先谢谢
想按键控制 delay()的延时时间。数码管显示 数字刚开始是0 按一下 数码管显示1 延时1秒 LED灯延时也对。可是在按就没反映了。数码也不显示2、延时还是1秒。去掉
Z=M*1000;这句 数码管又显示正常。。。实在搞不懂了。。先谢谢过
int display = {
0,0,0,0,0,0,0,0,1, //0
0,0,1,0,0,1,1,1,1, //1
0,0,0,0,1,0,0,1,0, //2
0,0,0,0,0,0,1,1,0, //3
0,0,1,0,0,1,1,0,0, //4
0,0,0,1,0,0,1,0,0, //5
0,0,0,1,0,0,0,0,0, //6
0,0,0,0,0,1,1,1,1, //7
0,0,0,0,0,0,0,0,0, //8
0,0,0,0,0,0,1,0,0//9
};
int m=0;
int z=m;
void setup()
{
pinMode(9,OUTPUT);
pinMode(10,INPUT);
pinMode(11,OUTPUT);
for(int z=2;z<9;z++)
{
pinMode(z,OUTPUT);
}
}
void loop()
{
int key=digitalRead(10);
digitalWrite(key,LOW);
if(key==HIGH)
{
delay(30);
if(key==HIGH)
{
key=digitalRead(10);
if(key==LOW)
{
m++;
z=m*2000;
if(m==10)
{
m=0;
}
}
}
}
digitalWrite(9,HIGH);
for(int j=2;j<9;j++)
digitalWrite(j,display);
digitalWrite(11,HIGH);
delay(z);
digitalWrite(11,LOW);
delay(z);
}
本帖最后由 Super169 于 2015-10-9 19:27 编辑
你在想做什麼?
key 是 按鍵的訊號吧, 為什麼要 digitalWrite(key, LOW)?
delay(30)之後,key 也不會有變動, 再if(key==HIGH) 有什麼作用?
如果 30ms 未能及時放開, 就不能進入 if(key==LOW) 的了.
當中不斷在loop, 不斷有 delay, 你要準確地在執行 key = digitalRead(10) 時按下, 並在 30ms 內放手.....真的不容易.
int key=digitalRead(10);
digitalWrite(key,LOW);
if(key==HIGH)
{
delay(30);
if(key==HIGH)
{
key=digitalRead(10);
if(key==LOW)
{
m++; if(key==HIGH)
{
delay(30);
if(key==HIGH)
{
key=digitalRead(10);
if(key==LOW)
你好 这句的意思是想按住 松开后M++要不然按一下 有时跑好几个数字。。
呵呵,我刚学C。不知道怎么写松手检测,所以试了好多。不知道对不对 你認為 delay(30) 之後, key 的值會有改變嗎?
就是再 read 一次, 前後只有 30ms, 你可以及時放手嗎?
先想想整個流程, 再開始吧.
你現在的情況, 可以按到的機會, 在m=0 時, 亂按的話, 還有少少可能, 但 m=1開始, 已經可以說是幾乎不可能了. m=1 時, 長按的話, 每 4秒後有 30ms 機會可以放手, 即 30/4030, m-2 是 30/8030,...
页:
[1]