如何给void loop里面的循环语句给个终止时间?
大家好,我最近才学习arduino。发现是一个比较好玩的东西。现在脑袋里有一个想法,但是一直无法从语句里面来实现,希望各路大神帮我出出主意。我的程序很简单int switch1=A0;
int PWM1=8;
int value1=0;
void setup()
{
pinMode(switch1, INPUT);
pinMode(PWM1, OUTPUT);
Serial.begin(9600);
}
void loop()
{
value1=analogRead(switch1);
if(value1==0)
{
digitalWrite(PWM1, LOW);
}
else
{
digitalWrite(PWM1, HIGH);
delay(1000);
digitalWrite(PWM1, LOW);
delay(1000);
}
}
这是一个很简单的控制LED灯亮暗的程序,在开关关闭后LED灯闪亮。
我现在想让灯只闪亮8秒中。即void loop循环语句的运行时间是8秒。
我试过在倒数第二个大括号外面加delay(8000),结果发现灯亮了一秒后暗9秒。
我也试过将循环语句除void loop之外的全部程序框起来加delay(8000),结果发现亮暗一次后停止8秒再次进行亮暗。
我想实现的结果是亮暗不停的闪烁直到8秒后停止。求各位大神帮忙想想办法!
谢谢 去看看millis(); 建议去看看 《计算机程序设计艺术》(The Art of Computer Programming)
方法很简单,把你的程序放到setup()里,loop()里不加任何语句,setup()只执行一次。 春泥蛋炒饭 发表于 2013-11-19 07:33 static/image/common/back.gif
方法很简单,把你的程序放到setup()里,loop()里不加任何语句,setup()只执行一次。
我的意思是loop()里面的循环持续8秒的时间,在这8秒里面loop()里面的语句一直循环。就是比方说灯亮1秒然后再暗1秒,这样亮暗4组后持续8秒后停止。改变灯亮暗的持续时间,比如delay(500),那么就是8秒里面灯亮暗8组。 循环中加入计数器,闪几下跳出来。 用for语句放到setup里面,arduino没有程序中断 我也遇到同样的问题 用for语句放到setup里面可以实现你要的结果,不过这之后整个系统就停了,这有什么用?应该给重新启动加个条件。 你直接复制7次亮灭过程,不就可以实现你的想法了。如果,能用for循环来实现语句会更简单。:lol setup()只會執行一次,結束之後就進loop()
如果你寫在setup(),跑完一次系統就卡在loop()裡
直接在loop()裡面跑8秒的話,在delay()時啥都不能做
用timer控制閃爍隨時要開關都行,不過對初學者可能難了點#include <SimpleTimer.h>
SimpleTimer timer;
#define switchPin A0
#define ledPin 3
int timerNumber = -1;
void flash(){
digitalWrite(ledPin, !digitalRead(ledPin));
}
void setup(){
Serial.begin(9600);
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop(){
timer.run();
int switchValue = analogRead(switchPin);
if(switchValue > 100){
if(timerNumber >= 0){
timer.deleteTimer(timerNumber);
timerNumber = -1;
}
analogWrite(ledPin, map(switchValue, 100, 1024, 10, 250));
}
else if(timerNumber < 0){
digitalWrite(ledPin, false);
timerNumber = timer.setTimer(500, flash, 8*2);
}
delay(10);
} 那就不要用loop了。直接写一个函数。设置定时器,写个while或者for,时间到了break函数。
页:
[1]