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
  Super Mario Theme per Taster theo-rist 5 237 26.08.2020 19:15
Letzter Beitrag: hotsystems
  Mehrere LED's mit versch. Farben ansteuern Daiminium 15 817 06.08.2020 07:50
Letzter Beitrag: MicroBahner
  Arduno + Ethernet-Shield: HTML-Seite mit Taster für einmalige Auslösung RivaDynamite 1 318 22.06.2020 20:50
Letzter Beitrag: Tommy56
  Zwei Richtungen mit einem Taster FoxFactoy 12 869 19.06.2020 13:04
Letzter Beitrag: hotsystems
  Compiler-Schalter Rainer2 8 660 07.06.2020 13:34
Letzter Beitrag: Tommy56
  Mehrere Aktionen unterschiedlich oft mit While ausführen dreikommasieben 3 512 19.05.2020 17:11
Letzter Beitrag: dreikommasieben
  Wie mehrere Bedingungen in if-Definition einbauen? Gelegenheitsbastler 7 29.546 18.05.2020 09:53
Letzter Beitrag: SimonTau
  Betätigung d. Sensors soll Steuerung abschalten und nur über Taster einschalten Floydi 12 1.186 26.04.2020 07:47
Letzter Beitrag: MicroBahner
  Funk Fernbedienung Taster Abfrage kurz oder lange gedrückt Michi_exe 15 1.086 16.04.2020 17:19
Letzter Beitrag: Tommy56
  Stepper Motor mit zwei Taster bedienen / Fehler ohne Fehlermeldung Milano 6 814 21.03.2020 16:06
Letzter Beitrag: MicroBahner

Gehe zu:


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