极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: yqfans

小白求助~ 按键控制LED,如何按一下松开,亮;按一下松开,闪烁;再按一下松开,灭。

[复制链接]
 楼主| 发表于 2015-3-4 01:39:40 | 显示全部楼层
uvvvvw 发表于 2015-3-3 20:12
找了只按键,试了一下。很成功呢。
按键没有接电阻,直接用Uno的内部上拉电阻。
亦没有接LED,就用Un ...

是的,这会对了!很高兴,谢谢大家的帮助!
关于这个程序还有几个问题想问下,1,关于buttonState,这个我照字面上理解为按钮的状态,这个状态是变量么?如果是,变量的范围是多少?2, 关于break,这是条很棒的语句,意思是停止在当前, case中的语句不断循环么?
回复 支持 反对

使用道具 举报

发表于 2015-3-4 10:55:45 | 显示全部楼层
yqfans 发表于 2015-3-4 01:39
是的,这会对了!很高兴,谢谢大家的帮助!
关于这个程序还有几个问题想问下,1,关于buttonState,这个 ...

对呀,buttonState 就是按键的状态。
按一下,buttonState = 1; 按第二下,buttonState = 2;  按第三下,buttonState = 3;
按第四下,buttonState = 1; 按第五下,buttonState = 2...................................

switch(){} 跟 if(){} 分别不大。

switch (buttonState)
{
  case 1:
         digitalWrite(ledPin, HIGH);
         break;
  case 2:
         currentMillis = millis();                           
         if (currentMillis - previousMillis > interval)     
           {
            previousMillis = currentMillis;   
            digitalWrite( ledPin, digitalRead( ledPin ) ^ 1 );   
           }
         break;
  case 3:
         digitalWrite(ledPin, LOW);  

可以这么写:

if (buttonState==1)
  {
   digitalWrite(ledPin, HIGH);
  }
if (buttonState==2)
  {
   currentMillis = millis();                          
   if (currentMillis - previousMillis > interval)   
     {
      previousMillis = currentMillis;   
      digitalWrite( ledPin, digitalRead( ledPin ) ^ 1 );   
     }
  }

if (buttonState==3)
  {
   digitalWrite(ledPin, LOW);
  }

回复 支持 反对

使用道具 举报

发表于 2017-12-13 10:08:41 | 显示全部楼层
uvvvvw 发表于 2015-3-4 10:55
对呀,buttonState 就是按键的状态。
按一下,buttonState = 1; 按第二下,buttonState = 2;  按第三下 ...

这个闪烁的时间怎么改动   currentMillis = millis();                           
         if (currentMillis - previousMillis > interval)     
           {
            previousMillis = currentMillis;   
            digitalWrite( ledPin, digitalRead( ledPin ) ^ 1 );   
           }
回复 支持 反对

使用道具 举报

发表于 2017-12-16 00:17:41 | 显示全部楼层
LXYLWJ 发表于 2017-12-13 10:08
这个闪烁的时间怎么改动   currentMillis = millis();                           
         if (curre ...

改 interval 的值就可以了。
回复 支持 反对

使用道具 举报

发表于 2017-12-18 09:45:43 | 显示全部楼层
嗯,是的。可以,谢谢!那如果在按键按一下LED亮,在亮的同时开始定时《比如1分20秒结束》,如果在LED亮的时候第二次按按键LED灭,定时取消,请问这个定时功能怎么加进去,谢谢!
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 20:42 , Processed in 0.041435 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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