Wie programmiert man das Arduino ,sodass man z.B. den Taster 3 mal drücken muss,damit die LED leuchtet?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Einen Zähler, der die Tastendrücke zählt, eine If die nur reagiert, wenn die Anzahl der Tastendrücke erreicht wurde. Ggf einen Rücksetztimer, der wieder auf null stellt, wenn man zu lange braucht. Den Eingang entprellen, damit nicht fehlerhaft gezählt wird...


RareDevil  15.12.2021, 15:53

Ach noch was. Den Rücksetztimer nicht mit Delay realisieren, sondern mit millis() oder ebenfalls als Zähler und nur ein minimales Delay, damit die Tastenerkennung nicht zu lange ausgebremmst wird...

Bestimmtnichtso 
Beitragsersteller
 15.12.2021, 16:05

Das haben wir im Unterricht noch garnicht bearbeitet.Kriegt man das "leichter hin"?

RareDevil  15.12.2021, 16:11
@Bestimmtnichtso

Naja, leichter ist relativ... Du kannst auch pro Tastendruck einfach einen Merker setzen (Variable) und prüfen, ob die beim nächsten Tastendruck schon gesetzt ist und dann darauf eine weitere Variable setzen.. ect. Aber du musst auch hier dafür sorgen, dass der Tastendruck nur erkannt wird, wenn der Taster erneut gedrückt wird. Sonst rattert das beim gedrückt halten einfach so durch...

Ich kann mir aber nicht vorstellen, dass ihr eine Aufgabe bekommt, die ihr ncht in den Teilfunktionen alle besprochen habt. Und was Ihr alles gelernt habt, weiß ich nicht. Deshalb kann ich nur schreiben, wie ich es machen würde... Es gibt schließlich viele Wege zum Ziel...

Das ist kompliziert.

 
If (Tastendruck erkennbar) {
  while(Taster gedrückt){ delay(5); } //Warte bis Taster losgelassen wurde
  for(int i = 1; i<500; i++){
     delay(1);
     if (Tastendruck erkennbar) {
         while(Taster gedrückt){ delay(5); } 
         for(int i = 1; i<500; i++){
             delay(1);
         if (Tastendruck erkennbar) {
            LedAnschalten();
            Exit For;
            Exit For;
            }
         }
      }
   }
}

Bestimmtnichtso 
Beitragsersteller
 15.12.2021, 16:59

Mein Lehrer meinte ich solle das so machen:"Falls Taster gedrückt,erhöhe Variabel +1.Falls Variabel..." . Hab das nicht wirklich verstanden, was er geschrieben hat.

Elumania  15.12.2021, 17:04
@Bestimmtnichtso

Dann mach doch in die Void loop rein

If (Taster gedrückt){i++;}

delay um Zeit zu geben dass der Taster nicht mehr gedrückt ist.

If ( i ==3){ LEDanschalten;}

Außerdem muss int i = 0 eine globale Variable sein.

Bestimmtnichtso 
Beitragsersteller
 15.12.2021, 19:47
@Elumania

ich muss ja "int Taster gedrückt=(Zahl)" machen aber welche zahl soll ich da reinschreiben?

Elumania  15.12.2021, 20:11
@Bestimmtnichtso

Erst mal die Globale Variable. Die kommt vor die void setup außerhalb der geschweiften Klammern. Dort schreibst du hin

int Taster = 6;

Das bedeutet dann auch du schließt den Taster an Digital Pin 6 an. Du kannst übrigens auch eine andere Zahl verwenden zwischen 3 und 11.

Dann kommt die Initialisierung des Pins mit

pinMode(Taster, INPUT_PULLUP);

Dann später in der if kommt hin

if(digitalRead(Taster) == LOW) {

i++;

}

Eventuell funktioniert der Code auch wenn du statt LOW die Zahl 0 schreibst.

Elumania  15.12.2021, 20:43
@Bestimmtnichtso

Dann brauchst du keine Widerstände in die Schaltung einbauen bei den Tastern. Viel weniger Kabel. Wenn du das noch nicht hattest, dann nimmst du ganz normal INPUT und baust fleißig deine Widerstände ein so wie du das kennst.

Bestimmtnichtso 
Beitragsersteller
 15.12.2021, 20:54
@Elumania

int i=2;

void setup()

{pinMode(5,INPUT);

 pinMode(3,INPUT);

 pinMode(4,OUTPUT);

 

}

void loop()

{

if(digitalRead(5)==HIGH){ 

 delay(500);

 i=i+1;

 delay(500);

}

 if(i==5){digitalWrite(4,HIGH);

}

 if(digitalRead(3)==HIGH){

 delay(500);

 i=i+1;

 delay(500);

 }

   if(i==10){digitalWrite(4,HIGH);}
-------------------------------------------------------------
hab das so gemacht

Elumania  15.12.2021, 21:19
@Bestimmtnichtso

In Ordnung. Aber wenn i =5 ist geht die LED an und wenn i = 10 geht sie auch an, obwohl sie bereits an ist. Es passiert also nichts. Diese Zeile mir if(i==10)....macht so kein Sinn