Wo im Code wird geloopt?

Hallo euch allen,
für meine Feuerwehr möchte ich ein Blaulicht mit zwei WS2812b bauen.
Code dazu ist bereit zum Testen.

void loop() {
  //Blaulicht
  if (millis() >= blauMillis) {
switch (blaulicht) {
  
  case (0): 
blauMillis = millis() + blaulang;
strip.SetPixelColor(0, blue);
strip.SetPixelColor(1, black);
blaulicht = 1;
break;  
  case (1): 
blauMillis = millis() + blaukurz;
strip.SetPixelColor(0, blue);
strip.SetPixelColor(1, blue);
blaulicht = 2;
break;  
  case (2): 
blauMillis = millis() + blaulang;
strip.SetPixelColor(0, black);
strip.SetPixelColor(1, blue);
blaulicht = 3;
break;  
  case (3): 
blauMillis = millis() + blaukurz;
strip.SetPixelColor(0, blue);
strip.SetPixelColor(1, blue);
blaulicht = 0;
break;
  }
  strip.Show();
  }

Wie man sieht wollte ich den im void loop unterbringen, weil ich mal gelernt habe dass der Code dort immer im Kreis läuft.
Aber ihr habt ja ein paar Umleitungen im Kreisel. Bisher war mir bekannt, dass das Admin- Menü sich hier festfährt.
Wo kann ich meinen CodeSchnipsel einfügen, damit Millis hier so funktioniert, wie ich mir das gedacht habe?
Um eine auomatische Abschaltung zu verhindern, möchte ich beim Eintritt ins Admin-Menü die beiden auf Rot leuchten lassen. Wo kann ich den Start des Admin-Menüs finden?

Liebe Grüße aus Löberitz

Noch ein Tipp, beim Anlernen von Karte brauchst du auch etwas, was das Abschalten verhindert. Deshalb würde ich voiceMenu empfehlen.

Hast du das denn mal probiert? checkStandbyAtMillis wird ja auch im Loop aufgerufen und arbeitet ebenfalls mit millis.

Danke dir

Ja, er schaut immer nur vorbei wenn etwas passiert.
Karte drauf, nächster Track, Taster gedrückt.

Na dann setze ich meinen Code dort hin.
Ich möchte das eh nutzen

Hier gibt es eine grundlegende Problematik in der ganzen Software, für diese Art von zyklischem Code.

Es wäre für dich viiieeel einfacher, wenn du diese Funktion auf einen zweiten Controller auslagern würdest, so wie ich das hier mache:

Das erspart dir vieles und du kannst das Blaulicht unabhängig verwenden.
Du müsstest nur einen Pin am TonUINO verwenden, der das Blaulicht aktiviert oder deaktiviert.

Dann läuft die Animation unabhängig, egal in welcher Situation.

1 Like

Den Tipp wollte ich nicht haben :smiley:
Ich glaube mein Platz ist zu Ende und bis Ostern ist knapp.
Aber das bringt mich auf eine Idee, vielleicht kann man automatisch alle 500ms einen Interrupt auslösen.
Das frage Google

Du könntest Dein Blaulicht auch wie alle anderen LED-Streifen ansprechen. Ich habe da auch etwas rumgebastelt: Software für LED Animationen

Dann halt an der Stelle wo ich den Regenbogen mache, einen Farbwechsel rein (könnte man sogar noch bissl ein- und ausfaden). Die Animationen für Lautstärkeänderung und Liedwechsel kannst Du ja auch mit den Fahrzeuglichtern darstellen.

Der Witz ist, daß die eigentlich nötigen Delays ersetzt worden sind und die Funktion aus dem Hauptprogramm zyklisch aufgerufen wird, so daß die Box trotzdem noch zügig auf Eingaben reagiert.

Danke dir @atomphil
am Wochenende habe ich die Feuerwehr aufgegeben, es wird einfach zu eng dort drinnen.
Die Zeit bis Ostern nutze ich nun, um noch ordentliche Karten zu erstellen. Feuerwehr wird dann vielleicht im August zum Geburtstag was. Einen kleineren Arduino, ein kleinerer Reader, dünnere Kabel…Ich bleibe dran.