【发布时间】:2016-04-30 23:26:46
【问题描述】:
我正在尝试同时运行两个“闪烁”式功能。
我在其他地方找到了一些代码,可以让我这样做并对其进行修改!太好了。
但是,我想做的是像往常一样每 1000 毫秒打开和关闭一个 LED,但让另一个 LED 以奇怪的模式闪烁,例如开启 3000 毫秒,关闭 100 毫秒,开启 100 毫秒,关闭200ms 然后循环回来。
为了实现这一点,我尝试在找到的代码中添加一个随机函数,但我不喜欢它的外观。它看起来像一个闪烁的 LED,带有干扰或其他东西,例如在无线电发射器或其他东西上。我正在尝试复制一个旧的闪烁灯泡,这意味着它必须始终开启比关闭时间更长的时间,本质上它需要在“更长”的时间内开启/高亮,然后被几次短暂的 ON 闪烁打断和关闭
因此,我正在寻求有关如何协调第二个 LED 以更具体的闪烁系列打开和关闭的帮助。
这是我目前使用的代码:
/* Blink Multiple LEDs without Delay
*
* Turns on and off several light emitting diode(LED) connected to a digital
* pin, without using the delay() function. This means that other code
* can run at the same time without being interrupted by the LED code.
*/
int led1 = 13; // LED connected to digital pin 13
int led2 = 12;
int value1 = LOW; // previous value of the LED
int value2 = HIGH; // previous value of the LED
long time1 = millis();
long time2 = millis();
long interval1 = 1000; // interval at which to blink (milliseconds)
void setup()
{
Serial.begin(9600);
randomSeed(analogRead(0));
pinMode(led1, OUTPUT); // sets the digital pin as output
pinMode(led2, OUTPUT);
}
void loop()
{
unsigned long m = millis();
if (m - time1 > interval1){
time1 = m;
if (value1 == LOW)
value1 = HIGH;
else
value1 = LOW;
digitalWrite(led1, value1);
}
long interval2 = random(100,1500);
if (m - time2 > interval2){
time2 = m;
if (value2 == LOW)
value2 = HIGH;
else
value2 = LOW;
digitalWrite(led2, value2);
}
Serial.println(interval2);
}
【问题讨论】:
-
当你第一次发布它时,我开始写一个解决方案,但我没有 arduino IDE 也没有真正的 arduino,所以我开始用纯 C 编写它。最终睡着了:D 无论如何,让一个名为
flicker()或类似的函数,它在 for 循环中打开和关闭 LED,其间有非常短的随机延迟。然后每隔 15-60 秒左右随机调用这个函数。我认为这会给人一种濒临死亡的灯泡的印象 -
感谢您的想法,我会玩,但不会延迟暂停所有内容吗?因此会暂停需要每 1000 毫秒持续开/关的第二个 LED?
-
是的,我认为
delay会阻止执行,但您可以使用时间比较而不是delays,就像您在if (m - time1 > interval1){ ...中所做的那样
标签: c random arduino delay led