C++/Arduino 闪烁 LED 不同的间隔
C++/Arduino flash LED different intervals
我在Arduino上有以下代码,我想使用以下规则闪烁LED:
LED 应快速闪烁两次,然后暂停较长时间,以便实现以下节奏:
开-开----开-开----开...
打开应持续 125 毫秒,短暂停应持续 75 毫秒,长暂停应持续 500 毫秒。
以下是我到目前为止所做的:
unsigned long flashOn = 125;
unsigned long flashOff = 75; //first pause must be a short one
unsigned long flashCount = 0;
void handleFrontFlash() {
byte beforeState = digitalRead(LED_Front);
flashOff = (flashCount % 2 > 0) ? 75 : 500;
digitalWrite(LED_Front, (millis() % (flashOn + flashOff)) < flashOn);
byte afterState = digitalRead(LED_Front);
if(beforeState == LOW and afterState == HIGH)
flashCount++;
}
我的想法是计算LED打开的次数,并使用模来确定周期是否完成。但是,双闪光灯仅实现LED的每8次闪烁一次,其余时间LED闪烁一次。
有人可以在这里帮助我吗?
你想要的一个例子,我使用了简单的函数来轻松理解程序,我正在使用LED_BUILTIN 是 Arduino UNO 或 Mega 的 LED 13
unsigned long currentMillis;
unsigned long previousMillis = 0;
unsigned long interval;
int Compteur = 1;
int ledState = HIGH;
int state = 0;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH); // i begin with HIGH during 125ms
interval = 125;
previousMillis = 0;
}
// Main loop
void loop() {
currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
switch (state) {
case 0:
ledState = LOW;
interval = 75;
state = 1;
break;
case 1:
ledState = HIGH;
interval = 125;
state = 2;
break;
case 2:
ledState = LOW;
interval = 500;
state = 3;
break;
case 3:
ledState = HIGH;
interval = 125;
state = 0;
Compteur++; // count the number of beginning new sequence
break;
default:
// statements
break;
}
digitalWrite(LED_BUILTIN, ledState);
}
}
如果你需要做的就是重复同样的模式,你也许可以做得更简单一点......
unsigned long on = 125;
unsigned long shortOff = 75;
unsigned long longOff = 500;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(on);
digitalWrite(LED_BUILTIN, LOW);
delay(shortOff);
digitalWrite(LED_BUILTIN, HIGH);
delay(on);
digitalWrite(LED_BUILTIN, LOW);
delay(longOff);
}
如果您需要"同时"做其他事情,那么Frenchy的答案会更好。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 人脸跟踪arduino代码的优化
- vscode下的Arduino代码出现意外编译错误
- 如何修复 Arduino LED 串控制器的代码?
- 使用 ARDUINO 和处理在 8x8 LED 矩阵上显示数据时出现问题
- 使用串行监视器 arduino 控制 LED
- Arduino RGB LED随机PWM级别
- 对于循环:LED 在 Arduino 上无法正确显示
- C++/Arduino 闪烁 LED 不同的间隔
- 如何逆转Arduino中的LED矩阵
- 尝试在多个 LED 上的 arduino 上淡入淡出的奇怪问题
- 如何使用C 在Arduino上制作LED闪光灯,但除了Millis()之外,没有使用任何功能
- 用Arduino编程一个简单的按钮LED电路
- Arduino led温度传感器
- Arduino LED 矩阵算法
- Arduino无法根据模拟输入变量点亮led
- Arduino代码优化的多路复用LED矩阵
- 用arduino/c++在一段时间内短时间闪烁LED 1到3次
- 如何写动态文本到LED显示屏串行w/ Arduino