INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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:  
(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.
Nach meinem Urlaub (Skifahren)werde ich das noch mal mit Deiner Lib umsetzen.
Da bin ich auf deine Erfahrungen gespannt. Bei 8 Tastern braucht die OneButton doch schon ganz ordentlich RAM. Mein Ansatz ist aber deutlich anders Wink - da wirst Du dein Programm schon umschreiben müssen.
Jetzt hatte ich endlich mal Zeit mein Sketch mit Deiner Library umzusetzen.
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() {
    for (size_t i = 0; i < anzahlTaster; i++) {
        if (Taster.pressed(i)) {
            counter[i] += 1;
            PrintCounter(i, counter[i], warning[i]);
            HintergrundAn = true;
            digitalWrite(BELEUCHTUNG, HIGH);
            startBeleuchtung = millis();
        }
        if (Taster.longPress(i)) {
            counter[i] = 0;
            PrintCounter(i, counter[i], warning[i]);
            HintergrundAn = true;
            digitalWrite(BELEUCHTUNG, HIGH);
            startBeleuchtung = millis();
        }
    }

    if (SaveCounter) {
        Save();
    }

    if (HintergrundAn && (millis() > (startBeleuchtung + BELEUCHTUNGSDAUER))) {
        HintergrundAn = false;
        digitalWrite(BELEUCHTUNG, LOW);
    }
}

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;
    for (byte i = 0; i < anzahlTaster; i++) {
        bitWrite(tasterTemp, i,
                 !digitalRead(tasterPinNr[i]));  // Fragt den Taster ab und
                                                 // merkt sich den Status
    }
Damit kann sich der Anfänger noch die User-Calback-Funktion sparen.

Danke noch mal für Deine tolle Arbeit Exclamation

Grüße
Roland
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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 Cool .

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 Wink

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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 Exclamation
Grüße
Roland
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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 Wink

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Mehrere If-Schleifen werden grundlos immer wieder durchlaufen LK2567 3 206 18.02.2021 15:41
Letzter Beitrag: LK2567
  Zähler mit Taster und Serial Monitor LK2567 16 711 16.02.2021 22:37
Letzter Beitrag: Bitklopfer
  Werte im Display per Taster wechseln bmxruler 8 457 27.01.2021 11:22
Letzter Beitrag: bmxruler
  Mehrere Delays nacheinander Jojo58 5 359 13.01.2021 23:14
Letzter Beitrag: Jojo58
Sad nrf24L01: ein Sender mehrere Empfänger louard 6 479 11.01.2021 22:25
Letzter Beitrag: louard
  mehrere Routinen parallel laufen lassen PurpleLightning 14 915 30.12.2020 08:44
Letzter Beitrag: PurpleLightning
  Fernsteierungsimpuls Taster/Schalter unterschiedliche Reaktion do1xxy 20 907 21.12.2020 08:24
Letzter Beitrag: do1xxy
  Servo im Programm über einen Taster betätigen CB2311 26 1.417 08.12.2020 19:21
Letzter Beitrag: Tommy56
  Super Mario Theme per Taster theo-rist 5 645 26.08.2020 19:15
Letzter Beitrag: hotsystems
  Mehrere LED's mit versch. Farben ansteuern Daiminium 15 1.688 06.08.2020 07:50
Letzter Beitrag: MicroBahner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste