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
taster entprellen
17.01.2014, 11:32
Beitrag #1
taster entprellen
Hi Community
ich bin neu in Arduino bzw. habe um genau zu sagen eigentlich keine ahnung von arduino und versuche einem freund zu helfen.
zusätzlich ist meine programmier erfahrung noch relativ gering.
ich habe jetzt also folgenden code:
Code:
//deklarieren der LEDs, des Tasters und des Buttoncounters
const int led0 = 0;
const int led1 = 1;
const int led2 = 2;
const int led3 = 3;
const int led4 = 4;
const int led5 = 5;
const int led6 = 6;
const int led7 = 7;
const int led8 = 8;
const int ledRED = 10;
const int button = 12;
int buttoncounter = 0;


void setup() {
  //LEDPins als Output initialisieren
  pinMode(led0, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(ledRED, OUTPUT);
  //Taster als Input initialisieren
  pinMode(button, INPUT);
}

void loop() {
  //Schleife um Fehlstart zu verhindern
  if (buttoncounter == 0){
  //Erste Tasterbetätigung mit Countererhöhung
  if (digitalRead(button) == HIGH){
    buttoncounter = 1;
  }
  else return;
  //Counter auslesen
  if (buttoncounter == 1){
    //Rote LED leuchtet
    digitalWrite(ledRED, HIGH);
  }
  //Taster prüfen
  if (digitalRead(button) == HIGH){
    buttoncounter++;
  }
  //Counter prüfen
  if (buttoncounter == 1){
    //Erste LED an
    digitalWrite(led0, HIGH);
    //Taster prüfen
    if (digitalRead(button) == HIGH){
      buttoncounter++;
    }
    //Delay
    delay(1000);
    //Taster prüfen
    if (digitalRead(button) == HIGH){
    buttoncounter++;
    }
    //Erste LED aus
    digitalWrite(led0, LOW);
  }
  else {
    //Alle LEDs aus
    digitalWrite (led0, LOW);
    digitalWrite (led1, LOW);
    digitalWrite (led2, LOW);
    digitalWrite (led3, LOW);
    digitalWrite (led4, LOW);
    digitalWrite (led5, LOW);
    digitalWrite (led6, LOW);
    digitalWrite (led7, LOW);
    digitalWrite (led8, LOW);
    digitalWrite (ledRED, LOW);
    //Counter zurücksetzen
    buttoncounter = 0;
    //Exit
    return;
  }
  if (digitalRead(button) == HIGH){
  buttoncounter++;
  }
  if (buttoncounter == 1){
    digitalWrite(led8, HIGH);
    if (digitalRead(button) == HIGH){
      buttoncounter++;
    }
    delay(1000);
    if (digitalRead(button) == HIGH){
    buttoncounter++;
    }
    digitalWrite(led8, LOW);
    digitalWrite(ledRED, LOW);
    buttoncounter = 0;
    return;
  }
  else {
    digitalWrite (led0, LOW);
    digitalWrite (led1, LOW);
    digitalWrite (led2, LOW);
    digitalWrite (led3, LOW);
    digitalWrite (led4, LOW);
    digitalWrite (led5, LOW);
    digitalWrite (led6, LOW);
    digitalWrite (led7, LOW);
    digitalWrite (led8, LOW);
    digitalWrite (ledRED, LOW);
    buttoncounter = 0;
    return;
  }
  }
  else (buttoncounter = 0);
}

der code ist etwas gekürzt da jede led gleich angesteuert wird.

ich möchte jetzt den taster entprellen, schaffe es aber nicht das ganze einzubinden.
kann mir da jemand helfen und das vllt sogar einbinden?
hoffe irgendwer kommt damit klar da ich mir hier die zähne ausbeisse

gruß
Tray
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.01.2014, 18:51
Beitrag #2
RE: taster entprellen
Hi,

ich habe grade Deinen Code mal überfolgen ...
Wenn ich das richtig sehe, dann fragst Du den Button mehrfach im Loop ab und zählst ihn dann einfach hoch. Je nachdem wie hoch der Counter ist, folgt eine Ansteuerung der Led.

Richtig?

Also zunächst mal reicht ein zähler im Loop, da er ja immer wieder von vorne beginnt.

Was Du machen könntest wäre einen Interrupt zu verwenden, der bei Auslösung immer einen hoch zählt. Damit hättest Du auch eine Entprellung, da er beispielsweise auf "falling" reagiert und dann erst wieder losgelassen werden muss.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.01.2014, 09:34
Beitrag #3
RE: taster entprellen
Hallo zusammen,
also Schalter oder Taster entprellen war für Mikrokontrollerzwecke schon immer eine sportliche Herausforderung. Ich habe es schon geschafft auf einen Tastendruck bis zu 50 Impulse zu zählen...und der Kontroller damals hatte nur 3 MHz Taktfrequenz...zum Vergleich taktet der Arduino mit 16 MHz was die Sache nicht einfacher macht. Aber möglicherweise gibt es eine Library mit einer Debounce Funktion....sucht mal in die Richtung...Idea
Und mit dem Interrupt löst sich das Problem mit dem prellen auch nicht.....der Interrupt schlägt dann nur öfters zu...
Aber am einfachsten ist es nachdem die Tastenauslösung erkannt wurde einfach mal ein delay(200); einzufügen.... dann müßte auf der Signalleitung Ruhe eingekehrt sein.
Die andere und sichere Variante ist eine Hardwareentprellung über ein RS Flip-Flop wozu man dann allerdings einen Wechslerkontakt in dem Taster/Schalter benötigt.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.01.2014, 10:27
Beitrag #4
RE: taster entprellen
Hallo zusammen. Hatte neulich das gleiche Problem. Habe dieses mit einem Kondensator ca. 10nF gegen Masse gelöst. Jetzt bekomme ich saubere Signale. Das wäre dann die Hardwarelösung...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.01.2014, 19:06
Beitrag #5
RE: taster entprellen
Du könntest nach der Buttonabfrage ein Delay einfügen, oder du nutzt die millis() Funktion (http://arduino.cc/en/Tutorial/BlinkWithoutDelay)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.01.2014, 13:30
Beitrag #6
RE: taster entprellen
Hallo,

auf
http://www.arduino.cc/playground/code/bounce
gibt es die Bounce-Library zum Entprellen von Tastern.

Georg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino-UNO LED über Taster digital zum leuchten zu bringen IvKriz 9 201 18.02.2017 08:33
Letzter Beitrag: renid55
  Hilfe bei Taster huber5093 11 141 14.02.2017 19:26
Letzter Beitrag: Tommy56
  8 Taster an einem Pin Kitt 9 341 04.02.2017 18:51
Letzter Beitrag: ardu_arne
  Led Impuls beim Taster betätigen clemens5555 11 354 17.01.2017 20:00
Letzter Beitrag: renid55
  Über drei Taster zwei externe Timer steuern Sidamo 23 501 09.01.2017 20:12
Letzter Beitrag: Tommy56
  Led mit taster ausschalten Frankeg 17 547 07.01.2017 21:17
Letzter Beitrag: renid55
  aufeinander Aufbauende Lichtaktion mit einem Taster Colby 9 402 17.12.2016 13:30
Letzter Beitrag: Colby
  mehrere Taster entprellen Kitt 15 831 24.10.2016 21:17
Letzter Beitrag: georg01
  Taster für mehrere Funktionen matthias3579 5 501 16.08.2016 16:00
Letzter Beitrag: StephanBuerger
  Steuern von 4 Servo mittels eines Taster und eines Potis Jackie09 17 907 16.07.2016 11:43
Letzter Beitrag: Binatone

Gehe zu:


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