gpt4 book ai didi

c - LED 同时闪烁,具有独立且不一致的模式

转载 作者:行者123 更新时间:2023-11-30 17:01:32 25 4
gpt4 key购买 nike

我正在尝试同时运行两个“Blink”式函数。

我在其他地方找到了一些代码,可以让我做到这一点并修改它!太棒了。

但是,我想做的是像往常一样每 1000 毫秒打开和关闭一个 LED,但让另一个 LED 以奇怪的模式闪烁,例如亮起 3000 毫秒,熄灭 100 毫秒,亮起 100 毫秒,熄灭 100 毫秒。 200ms 然后循环返回。

为了实现这一点,我尝试在找到的代码中添加一个随机函数,但我不喜欢它的外观。它看起来像一个闪烁的 LED,有干扰或其他东西,比如 radio 发射器或其他什么东西。我正在尝试复制一个旧的闪烁灯泡,这意味着它打开的时间总是比关闭的时间长,本质上它需要在“更长”的时间内处于打开/高电平状态,然后被几次短暂的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);
}

最佳答案

这总是需要不到一秒的时间来运行,因此您可以返回主循环并确保您不会错过另一个 LED 的 1 秒开/关:

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 秒一次或您认为合适/现实的任何时间。

关于c - LED 同时闪烁,具有独立且不一致的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36961326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com