首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++/Arduino闪光灯的不同间隔

C++/Arduino闪光灯的不同间隔
EN

Stack Overflow用户
提问于 2018-12-30 15:19:03
回答 2查看 237关注 0票数 1

我在Arduino上有以下代码,其中我想用以下规则闪烁一个LED:

LED应快速闪存两次,然后暂停一段较长的时间,以达到以下目的:

在.上.上.

在应该持续125毫秒,短暂的暂停应该持续75毫秒,长一个500毫秒。

以下是我迄今所做的工作:

代码语言:javascript
复制
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闪烁一次。

有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-30 17:47:02

一个你想要的例子,我使用了简单的函数来简化程序的编写,我使用的是LED_BUILTIN wich是arduino uno或mega的led 13。

代码语言:javascript
复制
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);
  }
}
票数 2
EN

Stack Overflow用户

发布于 2018-12-30 19:54:03

如果你要做的就是重复同样的模式,你可以做的更简单一点.

代码语言:javascript
复制
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 会更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53978811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档