Programm über Taster starten/beenden

Guten Tag, und frohe Weihnachten,

während ich mich ein wenig mit meinem Arduino beschäftigt habe, tauchte plötzlich ein Problem auf, das ich nicht lösen kann.
Und zwar möchte ich ein Programm über einen Taster starten, das so lange durchläuft, bis man den Taster erneut betätigt.
leider schaffe Ich es bisher nur, das Programm zu starten, beenden funktioniert noch nicht.
Könnt ihr mir helfen?

Blinklich_2.ino (812 Bytes)

int led1 = 12;
int led2 = 13;
int taster = 8;

bool tasterstatus;

void setup () {
  pinMode (led1, OUTPUT);
  pinMode (led2, OUTPUT);
  pinMode (taster, INPUT);
  Serial.begin(9600);
}

void loop () {
Serial.println(digitalRead(taster));
 if (digitalRead(taster) == HIGH) {
  if (tasterstatus == LOW) {
    tasterstatus = HIGH;
  }else {
    tasterstatus = LOW;
  }
 Serial.println(digitalRead(taster));
   if (tasterstatus == LOW) {
 digitalWrite(led1,LOW);
  digitalWrite(led2,LOW);
   }
if (tasterstatus == HIGH) {
do{
Serial.println(digitalRead(taster));
 digitalWrite(led1, HIGH);
 delay(250);
 digitalWrite(led1,LOW);
 digitalWrite(led2,HIGH);
 delay(250);
 digitalWrite(led2,LOW);
}while (tasterstatus == HIGH);
}
 }
}

Hab vorerst nur die unnötigen Leerzeilen entfernt - in der IDE Mal STRG+T drücken - Das rückt den Code auf Klammer-Ebene ein - man sieht, was zusammen gehört.

... dann Mal angucken ...

MfG

Edit Die untere IF ist unnötig, da die darin enthaltene WHILE-Schleife eh nur durchlaufen wird, wenn die Bedingung erfüllt ist - da beide Male die gleiche Bedingung (in IF und WHILE), kann die IF hier entfallen. IN der WHILE musst Du allerdings 'tasterstatus' auch wieder einlesen - sonst ändert sich diese Variable nämlich nie wieder - akut ist 1x HIGH, immer HIGH.

Konstante Dinge (z.B. Pin-Nummern) gerne ein 'const' voran stellen - dadurch kann der Kompiler Diese optimieren. Wenn byte reicht, nimm byte! Solange der Arduino weniger als 256 Pins hat - reicht byte! (Wertebereich der verschiedenen Datentypen, durchaus eine Suche wert)

Und zwar möchte ich …

Du möchtest endliche Automaten bauen.

Einen zum entprellen, einen um Flanken/Tastendrücke zu erkennen.
Und dann noch einen, welcher das ein und ausschaltet, was du “Programm” nennst.
Zumindest irgendwie so ähnlich.

Ablaufsteuerung
Meine Standardantwort zu Ablaufsteuerungen:

Eine Stichworte Sammlung für Google Suchen:
Endlicher Automat,
State Machine,
Multitasking,
Coroutinen,
Ablaufsteuerung,
Schrittkette,
BlinkWithoutDelay,

Blink Without Delay
Der Wachmann

Intervall Macro
Multitasking Macros
INTERVAL Ersatzstoff
CooperativeTask

Danke bereits für eure Antworten,

da ich leider absolut neu auf dem Gebiet der Programmierung bin, kann ich jedoch mit den Ergebnissen, die die Suchanfragen, die ihr mir zur Verfügung gestellt habt, ausgaben, sehr wenig Anfangen. Deshalb würde Es mich freuen, wenn mir jemand ein konkretes Beispiel geben könnte, wie ich nun meine blinkenden LEDs starten, und stoppen kann

Hi

Also - aus dem Wachmann solltest Du schon was basteln können - zumindest solltest Du Es versucht haben.

Alleine die ersten beiden Links vom combie sollten Deine Probleme erschlagen können.

Wenn Dir ggf. prellende Taster verbleiben - dagegen ist ebenfalls ein Kraut gewachsen - Das aber erst, wenn Du zumindest etwas Mitarbeit zeigst. Etwas nicht können: kein Problem Das aber nicht lernen WOLLEN: Problem

MfG

Mach die Beispiele der IDE durch und versuche, sie zu verstehen und nachzuvollziehen. Dann sind alle deine Probleme gelöst.

Hallo,

guck dich hier um und lerne daraus. https://forum.arduino.cc/index.php?topic=655027.0 Toggle damit eine bool Variable und steuere damit deinen Programmablauf.

Silverstar2000: da ich leider absolut neu auf dem Gebiet der Programmierung bin, kann ich jedoch mit den Ergebnissen, die die Suchanfragen, die ihr mir zur Verfügung gestellt habt, ausgaben, sehr wenig Anfangen. Deshalb würde Es mich freuen, wenn mir jemand ein konkretes Beispiel geben könnte, wie ich nun meine blinkenden LEDs starten, und stoppen kann

Ich finde die Nachtwächter-Erklärung echt genial. Das liegt aber möglicherweise auch daran, dass ich das, worum es da geht, schon lange vorher kannte. Evtl. hilft Dir mein Geschreibsel - dort geht es um eine blinkende LED und Codeschnipselchen gibt's da auch.

Gruß

Gregor

PS: Weißt Du, was ein Programmablaufplan ist? Kannst Du damit etwas anfangen?