prellfrei tasten ohne viel Schnickschnack

Gast #3510392
Lesenswert?

Hallo :-)

ich habe mal einen Code für den Arduino geschrieben der ganz einfach 
gehalten ist und ohne Probleme funktioniert.

Man kann mit einem Taster eine LED einschalten und wenn der Taster 
erneut gedrückt wird wieder ausschalten und das ohne die Befehle millis 
oder long oder delay und natürlich auch ohne goto.

Es gibt zahlreiche Beispiele u.a. auch von Arduino selbst wie z.B. der 
Code Debounce. Dieser Programmcode ist aber größer als meiner und 
zusätzlich muss man auch noch ein Widerstand an den Taster mit 
anschließen was ich persönlich als unnütz empfinde, da prellfreies 
Tasten auch ohne zusätzliche Bauteile funktioniert.

Hier mein Code:
1
const int Taster=2;
2
const int Led=8;
3

4
int Status=0;
5

6
void setup()
7
{
8
 pinMode(Taster,INPUT);
9
 pinMode(Led,OUTPUT);
10
}
11

12
void loop()
13
{
14
 if(digitalRead(Taster)!=LOW)
15
 {
16
  Status=0;
17
 }
18

19
 if((digitalRead(Taster)==LOW)&&(Status==0))
20
 {
21
  if(digitalRead(Led)!=HIGH)
22
  {
23
   digitalWrite(Led,HIGH);
24
  }
25
   else
26
  {
27
   digitalWrite(Led,LOW);
28
  }
29
  
30
  Status=1;
31
 }
32
}

Der Taster muss mit GND verbunden werden. Man kann den Taster auch an 
Vcc anschließen. Dazu müssen aber die Befehle für den Taster LOW durch 
HIGH ersetzt werden.

Viel Spaß :)
#3510406
Lesenswert?

André schrieb:
> Hallo :-)
>
> ich habe mal einen Code für den Arduino geschrieben der ganz einfach
> gehalten ist und ohne Probleme funktioniert.

Und nur deswegen funktioniert, weil da noch ein Arduino Überbau 
existiert bzw. digitalRead so langsam ist.
Entprellen tut der Code gar nichts. Wenn das Programm schneller ablaufen 
würde dann würde deine LED nach wie vor jeden Preller mitmachen, weil 
status munter mit jedem Preller munter vor sich hingetoggelt wird.

Was du da hast ist eine Flankenerkennung. Aber keine Entprellung.
Gast #3510420
Lesenswert?

André schrieb:
> OK aber es funktioniert, da der Befehl des Tastens oder nicht Tastens
> nur einmal ausgeführt wird, egal wie oft der Arduino die loop-Schleife
> durchläuft.

Nein tut es auch nicht weil der Taster prellt und damit deine Bedingung 
teilweise durchweg erfüllt sind.

André schrieb:
> Dieser Programmcode ist aber größer als meiner und
> zusätzlich muss man auch noch ein Widerstand an den Taster mit
> anschließen was ich persönlich als unnütz empfinde, da prellfreies
> Tasten auch ohne zusätzliche Bauteile funktioniert.

Auch das hat mit dem Programm nichts zu tun. Das hat nur damit zu tun, 
dass wohl irgendwie die Pullups beim Arudino automatisch an sind ??! 
Oder du hast den Taster halt in der Schwebe während des Schaltvorgangs.
#3510421
Lesenswert?

André schrieb:
> OK aber es funktioniert, da der Befehl des Tastens oder nicht Tastens
> nur einmal ausgeführt wird, egal wie oft der Arduino die loop-Schleife
> durchläuft.

Sag ich ja.
Du hast eine Flankenerkennung.
Die Entprellung ist nur Zugabe, bedingt durch die 
Ausführungsgeschwindigkeit eines (deines) Ardino. Nimm einen der neuen 
ARM Arduinos und einen Taster der schon reichlich prellt und deine 
Entprellung ist für den Hugo. Die Flankenerkennung funktioniert weiter, 
aber das Nicht-Entprellen macht dir trotzdem als Anwender das Leben 
schwer.
Gast #3510426
Lesenswert?

Mein Problem war immer, dass das Tasten nicht richtig erkannt wurde 
(eben durch das prellen) und die LED mal eingeschaltet blieb und mal 
nicht.

Mit meinem jetzigen Code habe ich keinerlei probleme mehr. Auch wenn es 
nur eine Flankenerkennung ist funktioniert der Code einwandfrei und ich 
spare zusätzlich noch Speicherplatz.
#3510431
Lesenswert?

So leid mir das auch tut. Aber das Prellen eines Tasters unterscheidet 
sich vom (gewollten) wiederholten Drücken und Loslassen eines Tasters 
nur durch die Zeitkomponente. Wenn also jemand behauptet, er könne 
Tasten entprellen, ohne dafür eine Zeitsteuerung zu benötigen (wie auch 
immer die dann aussieht), dann kann man ihm auf den Kopf zusagen, dass 
er irgendwas nicht wirklich verstanden hat.
#3510434
Lesenswert?

André schrieb:
> Mein Problem war immer, dass das Tasten nicht richtig erkannt wurde
> (eben durch das prellen) und die LED mal eingeschaltet blieb und mal
> nicht.
>
> Mit meinem jetzigen Code habe ich keinerlei probleme mehr.

Ja.
Weil er langsam genug ist, damit das momentan vorhandene Prellen sich 
noch schneller abspielt. Aber warte noch ein paar Jahre, bis deine 
Taster älter werden und das Prellen schlimmer wird ....
#3510447
Lesenswert?

André schrieb:
> Gibt es denn auch prellfreie Taster?

Ja gibt es. Aber wozu?

> Dann könnte man sich ja den Code
> ersparen.

Nimm einfach die erprobten Lösungen. Die paar Bytes, die dir dafür im 
Programmspeicher drauf gehen (der Code ist ja sowieso nur ein einziges 
mal im Speicher und nicht für jede Taste extra), die tun dir nicht weh. 
Und wenn doch, dann hast du ganz andere Probleme mit der Programmgröße, 
die du sicher nicht dadurch gelöst kriegst, dass deine Entprellung ein 
um 5 Bytes kürzeres Programm ergibt. Das ist am falschen Ende gespart.
#3510502
Lesenswert?

André schrieb:
> Gibt es denn auch prellfreie Taster? Dann könnte man sich ja den Code
> ersparen.

Eine vernünftige Entprellung macht man mit Schrotttastern.
Kauf dir einen 1,95-€-Wohnungstürklingeltaster aus einem Baumarkt deines 
Vetrauens. Dann setzt du dich hin und entprellst das Ding mit einer der 
vorgestellten Softwarelösungen. Wenn der Taster nicht mehr prellt, ist 
das Problem ein für alle Mal und für alle anderen Taster gelöst.

mfg.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren