长按开关控制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 static/image/common/back.gif
顺便请问以下 代码怎么能复制那种比较清晰的带行数和颜色的格式?
编辑栏高级模式下,有一个“<>”样子的功能图标。。就是代码高亮了 第二个if进不去 还是不懂怎么修改 Athlon 发表于 2013-4-7 19:03 static/image/common/back.gif
还是不懂怎么修改
(millis()-buttonHoldTime)
这个不是会等于0吗?
用pulseIn函数应该会更简单的。 (millis()-buttonHoldTime)>1000这儿有问题
还有boolean onoff= LOW; 初始值应该设成HIGH
我也是初学,不晓得对不 本帖最后由 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;
} 没想到一个点灯程序这么复杂 跟我想象完全不一样
页:
[1]