Ich will mit einem Taster eine Blink Schleife starten, wenn ich ihn einmal drücke.
Wenn der Taster nochmal gedrückt wird, soll die Schleife gestoppt werden.
Ich habe es damit versucht:
#define WAIT 500 // delay festlegen
void setup() {
pinMode(5, INPUT_PULLUP); // Pin 5 als Input mit Pullup
pinMode(13, OUTPUT); // Pin 13 als Output
digitalWrite(13,LOW); // LED ausschalten
}
// ***** LOOP *****
void loop() {
// Solange Pin 9 == HIGH ist ...
while(digitalRead(5)==HIGH){} // ...passiert nichts
// Sobald Pin 9 == LOW ist wird geschaltet
if(digitalRead(13)==LOW)
{
digitalWrite(13,LOW); //R1 ON
delay(WAIT);
digitalWrite(13,HIGH); //R1 OFF
delay(WAIT);
}
else {
digitalWrite(13,LOW);
}
delay(200); // Taste entprellen
}
Was allerdings passiert ist, dass die Schleife nur läuft solange der Taster gedrückt ist
und stehen bleibt, wenn man ihn los lässt.
Du hast in loop() schon eine Schleife. Entweder machst du darin was oder nicht. Abhängig davon in welchen Zustand zu durch den Tastendruck gerade bist. Extra Schleifen braucht man da nicht und machen auch oft nur Probleme
Wie gesagt, ich habe das aus fertigen Teilen zusammengebaut.
Daher müsste ich wissen, wie ich die Tastendrücke hoch zähle, wie ich
die Variable mittels if Abfrage einbinde und wie ich die Variable sobald
sie 3 erreicht zurück auf 1 setze.
Ich habe mit dem Board vor 3 Jahren mal ein bisschen was gemacht, mehr
auch nicht.
Und ich hatte in Info eine 5 und habe es abgewählt.
Oder sollen wir dir jetzt einen Grundlagenkursus geben ?
Ein wenig musst du schon mitarbeiten, auch wenn du es in der Schule wohl nicht gebraucht hast.
Das können wir nicht für dich nachholen.
Habe mich erst mal an den Zähler gewagt und zumindest einen hinbekommen, der schon mal aufwärts zählt:
const int buttonPin = 12;
int buttonState = 0;
int counter = 0;
int buttonStateHIGH = 0;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
{
buttonStateHIGH = 1;
}
if (buttonState == LOW && buttonStateHIGH == 1)
{
counter++;
buttonStateHIGH = 0;
}
Serial.println(counter);
}
Das funktioniert, nur habe ich manchmal Doppelzählungen, soll heißen bei einem
Tasten zählt er gleich zweimal. Und ich bekomme ihn bei 3 nicht wieder auf 1.
Jetzt musst du die Taster noch entprellen. Das geht mit bounce oder debounce.
Oder zum Testen einfach en kurzes delay(20); hinter die Tastenauswertung setzen.
Mit der Zeit in delay kannst du auch experimentieren.
Marino_needing_help:
Jetzt möchte ich das ganze gerne in eine While Schleife packen.
Warum? Du hast doch mit loop() schon eine Schleife. Und so wie Du das vorhast wird das eine saubere Endlosschleife ... Ersetze das 'while' lieber durch ein 'if'
Edit: ...und wieso steht das jetzt auf einmal im setup()?