Wie programmiert man das Arduino ,sodass man z.B. den Taster 3 mal drücken muss,damit die LED leuchtet?
Ich schreibe morgen eine Arbeit zum Thema Arduino,also wollte ich noch die obrige Frage beantwortet bekommen.
2 Antworten
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...
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...
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;
}
}
}
}
}
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.
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.
ich muss ja "int Taster gedrückt=(Zahl)" machen aber welche zahl soll ich da reinschreiben?
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.
Was macht denn "INPUT_PULLUP"?Hatten wir auch noch nicht.
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.
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
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
Das haben wir im Unterricht noch garnicht bearbeitet.Kriegt man das "leichter hin"?