极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10705|回复: 3

求助:刚学arduino碰到问题了。请高手看下代码 先谢谢

[复制链接]
发表于 2015-10-9 15:03:46 | 显示全部楼层 |阅读模式
想按键控制 delay()的延时时间。数码管显示 数字
刚开始是0   按一下 数码管显示1   延时1秒   LED灯延时也对。可是在按就没反映了。数码也不显示2、延时还是1秒。去掉

Z=M*1000;这句   数码管又显示正常。。。实在搞不懂了。。先谢谢过



int display[10][9] = {
                  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[m][j]);   
         digitalWrite(11,HIGH);
            delay(z);
          digitalWrite(11,LOW);
            delay(z);

  
        
      
}



回复

使用道具 举报

发表于 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++;  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-9 21:26:51 | 显示全部楼层
if(key==HIGH)
          {
              delay(30);
                if(key==HIGH)
                 {   
                     key=digitalRead(10);
                       if(key==LOW)


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

使用道具 举报

发表于 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,...
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 19:32 , Processed in 0.114412 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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