Athlon 发表于 2013-4-7 14:18:33

长按开关控制LED

本人新人从来没接触过代码 跟着入门教程做了几个实验,照葫芦画瓢还能做成,自己写就挂了
想做一个LED的自行车尾灯 带转向和刹车灯 长按任意转向按键 进入夜间状态 再长按关闭,这个基础的实验我都完成不了 真是太废了 看人家长长代码都不知道怎么码出来的,自叹智商真心不够用呵呵。以下为自己改的代码 请各位前辈帮忙看看


int Button=4;
int LED=6;
boolean onoff= LOW;
long buttonHoldTime = 0;
int buttonState = 0;
void setup()
{
pinMode(Button,INPUT);
pinMode(LED,OUTPUT);

}
void loop(){

buttonState = digitalRead(Button);
delay(20);
if(buttonState==HIGH)      
{
    buttonHoldTime = millis();   
}
if (buttonState ==HIGH && (millis()-buttonHoldTime)>1000)
{
    digitalWrite(LED,onoff);
    onoff=(!onoff);
    delay(10);
    while(buttonState==HIGH)
    {
      delay(1);
    }
}
}

Athlon 发表于 2013-4-7 14:19:13

顺便请问以下 代码怎么能复制那种比较清晰的带行数和颜色的格式?

弘毅 发表于 2013-4-7 15:09:37

Athlon 发表于 2013-4-7 14:19 static/image/common/back.gif
顺便请问以下 代码怎么能复制那种比较清晰的带行数和颜色的格式?

编辑栏高级模式下,有一个“<>”样子的功能图标。。就是代码高亮了

zoldada 发表于 2013-4-7 16:53:23

第二个if进不去

Athlon 发表于 2013-4-7 19:03:37

还是不懂怎么修改

老摸 发表于 2013-4-7 19:53:48

Athlon 发表于 2013-4-7 19:03 static/image/common/back.gif
还是不懂怎么修改

(millis()-buttonHoldTime)
这个不是会等于0吗?
用pulseIn函数应该会更简单的。

万马奔腾 发表于 2013-4-7 22:45:14

(millis()-buttonHoldTime)>1000这儿有问题
还有boolean onoff= LOW; 初始值应该设成HIGH
我也是初学,不晓得对不

Athlon 发表于 2013-4-7 22:50:03

本帖最后由 Athlon 于 2013-4-7 22:51 编辑

稀里糊涂看了几个例程竟然解决了,现在可以按住1秒后点亮再按住一秒熄灭而且非常准确没有抖动的现象。但是不知道是不是最佳方案还有没有优化的空间?还有 那个buttonStateOld =buttonState;怎么理解,程序总体逻辑还不是太清楚 有大神给解释一下吗?一知半解以后遇到相同问题还是不能解决 多谢各位了

int Button=4;
int LED= 6;
unsigned long buttonHoldTime;
int buttonStateOld;
boolean onoff=   LOW;


void setup()
{
//Serial.begin(9600);
pinMode(Button,INPUT);
pinMode(LED,OUTPUT);


}
void loop(){

int buttonState = digitalRead(Button);

if(buttonState==HIGH && buttonStateOld==LOW){
    buttonHoldTime = millis();
}
else if(buttonState==HIGH && buttonStateOld==HIGH){


    if ( millis() - buttonHoldTime>1000){
      digitalWrite(LED,onoff);
      onoff=(!onoff);
      delay(10);
      while(digitalRead(Button)==HIGH)
      {
      delay(1);
      }
    }
}
buttonStateOld =buttonState;

}

Athlon 发表于 2013-4-7 22:52:20

没想到一个点灯程序这么复杂 跟我想象完全不一样
页: [1]
查看完整版本: 长按开关控制LED