我在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打开的时间,并使用一个模块来确定,是否完成循环。然而,双闪光灯只实现了每8次闪光灯的LED,其余的时间LED闪烁一次。
有人能帮我吗?
发布于 2018-12-30 17:47:02
一个你想要的例子,我使用了简单的函数来简化程序的编写,我使用的是LED_BUILTIN wich是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);
}
}发布于 2018-12-30 19:54:03
如果你要做的就是重复同样的模式,你可以做的更简单一点.
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);
}如果您需要“并发”做其他事情,那么 the answer by Frenchy 会更好。
https://stackoverflow.com/questions/53978811
复制相似问题