Neopixel + Switch case

Hallo leider komme ich bei einem Projekt nicht mehr weiter. Ich brauche eure Hilfe.

Kurze Info:
Ich möchte mit einem Neopixel LED streifen
Eine Wörter Uhr bauen
Mit einem RTC.

Nun zu dem Code.
Ich hab es mit If Else und mit switch case probiert.
Die Leds gehen dann an wenn die Bedingung erfüllt ist, jedoch bleiben sie dann auch an wenn die Bedingung nicht mehr zu trifft.
Wie bekomm ich diese aus ?
Mit Else kann ich auch nicht arbeiten, da manche LEDs mit verschiedenen Bedingungen eingeschaltet werden müssen.

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Wie sollen wir das ohne Deinen Sketch beantworten können? Hier sitzen keine Hellseher. Ich rate mal, dass Du sie nicht aus schaltest.
Mögliche Variante: Wenn sich die (anzeigerelevante) Zeit ändert, dann alle LED auf aus und neu einschalten. Danach show().

Gruß Tommy

Die Neopixelansteuerung ist recht easy gestrickt.
Alle Dinge die Du machst werden, so wie @Tommy56 schon erläuterte, erst mit einem .show() ausgeführt.
Von daher kannst (und musst) Du auch erstmal den Stripe/die Pixel so setzen wie Du sie brauchst.
Mit Hilfe der lib bleibt der Zustand des Pixels erhalten, bis dieser explizit geändert oder gelöscht wird.
Wenn eine Bedingung sich ändert, ist ein ,clear() die einfachste Variante um alle gemerkten Zustände zu löschen und mit der neuen Bedingung neu zu beschreiben.

Ich hab mal was gebaut - ohne Anspruch, das das funktioniert. Ich habe eine Länge von 12 Pixeln vorgesehen, die wirst Du hoffentlich am Stück haben :wink:

In den ersten ca. 30 Sekunden soll jeder Pixel aufleuchten, bis alle Pixel an sind, dann soll sich die Farbe ändern, ob das klappt hängt vom Zufall ab.
Auf jeden Fall geht in der ersten Zeit kein Pixel aus.
Danach wird der Inhalt vor jeder Änderung gelöscht, dann neu beschrieben und ausgegeben. Damit soll immer nur ein Pixel an sein.

Das Ganze könntest Du dann auf Deinen Code anwenden.
Es kompiliert - obs funktioniert weiss ich nciht. Ich hab keine Hardware. Aber wie es gehen soll, sollte ersichtlich sein.

#include <Adafruit_NeoPixel.h>
const byte pixelPin = 6;
const byte pixelNums = 12;

Adafruit_NeoPixel pixels(pixelNums, pixelPin, NEO_GRB + NEO_KHZ800);

byte aktualPixel;
uint32_t pixelColor = 0xFF0000;
uint32_t lastmillis;
void setup()
{
  pixels.begin();
  randomSeed(A0);
  lastmillis = millis();
}

void loop()
{
  if (millis() < 1000 * 30)                                      // in den ersten ca. 30 sekunden
  {
    newPixel(false);                                             // soll nur geschrieben werden
  }
  else
  {
    newPixel(true);                                              // später löschen vor dem schreiben aktiviert
  }
}
//
void newPixel(const bool state)
{
  if (state)                                                       // Nur wenn Absicht
  {
    pixels.clear();                                                // dann Inhalt löschen
  }
  if (millis() - lastmillis >= 1000)                               // Ca. sekundentakt
  {
    aktualPixel++;                                                 // nächsten Pixel setzen
    if (aktualPixel >= pixelNums)                                  // prüfen ob nicht mehr gültig
    {
      pixelColor = random(0x000000, 0xFFFFFF);                     // dann neue Farbe
      aktualPixel = 0;                                             // und von vorn anfangen
    }
    lastmillis = millis();                                         // Ausführungszeit merken
  }
  pixels.setPixelColor(aktualPixel, pixelColor);                   // setzen
  pixels.show();                                                   // ausgeben
}

alles löschen,
neu schreiben,
show

  • ist eh nur jede Minute.

Super,
Danke für die schnellen Antworten.
Ich denke das müsste mit dem clear funktionieren.
Probiere ich morgen gleich aus!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.