Blaulicht mit Button

Hallo zusammen,

ich bin blutjunger Anfänger und tue mich sehr schwer mit dem Programmieren… :frowning:

Ich möchte gern folgendes umsetzen (Arduino nano):

Wenn ich einen Button an Pin 10 kurz drücke, soll für eine Zeit X folgender Code ausgeführt werden (ein aus dem Internet gefundener Code, um Blaulicht darzustellen):

#define PIN_LED_RIGHT 11                // Pin für den Anschluss der rechten LED.
#define PIN_LED_LEFT 12                 // Pin für den Anschluss der linken LED.

#define DURATION 40                     // Wartezeit zwischen den Aufblitzern der LED.
#define CYCLES 5                        // Anzahl der Aufblitzer der LED pro Durchlauf.


void setup()
{
  pinMode(PIN_LED_RIGHT, OUTPUT);       // Pin der rechten LED als digitalen Ausgang festlegen. 
  pinMode(PIN_LED_LEFT, OUTPUT);        // Pin der linken LED als digitalen Ausgang festlegen.
}

void loop()
{
  for (byte n = 0; n < CYCLES; n++)     // Wiederhole CYCLES-mal.
  {
    digitalWrite(PIN_LED_RIGHT, HIGH);  // Rechte LED einschalten.
    delay(DURATION);                    // Warten.
    digitalWrite(PIN_LED_RIGHT, LOW);   // Rechte LED ausschalten.
    delay(DURATION);                    // Warten.
  }

  for (byte n = 0; n < CYCLES; n++)     // Wiederhole CYCLES-mal.
  {
    digitalWrite(PIN_LED_LEFT, HIGH);   // Linke LED einschalten.
    delay(DURATION);                    // Warten.
    digitalWrite(PIN_LED_LEFT, LOW);    // Linke LED ausschalten.
    delay(DURATION);                    // Warten.
  }  
}

Und jedesmal, wenn ich diesen Button drücke, soll der oben stehende Code erneut für die Zeit X ausgeführt werden.

Könnt ihr mir da auf die Sprünge helfen?

Vielen Dank im Voraus!

Gruß,
Sebastian

versuch mal diesen Thread zu lesen:

https://forum.arduino.cc/index.php?topic=581037.15

Wenn der Sketch und der Aufbau aus meinem Post #18 bei dir funktioniert, und du das gegebene verstehst, dann werden wir auch eine Möglichkeit finden, das Geblinke per Zeitablauf zu stoppen, sodass du es mit dem Button wieder starten kannst.

Hallo noiasca,

vielen Dank für deine Antwort und deine Mühe.

Der Sketch und der Aufbau funktionieren bei mir, da hört es aber auch auf.

Ich verstehe den Code, den ich gefunden und oben gepostet habe, ich verstehe nur nicht, wie ich die loop-Anweisung unterbrechen kann, damit ich den Button mit der Zeitschleife als Gerüst "drum herum" - programmieren kann.

Deinen Code verstehe ich nicht annähernd; ich behaupte auch, dass wenn ich ihn verstehen würde, ich hier nicht meine Frage gestellt hätte / stellen hätte stellen "müssen".

Wie oben erwähnt; ich bin blutjunger Anfänger, ich habe mit der IDE/dem Arduino noch nie etwas zu tun gehabt. Ich kann ein bischen VBA, C++, etc. -das war es aber auch. Es reicht, um meinen Code zu verstehen, aber eben nicht, um ihn selbstständig zu ergänzen.

Fragen die sich mir (z. B.) bei deinem Code stellen:

  • Wozu die Bibliothek OneButton.h, wenn kein Button zum Einsatz kommt?
  • Was ist eine class?
  • Warum müssen die LEDPins am Anfang nicht deklariert werden?
  • Was at es mit dem Unterstrich auf sich?
  • Was beudetet "tick"?

Das sind nur einige Fragen, letzendlich ist mir der ganze Aufbau nicht klar. Was ich damit sagen will: Ich lerne gerne, aber eben in langsamen, einfachen Schritten.

Ich würde mich freuen, wenn es möglich wäre, das jemand mir die gewünschte Programmierung zur Verfügung stellt, und ich mich daran entlang hangeln und lernen kann.

Für mich persönlich bringt es jetzt nichts, wenns ich mir ähnliche Programmierungen anschaue, die ich a) nicht verstehe und b) niemand hier ist, mit dem ich das unmittelbar durchsprechen kann.

Ich wünsche einen entspannten Abend! Sebastian

Hi

Da Du vehement wiederholst, daß Du blutiger Anfänger bist, wirst Du diesen Punkt wohl noch eine Zeit lang so halten wollen, oder?

Wenn nicht, der Nachtwächter (Der in dem oben verlinkten Thread ebenfalls verlinkt sein dürfte, sonst könnte eine Suche helfen, Die selbst ein noch so blutiger Anfänger meistern könnte) oder auch das Beispiel 'Blink_without_delay' aus der IDE zeigen Dir, wie man 'im vorbeigehen' das Programm ablaufen lässt. So kannst Du auch bei jedem Durchgang prüfen, ob gerade Jemand einen Taster drückt oder das Blaulicht weiter geschaltet werden müsste - wenn's eben blinken soll, sonst eben nicht.

Sofern Das hier nicht Dein einziges Arduino-Projekt werden soll, verabschiede Dich möglichst von delay() und der Vorstellung, auf Tastendrücke WARTEN zu wollen.

Wenn's Dir wirklich nur um dieses 'auf Knopfdruck warten' geht - packe eine Zeile vor Dein Blinklicht:

const byte buttonpin=10;  //Taster zwischen Pin D10 und GND

void setup(){
   pinMode(buttonpin,INPUT_PULLUP);
}

void loop(){
...
   while(digitalRead(buttonpin)==high);
   //Hier Dein Blinklicht
}

MfG

Und den Button anschliessen zwischen Pin und Ground. Code muss nicht immer schön sein, manchmal reicht auch einfach.