Wenn Du kein delay() verwendet wissen möchtest, warum verwendest Du dann den oben angegebenen Code?
https://github.com/dsyleixa/Arduino/.../ButtonClass.h
Zeile 146
Zeile 175
Wenn Du kein delay() verwendet wissen möchtest, warum verwendest Du dann den oben angegebenen Code?
https://github.com/dsyleixa/Arduino/.../ButtonClass.h
Zeile 146
Zeile 175
ich schrieb doch oben: die sollen auch noch weg.
Momentan verbessern sie das Prellen zwar schon (bei Prellen innerhalb der ersten 1ms), aber dennoch nicht gut genug für die ersten 20ms, und daher wollte ich alles rausschmeißen und per Kondensatoren entprellen (siehe TO Post).In der Button Class sind derzeit auch noch delay(1) drin, aber auch die sollen noch raus.
Wenn du aber den ButtonClass Code derart verbessern kannst, dass er SOWOHL perfekt bis 20ms entprellt ALS AUCH gar keine delays mehr verwendet:
HER DAMIT!![]()
Das ist mir klar4700µF Elkos würden aber bei weitem den verfügbaren Platz überschreiten![]()
Aber anders .... ?
Nimm doch statt delay(x) -> delayMicroseconds(x).
Du könntest auch mit millis() oder micros() arbeiten, bekommst ja dann die vergangene Zeit. und kannst also die Schleife immer wieder verlassen, solang eine gewisse Mindestzeit nicht vergangen ist.
Eigentlich wartet man nur darauf, dass der Taster eine gewisse Zeit nicht gedrückt wurde, um sicher zu gehen, dass er nicht mehr gedrückt ist.
Registriert man während dieser Wartezeit, dass der doch wieder gedrückt wurde oder ist, setzt man den Zähler zurück und wartet weiter, bis er die gewünschte Zeit eben nicht mehr gedrückt ist.
Mit millis() oder micros() weisst Du, wieviel Zeit vergangen ist und kannst deinen Zähler entspr. anpassen, bis der irgendwann auf 0 ist; dann ist der Taster nicht mehr gedrückt.
MfG
moppi,
es geht um 20ms, die man quasi nach dem 1. Drücken abfeiern muss -
- da ist es völlig wurscht, ob man die in microseconds oder milliseconds zählt.
Es darf aber ÜBERHAUPT KEINE WARTEZEIT geben!
Hast du dir mal die Mühe gemacht, den ButtonClass Code mit seiner State Machine anzusehen, für den die Entprellung gebraucht wird??
Du wartes da auf gar nichts. Ist ja nicht notwendig. millis() abfragen, vom Zähler abziehen -> Zähler = 0? Nein, zurück, weil Taste noch gedrückt (status mitgeben: bool return x). Ist doch 0? Ja, dann zurück, weil Taste nicht mehr gedrückt (status mitgeben). Die Zeit, die da verbraucht wird, ist halt die, für die paar Befehle. Aber kein Warten in dem Sinn, dass man da so und so viele Micros() oder Millis() in einer Schleife festhängt.
MfG
Lesezeichen