Hallo miteinander,
habe einen Taster der als Auslöser für mein Programm dienen soll, das Programm soll aber nur ein mal abgespielt werden wenn der Taster gedrückt wird.
Problematik, auch wenn der Taster nicht wider los gelassen wird soll das Programm nicht wider von neuen Starten.
erst wenn das Programm durchgelaufen ist und der Taster danach nicht noch immer gedrückt ist kann / soll das Programm wider Start fähig sein.
Version 1:
Angenommen ich Drücke den Taster und lasse Ihn nicht wider los dann soll das Programm nur ein mal durchlaufen und nicht in einer Dauerschleife laufen.
Version 2:
Angenommen ich drücke den Taster 5 mal schnell hintereinander und halte Ihn dann immer noch gedrückt (das Programm braucht länger für einen Durchlauf) dann soll das Programm auch nur ein mal abgespielt werden.
Version 3:
Angenommen ich drücke den Taster nur ein mal Kurz, dann soll das Programm ein mal abgespielt werden.
was für alle gleich ist. wenn ich nach dem das Programm durchgelaufen ist den Taster erneut Drücke soll das Programm wider abgespielt werden.
habe das auch schon mal gemacht, doch heute ist mir dabei ein Fehler aufgefallen, wie ich das auch hin bekommen,
das Programm Läuft ein mal durch so wie es das auch nur soll, doch manchmal Startet es dann noch mal wenn ich den Taster los lasse ![]()
Angenommen ich Drücke den Taster 5 mal hintereinander und halte Ihn dann Gedrückt dann läuft das Programm ein mal durch und Startet wider wenn ich den Taster nach Durchlauf des Programms los lasse. Was mich wundert das ist nicht immer so, keine Ahnung was ich da Falsch mache.
Das ist mein Code habe alles raus geschmissen was gerade mal unwichtig ist,
und der Fehler kommt dennoch ![]()
Code Versuch 1:
int startPin = A4; // Starttaster
int Lauf = 0; // Kurzzeitgedächtnis
void setup()
{
pinMode(startPin, INPUT);
}
void loop()
{
if(digitalRead(startPin) == HIGH && Lauf == 0)
{
Lauf = 1;
for (int i=2; i < 11; i++)
{
pinMode(i,OUTPUT); // Pin als Ausgang definiren
digitalWrite(i, HIGH); // LED an
delay(300); // Pause
digitalWrite(i, LOW); // LED aus
}
}
else if (digitalRead(startPin) == LOW && Lauf == 1) {Lauf = 0;}
}
Code Versuch 2:
int startPin = A4; // Starttaster
int Lauf = 0; // Kurzzeitgedächtnis
void setup()
{
pinMode(startPin, INPUT);
}
void loop()
{
if (Lauf == 0)
{
if(digitalRead(startPin) == HIGH)
{
Lauf = 1;
for (int i=2; i < 11; i++)
{
pinMode(i,OUTPUT); // Pin als Ausgang definiren
digitalWrite(i, HIGH); // LED an
delay(300); // Pause
digitalWrite(i, LOW); // LED aus
}
}
}
else if (digitalRead(startPin) == LOW && Lauf == 1) {Lauf = 0;}
}
bei beiden Codes habe ich das Problem.
ich dachte mir das ich mir den Zustand des Tasters merke
und erst nach dem Durchlauf des Programms den Zustand wider abfrage
und frei geben muss, ich bin auch davon überzeugt das das der Richtige weg ist
mir ist nur nicht klar warum beim tasten loslassen das Programm noch mal durchlaufen wird.
wie gesagt das passiert nicht immer.
Kann mir da jemand etwas weiterhelfen?
Gruß Mücke