Mehrere Taster/Schalter entprellen und verwalten
|
06.02.2020, 09:17
Beitrag #9
|
|||
|
|||
Integriert in MobaTools: Mehrere Taster/Schalter entprellen und verwalten
Hallo,
Die MoToButton-Lib ist inzwischen in die aktuelle MoBaTools-Version eingeflossen. Der Name der Klasse ist dort aber MoToButtons. Die Version steht auch bereits im Bibliotheklsmanager zur Verfügung. Details können in der Doku nachgelesen werden. Gruß, Franz-Peter |
|||
07.02.2020, 13:53
(Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2020 13:54 von RolandF.)
Beitrag #10
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
Hallo Franz-Peter,
(30.01.2020 22:04)MicroBahner schrieb:Jetzt hatte ich endlich mal Zeit mein Sketch mit Deiner Library umzusetzen.(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 Der Vorteil Deiner Library ist nicht mal in erster Linie der kleinere Speicherverbrauch, den bringt es zwar auch, nö der Hauptvorteil für mich ist die Indizierung, dadurch spare ich etliche Zeilen Programmcode und die Anwendung ist skalierbarer. Das kommt daher, da ich für jede neue Eingabetaste eine weiter Ausgabezeile auf dem grafischen Display hinzufüge. Da ich die Ausgabezeile auch über Indizes verwalte benötige ich für einen zusätzlichen Tastenzähler nun nur noch einen weiteren InputPin in dem Array tasterPinNr (Perfekt). Neues Programm mit MoBaTools nur loop() (MoToButton.h) Code: void loop() { Hier mal der Speicherverbrauch: Alt (OneButton): Neu(MoBaTools): Eine Kleinigkeit vermisse ich jedoch bei Deiner Library gegenüber der OneButton-Library. Das ist das DoubleClick Event, in meinem aktuellen Fall ist das nicht tragisch, wird auch wahrscheinlich im Arduino-Umfeld selten gebraucht, aber generell ist es schon elegant sich um den Doppelklick nicht selbst kümmern zu müssen. Dann hätte ich auch noch ein Anregung. Ein großer Vorteil Deiner Library ist die Möglichkeit beliebige Arten von Eingabetasten zu nutzen, dafür hast Du die ja die User Callback-Funktion eingeführt. Ich vermute mal, dass als Eingabe sehr häufig die Taster direkt an die Eingabepins angeschlossen werden. Was hälst Du von einem zusätzlich Konstruktor der als ersten Parametern das Tastaturarry übergibt , dieser Konstruktor führt die in Deinem Beispiel aufgeführten Code der CallBack-Funktion direkt aus: Code: button_t tasterTemp = 0; Danke noch mal für Deine tolle Arbeit ![]() Grüße Roland |
|||
07.02.2020, 14:29
Beitrag #11
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
Hallo Roland,
es freut mich natürlich, wenn Du meine neue Klasse gut verwenden kannst ![]() Das Double-Click Event hatte ich bewusst weggelassen. Ich denke, dass es in unserem Umfeld eher weniger genutzt wird, und um es zu realisieren würden wieder einige Resourcen benötigt, die dann in den meisten Fällen brach liegen. Vielleicht mach ich irgendwann mal eine eigene Variante dafür, falls da 'Nachfrage' besteht. Die Idee, eine Variante ohne Callback zu machen, falls alle Taster direkt an Inputpins angschlossen sind kann ich mir aber schon vorstellen. Das scheint mir eher nutzlich ![]() Gruß, Franz-Peter |
|||
15.02.2020, 11:02
(Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2020 11:14 von MicroBahner.)
Beitrag #12
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
Hallo,
ich habe Rolands Idee jetzt doch mal aufgegriffen - sowohl was das interne Abfragen der Pins in einfachen Fällen ( Taster direkt an Pins angeschlossen ) als auch was das 'Doppelklicken' betrifft. Für's Doppelklicken habe ich eine Variante gefunden , die die Ressourcen doch nicht allzusehr belastet. Es braucht nur je eine Bitleiste für single-Klick und double-Klick Events. Das Ganze steht zur Zeit noch in einem eigenen Branch auf GitHub. Für die interne Tasterabfrage muss beim Konstruktor anstelle der Callback-Funktion die Adresse eines Arrays mit den Pinnumern, und die Zahl der Pins übergeben werden. Die Zeit für das Klicken kann als optionaler Parameter am Ende angehängt werden. Default ist 300ms. Zur Abfrage auf Klcken gibt es die neue Methode 'clicked'. Die liefert entweder NOCKLICK (=0) wenn nichts passiert ist, SNGLECLICK (=1) wenn einmal geklickt wurde oder DOUBLECLICK (=2) wenn 2x geklickt wurde. Nach Aufruf der Methode ist das Event gelöscht, d.h. weitere Aufrufe geben wieder 'NOKLICK' zurück ( bis wieder geklickt wurde ). In den Beispielen gibt es den Sketch PrintStates2 in dem das gezeigt wird. N.B. 'shortPress' und 'singleClick' sind übrigens 2 verschiedene Dinge: Bei einem Doppelklick werden auch 2 shortPress Events erzeugt, aber natürlich kein Einfach-Klick Event . Außerdem sind die Zeiten gegebenenfalls unterschiedlich. Man fragt ja üblicherweise auch nur nach den Events ab, die einen für den entsprechenden Taster interessieren. Bei Schaltern machen die zeitabhängigen Events z.B. normalerweise gar keinen Sinn. Gruß, Franz-Peter |
|||
16.02.2020, 09:01
Beitrag #13
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
Hallo Franz-Peter,
das hört sich ja super an, ich werde das heute heute Nachmittag mal testen und dann von meinen Erfahrungen berichten. Ich entwickle meine Projekte mit PlattformIo unter VSCode, mal schauen ob ich den eigenen Branch da schon einbinden kann. Grüße und einen schönen Sonntag Roland |
|||
16.02.2020, 09:18
Beitrag #14
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
Hallo Roland,
wenn Du Libraries aus .zip-Dateien installieren kannst, sollte das gehen. Wenn Du die .zip-Datei aus dem Branch herunterlädst, musst Du gegebenenfalls nur den Verzeichnisnamen der Lib umbenennen. Das ist die einzige Stelle, wo der Branch-name vorkommt. Gruß, Franz-Peter |
|||
18.02.2020, 13:56
Beitrag #15
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
Hallo Franz-Peter,
es hat jetzt doch etwas länger gedauert bis ich die Zeit gefunden habe Deine neue Library zu testen. Als ich dann Zeit fand, hat mein Plattformio etwas herumgezickt als ich Deine Library per Download installiert habe. Ich musste zunächst die Datei ".library.json" in den Libraryordner aufnehmen und mit einer neuen Version und Id versorgen, da ich ja Deinen Master-Branch ebenfalls noch installiert hatte. Das hat dann aber geklappt. Deine neuen Erweiterungen habe ich dann gleich integriert und es hat alles funktioniert. Auf den neuen Konstruktor werde ich zukünftig regelmässig zurückgreifen, das macht das Programm noch einmal übersichtlicher. Doppelklick Event hat ebenfalls funktioniert, wie das in der Library OneButton auch ist, schränkt das natürlich für die dafür verwendete Taste dann den Zeitrahmen für den Einzelklick ein, das liegt aber in der Natur der Sache, man muss ja die Zeitrahmen für Einzelklick, Doppelklick, longPress und shortPress unter einen Hut bringen . Ich werde das daher auch nur für die Tasten nutzen bei denen ich auch wirklich den doppelklick benötige, ansonsten wird short- und longPress zum Einsatz kommen. Vielen Dank noch mal an Dein tolle Arbeit ![]() Grüße Roland |
|||
18.02.2020, 15:36
Beitrag #16
|
|||
|
|||
RE: Mehrere Taster/Schalter entprellen und verwalten
Hallo Roland,
super, wenn Du es einsetzen kannst, und es so ist wie Du dir vorgestellt hast. Danke auch für's testen. Dann werde ich jetzt noch die Doku anpassen, und es als neue Version freigeben. In letzter Zeit hat's ja direkt eine Versionsflut gegeben ... aber wenn jetzt keine Fehler gemeldet werden wird erstmal etwas Ruhe einkehren, und ich werde mich auch wieder mal mehr um meine Moba kümmern ![]() Gruß, Franz-Peter |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste