Go Down

Topic: Tasterzustand erhalten (Read 2 times) previous topic - next topic

Maexle

#10
Oct 09, 2012, 12:12 pm Last Edit: Oct 09, 2012, 12:14 pm by Maexle Reason: 1


2. Deine Taster ziehen den Pin nach Masse, Du hast aber weder in der Verdrahtung einen Pull-Up-Widerstand drin, noch hast Du den internen Pull-Up des Arduino-Pins aktiviert. Das wird also nicht funktionieren. Zudem ist ein Taster-Pin, der nach Masse geht, aktiv LOW und nicht HIGH.




Sorry das verstehe ich nicht




Mit dem Simulator dürfte es deutlich schwieriger werden. Der Arduino ist so ausgelegt, dass er Anfänger-Fehler fast immer verzeiht. So theoretische Schaltungen sind allerdings für den Einstieg eher ungeeignet. Die paar Euro für den Arduino wirst Du nicht bereuen.


Ich habe heute früh angefangen...

mkl0815




2. Deine Taster ziehen den Pin nach Masse, Du hast aber weder in der Verdrahtung einen Pull-Up-Widerstand drin, noch hast Du den internen Pull-Up des Arduino-Pins aktiviert. Das wird also nicht funktionieren. Zudem ist ein Taster-Pin, der nach Masse geht, aktiv LOW und nicht HIGH.



Sorry das verstehe ich nicht


So wie Du den (die) Taster beschaltet hast, wird beim Drücken des Tasters das Pin des Arduino mit GND (Masse) verbunden. Damit geht das Pin auf den Zustand LOW. Damit Du aber eine Zustandsänderung erkennen kannst, muss das Pin vorher auf HIGH stehen (also gegen 5V geschaltet sein). Das macht man mit einem sogenannten Pullup (hochziehen auf 5V) Widerstand. Diesen hat der Arduino bereits eingebaut. Um ihn zu aktivieren mußt Du einfach nur ein pinMode(PIN,INPUT_PULLUP) statt nur pinMode(PIN,INPUT) für Dein Eingabe-Pin machen. Wenn Du dann per digitalRead() das Pin einliest, wird es immer ein HIGH liefern, außer es wird (wie mit deinem Taster) auf Masse gezogen, dann liefert es ein LOW.

Dein Programm ist aber trotzdem noch nicht korrekt, unabhängig davon, das Du auf LOW statt HIGH prüfen musst. Du schaltest die LED immer dann, wenn der Taster gedrückt wird ein. Dein Programm macht umgangssprachlich folgendes:

Prüfe ob gerade in diesem Moment der Taster gedrückt wird. Wenn ja mach die LED an, wenn nicht, mach die LED aus.
Damit wird die LED immer aus gehen, sobald Du den Taster wieder los läßt.

Was Du machen musst, ist Die den Zustand der LED (AN oder AUS) in einer eigenen Variable merken. Immer wenn ein Tastendruck erkannt wird, schaltest Du den Zustnad dieser Variablen um (von AN zu AUS, oder umgekehrt).

Außerdem ist das delay(2500) sehr ungünstig, weil das eine Pause von 2,5 Sekunden im Programm ist. Solange wird aber auch der Taster nicht abgefragt und es ist Glückssache, ob Du genau den minimalen Zeitpunkt erwischst, wenn der Taster abgefragt wird. (Oder du drückst länger als 2,5 Sekunden auf den Taster)

Mario.

uwefed

Ein Eingang liest eine Spannung. Ein bestimmter Bereich wird als HIGH übersetzt ein anderer als LOW. Wenn Du einen Taster zwischen masse und Eingang schaltest kannst Du den Eingang ein LOW-Spannung geben aber keine HIGH. Damit der Eingang HIGH liest mußt Du ihm mit hilfe eines Widerstandes einen HIGH-Pegel geben. Diesen Widerstand nennt man PULLUP (hinaufziehen). Also einen 10kOhm Widerstand zwischen Eingang und +5V schalten oder den internen Pullup-Widerstand mit
pinMode(knopf,INPUT);
digitalWrite(knopf,HIGH); aktivieren.

Grüße Uwe

Maexle

Sorry, ich muß nochmal nachfragen.

Ich dachte: Stromkreis ist geöffnet --> Taster wird betätigt --> Strom fließt zum Pin 0 (ist ungünstig hab ich gelernt - danke dafür) --> Pin wird "umgeschaltet" von LOW - kein Strom auf HIGH - Strom. Aber scheinbar bin ich da falsch informiert.

Die 2,5 Sekunden sind noch von der "2-Taster-Version" ich wollte damit vermeiden, dass die beiden Taster nicht zu schnell "hintereinander reagieren".

pylon

Der Eingang des Arduinos misst nicht "Strom" oder "nicht Strom", sondern er gibt die aktuell anliegende Spannung an (OK, intern ist es am Ende schon eine Strom-Messung, aber das tut hier nichts zur Sache). Bei einem nicht-verbunden Pin (die Insider sprechen von floating) ist diese Spannung nicht definiert, d.h. sie kann zufällig mal HIGH (5V) oder LOW (0V) sein. Da Zufälligkeit normalerweise nicht akzeptabel ist, schafft man reproduzierbare Verhältnisse, indem man den "Ruhezustand" definiert, der Pull-Up ist genau dafür vorgesehen.

Go Up