同时闪烁的 LED,具有独立且不一致的模式
Simultaneous blinking LEDs, with separate and inconsistent patterns
我正在尝试同时 运行 两个 "Blink" 式函数。
我在其他地方找到了一些代码可以让我这样做并修改它!太棒了
然而,我想要做的是像往常一样让一个 LED 每 1000 毫秒打开和关闭一次,但让另一个 LED 以奇怪的模式闪烁,比如打开 3000 毫秒,关闭 100 毫秒,打开 100 毫秒,关闭 200 毫秒然后循环返回。
为了做到这一点,我尝试在找到的代码中添加一个随机函数,但我不喜欢它的外观。它看起来像一个闪烁的 LED,带有干扰或其他东西,比如无线电发射器或其他东西。我正在尝试复制一个旧的闪烁的灯泡,这意味着它必须始终打开的时间比关闭的时间更长,本质上它需要 ON/HIGH 一段时间 "longer" 然后被几个中断ON 和 OFF 的短闪烁
所以我正在寻求帮助,以了解如何协调第二个 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);
}
尝试这样的事情:
void setup()
{
Serial.begin(9600);
randomSeed(analogRead(0));
pinMode(led1, OUTPUT); // sets the digital pin as output
pinMode(led2, OUTPUT);
}
long interval2 = random(100,1500);
void loop()
{
unsigned long m = millis();
if (m - time1 > interval1){
time1 = m;
if (value1 == LOW)
value1 = HIGH;
else
value1 = LOW;
digitalWrite(led1, value1);
}
if (m - time2 > interval2){
time2 = m;
if (value2 == LOW) {
value2 = HIGH;
interval2 = random(100, 1500);
} else {
value2 = LOW;
interval2 = random(100, 200);
}
digitalWrite(led2, value2);
}
运行 总是需要不到一秒的时间,因此您可以返回主循环并确保您不会错过其他 LED 的 1 秒 on/off:
void flicker(){
boolean state = false;
int r = random(20, 175);
for(int i = 0; i < 5; i++){
digitalWrite(led2, state);
state = !state;
delay(r);
r = random(20, 175);
}
digitalWrite(led2, HIGH);
}
顺便说一句。我正在替换此切换代码:
if (value2 == LOW)
value2 = HIGH;
else
value2 = LOW;
digitalWrite(led2, value2);
有了这个:
state = !state;
digitalWrite(led2, state);
现在,随机调用 flicker()
;也许每 15-45 秒或任何你发现的 appropriate/realistic。
我正在尝试同时 运行 两个 "Blink" 式函数。
我在其他地方找到了一些代码可以让我这样做并修改它!太棒了
然而,我想要做的是像往常一样让一个 LED 每 1000 毫秒打开和关闭一次,但让另一个 LED 以奇怪的模式闪烁,比如打开 3000 毫秒,关闭 100 毫秒,打开 100 毫秒,关闭 200 毫秒然后循环返回。
为了做到这一点,我尝试在找到的代码中添加一个随机函数,但我不喜欢它的外观。它看起来像一个闪烁的 LED,带有干扰或其他东西,比如无线电发射器或其他东西。我正在尝试复制一个旧的闪烁的灯泡,这意味着它必须始终打开的时间比关闭的时间更长,本质上它需要 ON/HIGH 一段时间 "longer" 然后被几个中断ON 和 OFF 的短闪烁
所以我正在寻求帮助,以了解如何协调第二个 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);
}
尝试这样的事情:
void setup()
{
Serial.begin(9600);
randomSeed(analogRead(0));
pinMode(led1, OUTPUT); // sets the digital pin as output
pinMode(led2, OUTPUT);
}
long interval2 = random(100,1500);
void loop()
{
unsigned long m = millis();
if (m - time1 > interval1){
time1 = m;
if (value1 == LOW)
value1 = HIGH;
else
value1 = LOW;
digitalWrite(led1, value1);
}
if (m - time2 > interval2){
time2 = m;
if (value2 == LOW) {
value2 = HIGH;
interval2 = random(100, 1500);
} else {
value2 = LOW;
interval2 = random(100, 200);
}
digitalWrite(led2, value2);
}
运行 总是需要不到一秒的时间,因此您可以返回主循环并确保您不会错过其他 LED 的 1 秒 on/off:
void flicker(){
boolean state = false;
int r = random(20, 175);
for(int i = 0; i < 5; i++){
digitalWrite(led2, state);
state = !state;
delay(r);
r = random(20, 175);
}
digitalWrite(led2, HIGH);
}
顺便说一句。我正在替换此切换代码:
if (value2 == LOW)
value2 = HIGH;
else
value2 = LOW;
digitalWrite(led2, value2);
有了这个:
state = !state;
digitalWrite(led2, state);
现在,随机调用 flicker()
;也许每 15-45 秒或任何你发现的 appropriate/realistic。