Pages: [1]   Go Down
Author Topic: Taster / Button entprellen  (Read 5846 times)
0 Members and 2 Guests are viewing this topic.
Darmstadt
Offline Offline
Jr. Member
**
Karma: 1
Posts: 73
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey ich suche eine (ganz) einfache Art einen Taster / Button zu entprellen.

Meine Idee war:

 old_key = new_key;
 new_key = read_button();
 if( new_key == old_key){
   delay(200);
 }

hier wird aber meine Angabe sehr schwammig
Logged

Darmstadt
Offline Offline
Jr. Member
**
Karma: 1
Posts: 73
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah hab was gefunden dank google ;-)

taster_val = digitalRead(inputPin);           // Wert auslesen
  delay(10);                                    // 10 millisekunden warten
  taster_val_prell = digitalRead(inputPin);     // Wert nochmal abfragen
  if (taster_val == taster_val_prell)           // Nur wenn der Wert gleich ist (Taste schwingt nicht mehr so stark)
  {
    if(taster_val != tasterstatus)              // Ist es auch ein anderer Zustand als vorher?
    {
      if(taster_val == HIGH)                    // Ist der Zustand gedr�ckt?
      {
        lcd.clear();                            // LCD l�schen
        lcd.setCursor(, 0);                    // Oben links Cursor setzen
        if(wie_oft%2 == )                      // wenn der Status gechanced wird
        {                                       //   wird entweder die eine
          lcd.print("Test");
        }else
        {                                       //   oder die andere Nachricht ausgegeben
          lcd.print("Cocktailmaschine");
        }
        wie_oft++;                              // Erh�ht den Z�hler
      }
    }
    tasterstatus = taster_val;                  // Setzt den Status zur�ck
  }
Logged

Offline Offline
Full Member
***
Karma: 11
Posts: 246
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hm, mit dem delay(200) tust Du ja erstmal gar nichts. Beim loslassen des Knopes wird schon nicht mehr entprellt. Was spricht gegen die Bounce library? Die gibt es hier: http://playground.arduino.cc/Code/Bounce
Logged

Darmstadt
Offline Offline
Jr. Member
**
Karma: 1
Posts: 73
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

cool danke für den Tipp! Ich werde das gleich mal probieren.
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3053
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In einem einfachen Sketch reicht oft
Code:
taster_val = digitalRead(inputPin);           // Wert auslesen
if (taster_val != oldval)
{
    // normale Bearbeitung: losgelassen / gedrückt etc...
    oldval = taster_val;
   delay(10);              // 10 millisekunden warten, eine Änderung danach wird wieder eine echte sein.
}

10 ms sollten zum Entprellen reichen,
und wenn es nichts ausmacht, dass loop() beim Taste drücken/loslassen 10 ms dauert, braucht man nicht mehr.  
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn man den Taster HIGH-aktiv (also mit externem PULLDOWN Widerstand auf Masse) betreibt, kann man auch mit einem zusätzlichen Widerstand und einem Kerko von 100 nF zwischen Input und Masse entprellen.
Siehe: http://blog.cc-robotics.de/2007/03/25/entprellung-ohne-flipflop/
In dem Beispiel sind sogar beide (HIGH- und LOW-aktive) Varianten abgedeckt. Dann spart man sich die Softwareseite.
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3053
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Dann spart man sich die Softwareseite.


 smiley-confuse


Hardware-Entprellen ist ok, wenn die Signale nicht in einen Controller gehen. ( Sondern in einen Zähl-IC oder so )

Eine zusätzliche Zeile Code sollte billiger sein als jeder Kondensator, weniger Platz auf der Platine brauchen und nicht so leicht kaputt gehen.
Logged

Pages: [1]   Go Up
Jump to: