Go Down

Topic: Taster / Button entprellen (Read 7737 times) previous topic - next topic

BigInteger

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

BigInteger

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
  }

sven222

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

BigInteger

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

michael_x

In einem einfachen Sketch reicht oft
Code: [Select]
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.  

mkl0815

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.

michael_x

Quote
Dann spart man sich die Softwareseite.


:~


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.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy