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
  Taster an Interrupt - Prellen geschickter vermeiden als millis() zu prüfen? Flap 19 1.298 04.08.2017 08:10
Letzter Beitrag: Binary1
  Servo mit einem Taster und 433mhz steuern Thor Wallhall 63 2.263 29.07.2017 11:02
Letzter Beitrag: Thor Wallhall
  Taster als Schalter -> Blinker bino29 8 534 22.06.2017 07:21
Letzter Beitrag: hotsystems
Smile Motorsteuerung mit Taster Eggi123 11 709 26.02.2017 15:48
Letzter Beitrag: MicroBahner
  Arduino-UNO LED über Taster digital zum leuchten zu bringen IvKriz 9 586 18.02.2017 08:33
Letzter Beitrag: renid55
  Hilfe bei Taster huber5093 11 565 14.02.2017 19:26
Letzter Beitrag: Tommy56
  8 Taster an einem Pin Kitt 9 728 04.02.2017 18:51
Letzter Beitrag: ardu_arne
  Led Impuls beim Taster betätigen clemens5555 11 753 17.01.2017 20:00
Letzter Beitrag: renid55
  Über drei Taster zwei externe Timer steuern Sidamo 23 1.058 09.01.2017 20:12
Letzter Beitrag: Tommy56
  Led mit taster ausschalten Frankeg 17 1.203 07.01.2017 21:17
Letzter Beitrag: renid55

Gehe zu:


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