ist es möglich das man den Arduino so programmiert, dass wenn man einen Taster drückt erst eine gewisse Zeit abläuft bevor der Arduino mir die Ausgang auf HIGH schaltet?
Habe es schon mit dem BlinkWithoutDelay versucht jedoch keine Lösung gefunden, wäre sehr nett, wenn mir jemand helfen könnte. Meine Suche im Internet hat auch kein Ergebnis erzielen können.
BlinkWithoutDelay IST die Lösung ... Du musst nur das Konzept dahinter verstehen. Wenn die Taste gedrückt wird, merkst Du Dir den aktuellen Wert von Milis() in einer Variable. Dann vergleichst Du in der Hauptschleife, ob Millis() - DeinemGemerktenWert >= DeineGewünschteVerzögerung ist (natürlich nur, wenn die "Merk-Variable" > 0). Wenn ja, dann Ausgang schalten und "Merk-Variable" wieder auf 0 setzen.
Ja das ist möglich.
Wenn Du schon mit BlinkWithoutDelay gespielt hast, dann ist der Rest recht einfach.
Du merkst Dir einfach den aktuellen millis() Wert wenn der Taster gesrückt wird und vergleichst in loop() immer gegen den Wert plus die Zeit die vergehen soll plus dem gemerkten Wert. Sobald der größer ist, ist die Zeit "abgelaufen" (sprich die Verzögerung) und Du kannst Deine Aktion starten.
Aus Libraries lernt man nichts und Entprellen braucht man hier nicht, da ja erst was passieren soll, wenn der Taster schon lange wieder in Ruhe ist.
Du hast nur vergessen zu erwähnen, wann der Ausgang wieder auf LOW zurücksoll.
Wenn du es nicht selbst hinbekommst, kannst du ja mal hier per copy/paste spicken. #define TASTER 2 // Pin 2 über Taster mit GND verbinden #define TASTERMODUS INPUT_PULLUP #define PRESSED LOW
#define LED 13 #define DELAY 5000 // 5 sec nach Taster geht LED an, mit neuem Drücken erstmal wieder aus
@Whandall:
Ok, etwas präziser: Aus Libraries lernt man nichts, wenn man nur ein mitgeliefertes Beipiel ans Laufen kriegt. Man kann sich auch die Innereien der verwendeten Libraries anschauen.
Und in diesem Fall komme ich sogar ohne State-Change-Detection aus.
Meine LED geht direkt beim Taster-Berühren aus und eine gewisse Zeit nach dem Loslassen wieder an.
Einfache Aufgaben sollte man auch einfach lösen und nicht ohne Grund Libraries vorführen, die sicher generell ihre Berechtigung haben, weil sie einiges von dem bequem verstecken, was abläuft.
@Marvin97:
Wenn die LED nicht ganz von allein nach Start verzögert loslegen darf, brauchst du übrigens noch den Merker, den mgcss angedeutet hat. Und wenn du erreichen willst, dass die LED jemals wieder dauerhaft ausgeht, ohne dass du regelmäßig deine Verzögerungstaste drückst, solltest du deine Aufgabe/Fragestellung überarbeiten
Das war nicht genau definiert. "Eine gewisse Zeit nach dem Tastendruck" ist ziemlich unspezifisch.
Dir ist sicher bewusst, dass man kurzes Tastendrücken erst beim Loslassen der Taste erkennen kann. Wenn langes Drücken eine andere Funktion auslösen soll. Da hat sich noch nie jemand wirksam beschwert, dass die Funktion erst nach dem Antippen startet.
Wenn Marvin geschrieben hätte, dass die LED angehen soll, nachdem man eine gewisse Zeitlang den Taster gedrückt gehalten hat, hätte ich wohl eine andere Lösung präsentiert (natürlich auch ohne Bounce)
vielen Dank ersteinmal für die Hilfe, hab es soweit geschafft.
Die Fragestellung war eigentlich gemeint, dass wenn man den Taster kurz betätigt eine Zeit von z.B. 5 Sekunden abläuft bevor der Ausgang z.B. Pin2 vom Arduino auf HIGH gesetzt wird.
bei der fragestellung wäre es auch möglich, daß der taster eine gewisse zeit gedrückt BLEIBEN muß, bevor der arduino schaltet.
gruß stefan
Whandall:
Was heisst 'Taster kurz betätigt'?
Soll das nicht passieren wenn man den Taster lange drückt?
Wann sollen die 5 Sekunden starten, beim Drücken der Taste, oder beim Loslassen?
Hallo,
gemeint war es, das der Taster einmal kurz betätigt wird, sprich der Pin an dem der Taster ist kurz auf HIGH geht. Die Zeitverzögerung sollte beim loslassen des Taster starten und dann nach ablauf der 5 Sekunden die LED am Ausgang auf HIGH schalten.
Durch einen anderen Taster sollte die LED dann wieder ausgehen.
Den Sektch den ich dazu geschrieben hat funktioniert jetzt auch, so wie es soll!
Marvin97:
der Taster einmal kurz betätigt wird, sprich der Pin an dem der Taster ist kurz auf HIGH geht.
Kurz heisst? 1ms? 100ms? 500ms?
Marvin97:
Die Zeitverzögerung sollte beim loslassen des Taster starten und dann nach ablauf der 5 Sekunden die LED am Ausgang auf HIGH schalten.
Durch einen anderen Taster sollte die LED dann wieder ausgehen.
Das ist neu und wäre erwähnenswert gewesen.
Marvin97:
Den Sektch den ich dazu geschrieben hat funktioniert jetzt auch, so wie es soll!