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
  mehrere Taster entprellen Kitt 15 504 24.10.2016 21:17
Letzter Beitrag: georg01
  Taster für mehrere Funktionen matthias3579 5 345 16.08.2016 16:00
Letzter Beitrag: StephanBuerger
  Steuern von 4 Servo mittels eines Taster und eines Potis Jackie09 17 751 16.07.2016 11:43
Letzter Beitrag: Binatone
  Schwellwert mit Taster ändern malsehen 16 1.410 12.04.2016 20:11
Letzter Beitrag: malsehen
  3 Schrittmotoren, 2 LED's 1 Taster cichla 0 389 31.03.2016 15:21
Letzter Beitrag: cichla
  Arduino Alarmanlage mit Taster erweitern Vengance 0 521 22.03.2016 17:54
Letzter Beitrag: Vengance
  Taster abfragen Rudi 3 688 25.02.2016 14:03
Letzter Beitrag: hotsystems
  digitalOutputpin mit Taster an- oder ausschalten Raptor 2 566 26.12.2015 20:59
Letzter Beitrag: torsten_156
  Problem mit Taster eddykett 0 778 23.08.2015 10:16
Letzter Beitrag: eddykett
  Taster-Programm TheTerrawr 2 1.056 06.08.2015 16:24
Letzter Beitrag: TheTerrawr

Gehe zu:


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