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
OneButton Library > erkennen, dass keine Taste gedrückt ist
24.11.2020, 20:54
Beitrag #1
OneButton Library > erkennen, dass keine Taste gedrückt ist
Hallo,

ich habe in einem Programm die OneButton Library von mathertel verwendet. Das funktioniert alles soweit auch ganz gut, also klick, doppelklick, long press (mit start, pressed, stop).

Nun möchte ich aber innerhalb einer der aufgerufenen Funktionen (z. B. doppelklick) eine (global definierte) Variable setzen und diese soll nach dem loslassen der Taste wieder zurückgesetzt werden. Dafür gibt es aber in der Library keine Funktion. Eine Abfrage auf "digitalRead (13) == LOW" dafür zu nehmen erscheint mir aber nicht sinnvoll, da hierbei kein prellen etc. berücksichtigt wird und beim Doppelklick auch in der Pause zwischen den beiden klicks dieser Zustand vorhanden ist.

Hat da da jemand eine Lösung dafür?

hier noch Auszüge aus dem Code:
Code:
OneButton button1(touchsensor_1, false);
OneButton button2(touchsensor_2, false);

Code:
// OneButton functions
// button 1
    button1.attachClick(click1);                                                    // bei click wird click1 ausgefuehrt
    button1.attachDoubleClick(doubleclick1);
    button1.attachLongPressStart(longPressStart1);
    button1.attachLongPressStop(longPressStop1);
    button1.attachDuringLongPress(longPress1);
    
// button 2
    button2.attachClick(click2);
    button2.attachDoubleClick(doubleclick2);
    button2.attachLongPressStart(longPressStart2);
    button2.attachLongPressStop(longPressStop2);
    button2.attachDuringLongPress(longPress2);

Code:
void click1() {
//    Serial.println("Button 1 click.");
    timeout_from_display_off_mode = true;
} // click1

in diesem Beispiel ginge es darum die Variable "timeout_from_display_off_mode" wieder auf false zu setzen wenn Button 1 nicht mehr gedrückt ist.

Danke für eure Hilfe.

Viele Grüsse
Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.11.2020, 21:54
Beitrag #2
RE: OneButton Library > erkennen, dass keine Taste gedrückt ist
Das dürfte nicht so einfach sein.
Die Lib prüft ja, ob Click, doubleClick und longClick.

Du könntest nach meinem Dafürhalten nur prüfen, ob keine dieser 3 Funktionen true zurück liefert. Dazu müsstest Du entsprechende Callbacks einrichten, die jeweils globale Variablen setzen/rücksetzen und diese dann auswerten.

Alles nur schnell ins unreine geschrieben. Es hängt auch mit davon ab, welche Tastendrücke Du überhaupt nutzt. Wenn alle, dann wird das aufwendig, auch vom Testen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.11.2020, 18:25
Beitrag #3
RE: OneButton Library > erkennen, dass keine Taste gedrückt ist
Hallo,

Hast du denn schon mal den Matthias direkt angefragt ?
Auf seiner Webseite ist doch seine Mail Adresse und Telefonnummer verlinkt.
Ich schätze seine DMX Software sehr und bin froh,
das ich mich mit ihm auf Deutsch unterhalten kann bei Fragen.

Gruß, Markus

Immer in Stress
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.12.2020, 20:08 (Dieser Beitrag wurde zuletzt bearbeitet: 01.12.2020 20:15 von RolandF.)
Beitrag #4
RE: OneButton Library > erkennen, dass keine Taste gedrückt ist
Hallo Ralf,
(24.11.2020 20:54)Foto-Ralf schrieb:  ....in diesem Beispiel ginge es darum die Variable "timeout_from_display_off_mode" wieder auf false zu setzen wenn Button 1 nicht mehr gedrückt ist.
an welcher Stelle fürst Du den button1.tick() aus?
In einem Timerinterrupt, oder in der Loop?
Vor oder nach dem button1.tick() wäre aus meiner Sicht der richtige Zeitpunkt die variable zurück zu setzen, je nachdem wann Du die Variable nutzen willst.
Wenn ich allerdings das timeout in dem Variablennamen sehe könnte es aber auch sein, dass Du die Varaible erst nach einer gewissen Zeit ohne Taste zurücksetzen willst, das wäre noch interessant zu wissen.

Viele Grüße
Roland
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2020, 05:36
Beitrag #5
RE: OneButton Library > erkennen, dass keine Taste gedrückt ist
(28.11.2020 18:25)Chopp schrieb:  Hallo,

Hast du denn schon mal den Matthias direkt angefragt ?
Auf seiner Webseite ist doch seine Mail Adresse und Telefonnummer verlinkt.
Ich schätze seine DMX Software sehr und bin froh,
das ich mich mit ihm auf Deutsch unterhalten kann bei Fragen.

Gruß, Markus

Hi,
ja ich hatte ihm vor geraumer Zeit schon eine Mail geschrieben aber leider keine Antwort darauf erhalten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2020, 05:53
Beitrag #6
RE: OneButton Library > erkennen, dass keine Taste gedrückt ist
(01.12.2020 20:08)RolandF schrieb:  Hallo Ralf,
(24.11.2020 20:54)Foto-Ralf schrieb:  ....in diesem Beispiel ginge es darum die Variable "timeout_from_display_off_mode" wieder auf false zu setzen wenn Button 1 nicht mehr gedrückt ist.
an welcher Stelle fürst Du den button1.tick() aus?
In einem Timerinterrupt, oder in der Loop?
Vor oder nach dem button1.tick() wäre aus meiner Sicht der richtige Zeitpunkt die variable zurück zu setzen, je nachdem wann Du die Variable nutzen willst.
Wenn ich allerdings das timeout in dem Variablennamen sehe könnte es aber auch sein, dass Du die Varaible erst nach einer gewissen Zeit ohne Taste zurücksetzen willst, das wäre noch interessant zu wissen.

Viele Grüße
Roland

Hi,

ich rufe den button1.tick() in der loop auf.

Der Name "timeout..." der Variablen hat nichts in Richtung nach einer gewissen Zeit zu bedeuten. In der Auswertung ob sie true oder false ist wird damit dann für eine gewisse Zeit (timeout) mittels LED's etwas angezeigt oder die LED's bleiben dunkel (Display_off_mode).

Die Variable vor dem Aufruf von button1.tick() zurückzusetzen hätte ja zur Folge, dass der nachfolgende button1.tick() z. B. beim Event click nicht nochmal die Variable setzen würde (weil ja nur einmal getriggert wird). Bei einem Event press würde die Variable dann ständig wechseln (zurückgesetzt, wieder gesetzt,...)

Die einzige Idee die mir noch gekommen wäre ist die Abfrage auf digital.read mit dem Status 0 und das mit der Entprellzeit verzögert. Ist aber auch nicht sonderlich schön da die Flankenrichtung und Entprellzeit ja in OneButton schon abgefragt / hinterlegt sind und man sich da wieder Probleme einhandeln kann wenn das nicht zusammenpasst... Und dann wäre ja noch die Zeit zwischen click loslassen und doppelklick detektieren - ist das dann schon losgelassen oder noch warten ob doch noch ein zweiter klick für den Doppelklick hinterherkommt ?!?
Das wäre innerhalb von OneButton mit denselben Parametern abzufangen, aber aussen drumrum was dazubauen um diese "fehlende" Funktion zu ersetzen ist fehlerträchtig. Und um die Library zu modifizieren bin ich leider nicht fit genug :-(
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2020, 09:11
Beitrag #7
RE: OneButton Library > erkennen, dass keine Taste gedrückt ist
Halllo Ralf,

(05.12.2020 05:53)Foto-Ralf schrieb:  ...Die Variable vor dem Aufruf von button1.tick() zurückzusetzen hätte ja zur Folge, dass der nachfolgende button1.tick() z. B. beim Event click nicht nochmal die Variable setzen würde (weil ja nur einmal getriggert wird). Bei einem Event press würde die Variable dann ständig wechseln (zurückgesetzt, wieder gesetzt,...)..
demnach ist der Name der Variablen mit dem Inhalt Timeout doch gerechtfertigt, da Du ja schreibst die Variable soll nicht gleich beim Loslassen wieder zurückgesetzt werden.
Dann würde ich vorschlagen, dass Du nach dem button1.tick() eine Abfrage mit millis() verwendest (dazu findest Du Anregungen z.B. bei Beispielen Blink ohne Delay) um zu prüfen ob eine gewisse Zeit in Millisekunden seit dem letzten setzen vergangen ist und dann entsprechend die Variable zurücksetzt. Anstelle der Verwendung von millis, kannst Du Dir auch mal die MobaTool von MicroBahner (ist auch Mitglied hier im Forum) anschauen. In seiner Library findest Du auch entsprechende Beispiele.

Grüße und viel Erfolg
Roland
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2020, 11:11
Beitrag #8
RE: OneButton Library > erkennen, dass keine Taste gedrückt ist
[/quote]
demnach ist der Name der Variablen mit dem Inhalt Timeout doch gerechtfertigt, da Du ja schreibst die Variable soll nicht gleich beim Loslassen wieder zurückgesetzt werden.
Dann würde ich vorschlagen, dass Du nach dem button1.tick() eine Abfrage mit millis() verwendest (dazu findest Du Anregungen z.B. bei Beispielen Blink ohne Delay) um zu prüfen ob eine gewisse Zeit in Millisekunden seit dem letzten setzen vergangen ist und dann entsprechend die Variable zurücksetzt. Anstelle der Verwendung von millis, kannst Du Dir auch mal die MobaTool von MicroBahner (ist auch Mitglied hier im Forum) anschauen. In seiner Library findest Du auch entsprechende Beispiele.

Grüße und viel Erfolg
Roland
[/quote]

Ja, das wird wohl die einzige Lösung sein. Wenn ich dann aber (beispielsweise) mit millis nach 1000 mS zurücksetze und (aus welchen gründen auch immer) in einer zukünftigen Version von OneButton der doppelklick erst nach 2000 mS detektiert wird habe ich eine Lücke von 1000 - 2000 ms nach dem loslassen in der die Variable schon zurückgesetzt ist aber dann doch noch ein Doppelklick von OneButton erkannt wird.

Danke für deine Hilfe und viele Grüsse
Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  SPI und I2C Library für ATtiny ? FrankHGW 10 302 15.06.2021 07:12
Letzter Beitrag: FrankHGW
  Library-Konflikt beim Signalgenerator-Projekt tapsi 6 436 16.05.2021 12:08
Letzter Beitrag: tapsi
  Library von GitHub ? Steinspiel 18 1.146 12.04.2021 19:20
Letzter Beitrag: Steinspiel
  Maixduino Board - keine Treiber rdangel 6 606 29.03.2021 14:18
Letzter Beitrag: Tommy56
  PCM Sound Library für RC PKW RC_Trucker_WN 4 440 22.03.2021 21:22
Letzter Beitrag: RC_Trucker_WN
  Library Ethernet: Nicht zu compilieren GuaAck 5 718 22.02.2021 17:31
Letzter Beitrag: Tommy56
  Keine Verbindung zum Board wenn CNC Shield aufgesteckt ist flotschibotschi 14 1.299 03.02.2021 17:35
Letzter Beitrag: flotschibotschi
  Library Fehler Karl Stanger 13 1.134 20.01.2021 17:29
Letzter Beitrag: Tommy56
  IDE Absturz - Findet keine LIB's mehr rev.antun 7 796 18.01.2021 22:01
Letzter Beitrag: Tommy56
  HM-10 iOS keine Daten Fred0 26 2.137 17.12.2020 18:23
Letzter Beitrag: Fred0

Gehe zu:


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