Hilfe bei einem Projekt mit Piezo und WS2812 LED Stripes

Hallo liebe Forum
Für meine beiden Jungs plane ich gerade einen "Nerf" Schießstand.
Und zwar benötige ich 5-10 runde "Ziele". Je Ziel soll ein WS2812 LED Stripe verbaut werden der in einer Farbe leuchtet. Wird nun eines der Ziele getroffen, soll der LED Stripe ein Lauflicht ausführen und danach in einer anderen Farbe leuchten.
Wir das bereits getroffene Ziel nochmal getroffen soll nichts passieren.
Es soll zu jeder Zeit möglich sein das ganze über einen Taster zu reseten.
Wie kann ich sowas realisieren ?!

Anbei eine kleine Zeichnung

1 Like

Was hakt?
Trefferfeld mit nem Taster ausrüsten, wenn Taster ausgelöst Lauflicht starten und Merker setzen.
Ist der Merker gesetzt, wird bei erneutem auslösen nichts passieren.

Beispiel mit einer Taste an Pin 3 und der LED on Board:

const byte tastPin = 3;
const byte led = LED_BUILTIN;
bool merker = false;
unsigned long startZeit = 0;

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(tastPin, INPUT_PULLUP);
}

void loop()
{
  if (!digitalRead(tastPin) && !merker)
  {
    merker = true;
    startZeit = millis();
  }
  if (merker && (millis() - startZeit < 10000))
  {
    blinken(500);
  }
}

void blinken(const unsigned long zeit)
{
  static unsigned long lastmillis = 0;
  if (millis() - lastmillis > zeit)
  {
    lastmillis = millis();
    digitalWrite(led, !digitalRead(led));
  }
}

Im Beispiel noch sicherstellen, dass blinken() im HIGH-Zustand aufhört, oder dies nach Ablauf des Blinkens aktiv einstellen.

Dann LED { AUS / BLINKEN / EIN } auf STRIPE { FARBE A / LAUFLICHT / FARBE B } umstellen.

Dann auf wiederverwendbar umschreiben und "5 bis 10" Objekt-Instanzen davon erstellen. (Wobei 10 * WS2812 schon eine Herausforderung für sich sind, fürchte ich)

Aber die Funktionsbeschreibung

"Lauflicht ausführen und danach in einer anderen Farbe leuchten. Wir das bereits getroffene Ziel nochmal getroffen soll nichts passieren."

sollte zuerst gelöst werden. Dann kann man auch der Einfachheit halber 10 Arduinos nehmen, deren Reset gemeinsam ausgelöst werden kann.

Nicht jeder WS2812 Abschnitt muß einzeln angesteuert werden es können auch alle in Reihe geschaltet werden und einfach nur der Teil eines Abschnittes angesteuert werden. zB jeder Abschnitt hat 8 LED dann geht der erste von 0 bis 7, der zweite von 8 bis 15 usw. Will man zB den 2. Abschnitt ansprechen modifiziert man die Daten für die WS 8 bis 15 .

Grüße Uwe

Vor Kurzem hatten wir hier ein Thema zur Auswertung einer Dartscheibe. Da war die Herausforderung, die sehr kurzen Trefferimpulse per Arduino zu erfassen. Das könnte auch für dieses Thema zutreffen. Oder?

Das wäre dann das auflösen zweier Bedingungen:

void loop()
{
  if (!digitalRead(tastPin) && !merker)
  {
    merker = true;
    startZeit = millis();
  }
  if (merker)
  {
    if (millis() - startZeit < 10000)
    {
      blinken(500);
    }
    else
    {
      digitalWrite(LED_BUILTIN, HIGH);
    }
  }
}

Warum?
Die Ansteuerung kann doch pixelweise erfolgen.
Nur die Versorgung trennen und schick. Oder hab ich was übersehen?

Wohl oder.

und

waren das Letzte dazu.
Das was der TO vorhat, ist nicht zeitkritisch.

Irgendwie zeitkritisch ist es schon, nur wie zeitkritisch, das muß sich noch herausstellen.

Ich hatte auch an dieses Thema gedacht:

Natürlich ist objektorientiert besser,
aber 10 mal startZeit , merker, Taster, und die jeweils passenden Abschnitte des led streifens lauflichtern lassen, könnte jemanden, der bei Sketchen wie in #6 Hilfe braucht, ziemlich fordern.

Vielen Dank für die ganzen Hilfestellung, Tipps und Tricks. Jedoch stelle ich gerade fest das mir für dieses Projekt echt grundlegende Kenntnisse fehlen und mir da noch einiges aneignen muss. Ich dachte es wäre einfacher. Einfach den Sketch kopieren und einfügen macht ja nicht wirklich Sinn. Ich möchte verstehen was dort passiert und finde die Anforderung echt spannend, jedoch habe ich echt wenig Zeit mich da abends reinzufuchsen...
Vielleicht hat ja jemand Lust, gegen ein kleines Taschengeld so ein Sketch für mich zu entwickeln und mir das Ergebnis zukommen zu lassen ?!

Das kann ich nur begrüßen. Das Beispiel von @my_xy_projekt (#2/#6) sollte verständlich sein, wenn man es mit anderen Beispielen aus der IDE vergleicht und selber weiter experimentiert.
(Gibt hier Leute, die empfehlen, dicke C++ -Bücher auswendig zu lernen, aber das ist nicht unbedingt erforderlich, wenn es nicht dem eigenen Arbeitsstil entspricht)

Je nach Motivation kannst du, wenn es soweit ( 1 sensor, 1 led, Blinken / Dauerlicht ) funktioniert, dann entweder auf Lauflicht / LED-Streifen statt blinken erweitern, oder aus einem zwei (und dann mehr) Ziele machen.
Dass es hinterher als Zielscheibe genutzt werden kann, ist allerdings nur ein Nebeneffekt, das "Ans Laufen Kriegen" ist das eigentliche Ziel bei diesem Hobby.

Viel Spaß!

Ja und?
Learning by doing? - dann gehts eben nicht an drei Tagen. Na Und?

Jeden x-ten Tag einfach nur eine Kleinigkeit mitnehmen, sich kurz reinlesen und verstehen, was da passiert.

Mal als Beispiele:
Ein Projekt, was seit 15 Monaten gewachsen ist:

Gerade ein paar Tage alt - da war auch die Frage "Wer programmiert das"

Wenn Du Lust hast, bauen hier Leute mit und alles wird schick.
Kleine Literatur für zwischendurch - nicht auswendig lernen, nur wissn, das da was drin steht und das es erklärt wird: ArduinoForum.de - Das deutschsprachige Forum rund um den Arduino - Arduino Code-Referenz (deutsch) - da das pdf runterladen.

So und nu mal Deine Anforderung abfragen...
7 Sensoren - welche?
7 Lichter mit WS - je Trefferfläche wieviele?

Nen Resettaster. Wird eher ein Initialisieren der Variablen auf Tastendruck.

Nichts großartiges.
Kleines bool Array für die Auslöser, selbes für den Merker.
Array für den Start der Ws.
Das wars.
Der Rest ist Fleissarbeit.

:wink:

1 Like

Bisher spricht nichts dagegen, dafür einfach den eigentlichen Reset Pin zu nehmen.

Stimmt... - bis jetzt.
Schau Dir das mit der Rennbahn an, diese Geschichte ist wirklich so gut und von Anfang an ehrlich gewachsen. Ähnliches könnte hier ohne Weiteres auch passieren. 'n bissl hier; 'n bissl da...

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