Mehrere Taster/Schalter entprellen und verwalten
|
30.01.2020, 17:08
Beitrag #1
|
|||
|
|||
Mehrere Taster/Schalter entprellen und verwalten
Hallo,
es gibt ja eine ganze Reihe Libs, die sich mit dem Thema mechanische Schalter und dem Entprellen beschäftigen. Allerdings fokussieren die ( zumindest die ich kenne ) sich alle auf einen einzelnen Taster oder Schalter. Setzt man die dann mehrfach ein, verbrauchen sie ziemlich viel Ressourcen. In dem Umfeld, in dem ich mich viel tummele ( der Modellbahnerei ) hat man es eher mit vielen Eingabeschaltern und Tastern zu tun. Da ist es dann häufig sinnvoll, Portexpander ( I2C ) oder/und eine Tastaturmatrix zu nutzen. Das wird von diesen Bibliotheken aber auch nicht unterstützt. Aufgrund einer konkreten Anfrage habe ich mich deshalb mal daran gemacht, dafür eine möglichst allgemeingültige Lösung zu finden. Ziele:
Die Doku ist noch etwas rudimentär ( Kommentare in der .h-Datei und ein Beispielsketch ), aber falls jemand Interesse hat, würde ich mich über Rückmeldungen freuen. Gruß, Franz-Peter |
|||
30.01.2020, 20:56
Beitrag #2
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
(30.01.2020 17:08)MicroBahner schrieb: Hallo,Hallo Franz-Peter, ich hatte gerade letztens für einen Bekannten ein kleines Projekt mit 8 Tastern umgesetzt, das hatte ich noch mit OneButton realisiert. Nach meinem Urlaub (Skifahren)werde ich das noch mal mit Deiner Lib umsetzen. Von Deiner Mobatools-Lib war ich ja schon mal begeistert, also gehe ich davon aus, dass das mit dieser Lib auchwieder so wird. Diesen Erfolgsdruck hast Du Dir also selbst zuzuschreiben ![]() Grüße Roland |
|||
30.01.2020, 21:30
(Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2020 21:30 von Tommy56.)
Beitrag #3
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
@MicroBahner: Wie ist das zu verstehen?
processButtons() soll oft aufgerufen werden, aber nicht kürzer, als die Entprellzeit, sonst wird die pressTime falsch. Da geht es doch nach meiner Meinung um Verfälschungen < Entprellzeit? Die dürften in der Praxis doch kaum ins Gewicht fallen, wenn es handbetätigte Buttons sind Die hardcodierte Größe (8/16/32 Bit) könnte man evtl. durch ein template verallgemeinern, so dass man die gleiche Lib ohne Codeänderungen z.B. in Sketchen mit 8 und welchen mit 16 Bit benutzen kann. Ansonsten wieder eine schöne Arbeit. Besonders die Idee mit dem Callback finde ich gut, damit kann man beliebige HW für die Buttons rein hängen. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
30.01.2020, 22:04
(Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2020 22:07 von MicroBahner.)
Beitrag #4
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
(30.01.2020 20:56)RolandF schrieb: ich hatte gerade letztens für einen Bekannten ein kleines Projekt mit 8 Tastern umgesetzt, das hatte ich noch mit OneButton realisiert.Da bin ich auf deine Erfahrungen gespannt. Bei 8 Tastern braucht die OneButton doch schon ganz ordentlich RAM. Mein Ansatz ist aber deutlich anders ![]() (30.01.2020 21:30)Tommy56 schrieb: @MicroBahner: Wie ist das zu verstehen?Das habe ich wohl nicht richtig bzw. missverständlich beschrieben. Das Problem tritt auf, wenn processButtons zu selten aufgerufen wird, also in Intervallen die größer als die Entprellzeit sind. Beliebig kürzer als die Entprellzeit ist kein Problem, und sollte der Normalfall sein. Derzeit wird die 'pressTime' intern in 'entprellzeit' Einheiten gezählt. Da komme ich mit einem Byte aus, was RAM spart ( den Zähler braucht man ja für jeden Taster ). Das könnte man aber sicher noch optimieren. Ist ja erst ein erster Ansatz. (30.01.2020 21:30)Tommy56 schrieb: Die hardcodierte Größe (8/16/32 Bit) könnte man evtl. durch ein template verallgemeinern, so dass man die gleiche Lib ohne Codeänderungen z.B. in Sketchen mit 8 und welchen mit 16 Bit benutzen kann.Da habe ich auch schon dran gedacht, und es gibt auf GitHub auch schon einen Branch (Templates) dazu. Allerdings hat das auch so seine Tücken, da das ja zur Compilezeit aufgelöst wird. In eine eigen cpp kann man das dann nicht auslagern, da dort zur Compilezeit nicht bekannt ist, was der Sketch haben will. Ausserdem ist die Instanziierung dann etwas komplexer und für die Einsteiger sicher recht ungewöhnlich. Bei Klassen muss man den gewünschten Typ mit übergeben. Funktionstemplates sind da einfacher handhabbar. Da weis ich noch nicht, was letztendlich die beste Lösung ist. Ich habe auch noch nicht sehr viel Erfahrung mit Templates. Gruß, Franz-Peter |
|||
30.01.2020, 22:46
Beitrag #5
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
Dann schau Dir bitte nochmal die Beschreibung bezüglich des Aufrufs in der Headerdatei an.
Zitat:if its called less then debTime, pressTime will be inaccuratesagt nach meinem Verständnis dann das Falsche aus. Zum Template: Der Anwender weiß (oder sollte es wissen) zur Compilezeit, wieviele Taster er hat. Deshalb sollte eine Anlage Code: MaToButton<uint16_t> Es geht ja nicht um eine dynamische Anlage zur Laufzeit. Ja, Templates müssen in den Header. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
31.01.2020, 09:10
(Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2020 09:14 von MicroBahner.)
Beitrag #6
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
(30.01.2020 22:46)Tommy56 schrieb: Dann schau Dir bitte nochmal die Beschreibung bezüglich des Aufrufs in der Headerdatei an.Ja, das ist zumindest missverständlich. Deutlicher ist: Zitat:if its called less frequently than debTime, pressTime will be inaccurateSo habe ich das jetzt geändert. (30.01.2020 22:46)Tommy56 schrieb: Zum Template: Der Anwender weiß (oder sollte es wissen) zur Compilezeit, wieviele Taster er hat. Deshalb sollte eine AnlageJa, das funktioniert natürlich. Im Branch Templates ist das in dem Beispiel ja auch so gemacht und es läuft. Allerdings gehören templates sicher nicht zum Standardwissen des durchschnittlichen Arduino-Nutzers, und dementsprechend ist diese Syntax da erstmal neu und verwirrend. Allerdings: Wenn eh der ganz Code ins .h-File muss, könnte man das auch mit einem optionalen #define vor dem #include lösen. Standardmässig wird z.B. 16Bit genutzt, und mit dem #define könnte man den Standard überschreiben. Das dürfte für die Meisten einfacher sein. So wie jetzt, mit der Anpassung direkt im .h-File, ist jedenfalls nicht optimal ![]() Gruß, Franz-Peter |
|||
31.01.2020, 12:22
Beitrag #7
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
(31.01.2020 09:10)MicroBahner schrieb: Allerdings: Wenn eh der ganz Code ins .h-File muss, könnte man das auch mit einem optionalen #define vor dem #include lösen. Standardmässig wird z.B. 16Bit genutzt, und mit dem #define könnte man den Standard überschreiben. Das dürfte für die Meisten einfacher sein.Das wäre auch eine sehr gute Lösung, die die allgemeine Verwendbarkeit erhält. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
31.01.2020, 17:43
Beitrag #8
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
Ja, eigentlich gefällt mir das auch am Besten, weshalb ich den 'master' Branch auf GitHub jetzt mal darauf umgestellt habe.
Gruß, Franz-Peter |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste