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
constintTaster=2;
2
constintLed=8;
3
4
intStatus=0;
5
6
voidsetup()
7
{
8
pinMode(Taster,INPUT);
9
pinMode(Led,OUTPUT);
10
}
11
12
voidloop()
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ß :)
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.
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.
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.
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.
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.
Harald Wilhelms schrieb:> Teo Derix schrieb:>>> Soft zu entpellen>> ...ist für mich eine Tätigkeit, die mit Elektronik wenig zu tun hat.> :-)
Aber immer noch besser als mit Saft :D
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.
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 ....
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.
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.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang