Go Down

Topic: Taster / Button entprellen (Read 6763 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