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
DoubleClick
22.03.2015, 16:21
Beitrag #1
DoubleClick
Hallo,

ich habe einen Drehencoder mit einen eingebauten Taster,
ich wollte nun 2 funktionalitäten rein bekommen.

Click: alle Werte auf Null
Doppelclick: die Werte speichern und das Display ausschalten.

Erneuter Doppelclick: Display wieder anwerfen und die vorher gespeicherten Werte wieder anzeigen.

Der erste Versuch: OneButton Library:

Funktionierte in meinen Programm nicht, das Click-Event wurde in einer Endlosschleife aufgerufen und ich wusste nicht warum :-(

Wenn ich in das Click Event nur ein "Serial.println("Click")" drin hatte ging es , rief ich weitere Funktionen auf, war es in der Schleife????


Nächste Idee, baue ich es mir nach mit Messung der Zeit:

Code:
if (digitalRead(buttonNull)){
      difclick=millis()-lastclick;
      Serial.println(difclick);
      if(difclick<=400) {
         lc.clearDisplay(0);
         blockLCD=true;
         Serial.println("DBLCLICK");
      }
      else{
          blockLCD=false;
          DisplayVal=0;
          DisplayCurrentVal(DisplayVal);
          lastclick=millis();
      }
   delay(100);
  }

Geht soweit gut, aber ein Doppelclick sind zwei einfache Clicks :-( also nulle ich immer alles bevor der zweite Click erkannt wird.

Wie komme ich aus diesem Dilemma, die OneClick Library würde sich anbieten aber die Frage warum sie nicht geht. der Hardware Button ist mit einen echten Pulldown Widerstand verdrahtet, vielleicht das Problem?

Danke Gruß Alex
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.03.2015, 16:35
Beitrag #2
RE: DoubleClick
Mein Ansatz dafür wäre:

- wenn Klick und Zähler < 1 {
- millis() in Variable start speichern
- Zähler +1
}
- wenn millis() > start + 400 {
- wenn Zähler == 1 > ein Klick
- wenn Zähler > 1 doppelklick
- Zähler auf 0 stellen
}

Gruss Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.03.2015, 16:49
Beitrag #3
RE: DoubleClick
Hallo Ralf,

ich habe es so gelöst:

Bei einen Click merke ich mir den Wert und dann nulle ich, wird aus dem Click ein Doppelclick habe ich den Wert immer noch.

Ist das Display an und es kommt ein Click nullt er.

Ist das Display aus und es kommt ein click, schaltet er das Dispay an und zeigt den alten Wert wieder an.

Funktioniert super:

Code:
if (digitalRead(buttonNull)){
      difclick=millis()-lastclick;
      Serial.println(difclick);
      if(difclick<=400) {
         if (LastState){
           LastValDbl=LastVal;
           Serial.print("DBL Val:");
           Serial.println(LastValDbl);
           lc.clearDisplay(0);
           blockLCD=true;
           }
         else if (!LastState) {
          blockLCD=false;
          DisplayCurrentVal(LastValDbl);
           }
        
         Serial.println("DBLCLICK");
      }
      else{
          Serial.print("BLOCKLCD:");
          Serial.println(blockLCD);
          if(blockLCD){
            Serial.print("LASTVALDBL im Klick:");
            Serial.println(LastValDbl);
            DisplayVal=LastValDbl;
            blockLCD=false;
            DisplayCurrentVal(DisplayVal);
            }
          else {
          LastVal=DisplayVal;
          DisplayVal=0;
          DisplayCurrentVal(DisplayVal);
          lastclick=millis();
          }
      }
   delay(100);
  }

Danke schön!

Gruß Alex
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


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