Skocz do zawartości

Kurs Arduino II - #9 - wielozadaniowość, opóźnienia z millis()


Pomocna odpowiedź

(edytowany)

W jednym projekcie chciałem zastąpić kilka sekwencyjnych zdarzeń oddzielonych delay

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("Something 1");
  delay(100);
  Serial.println("Something 2");
  delay(200);
  Serial.println("Something 3");
  delay(400);
}

Użycie zmiennych statycznych zadeklarowanych wewnątrz funkcji pozwoli odseparować ich zasięg i równolegle wykonywać podobne "machlojki" w innych funkcjach. Bez plączącego się multum zmiennych globalnych.

void setup() {
  Serial.begin(9600);
}

void loop() {
  static unsigned long nextStepTime = 0;
  static uint8_t sequenceStep = 0;

  if (static_cast<long>(millis() - nextStepTime) >= 0) {
    Serial.print(millis());
    switch (sequenceStep) {
      case 0:
        Serial.println("Something 1");
        nextStepTime += 100;
        sequenceStep++;
        break;

      case 1:
        Serial.println("Something 2");
        nextStepTime += 200;
        sequenceStep++;
        break;

      default:
        Serial.println("Something 3");
        nextStepTime += 500;
        sequenceStep = 0;
        break;
    }
  }
}

 

Edytowano przez rziomber

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...