qianduoyi 发表于 2015-10-9 15:03:46

求助:刚学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:25:25

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

qianduoyi 发表于 2015-10-9 21:26:51

if(key==HIGH)
          {
            delay(30);
                if(key==HIGH)
               {   
                     key=digitalRead(10);
                     if(key==LOW)


你好   这句的意思是想按住 松开后M++要不然按一下 有时跑好几个数字。。
呵呵,我刚学C。不知道怎么写松手检测,所以试了好多。不知道对不对

Super169 发表于 2015-10-9 21:50:17

你認為 delay(30) 之後, key 的值會有改變嗎?
就是再 read 一次, 前後只有 30ms, 你可以及時放手嗎?
先想想整個流程, 再開始吧.
你現在的情況, 可以按到的機會, 在m=0 時, 亂按的話, 還有少少可能, 但 m=1開始, 已經可以說是幾乎不可能了. m=1 時, 長按的話, 每 4秒後有 30ms 機會可以放手, 即 30/4030, m-2 是 30/8030,...
页: [1]
查看完整版本: 求助:刚学arduino碰到问题了。请高手看下代码 先谢谢