Hallo, ich bin gerade am programmieren, nur leider wird ein Pin immer als High erkannt.
Das ist mein Code:
//Melder Anlage
int m1=2;
int led1=8;
int led2=13;
int v1;
void setup()
{
pinMode(m1,INPUT);
pinMode(led1,OUTPUT);
}
void loop()
{
v1=digitalRead(m1);
if (v1 == HIGH)
{
digitalWrite(led1,HIGH);
delay(5000);
}
else if (v1 ==LOW);
{
digitalWrite(led2,HIGH);
delay(1000);
digitalWrite(led2,LOW);
delay(2000);
}
}
led1 bekommt immer ein Signal ab obwohl an m1 nichts angeschlossen ist....
und led2 blinkt auch, also werden beide Varianten der Schleife ausgeführt...
Mit pinMode(m1,INPUT); schaltest Du den Pin auf Eingang. Wenn der aber unbeschaltet ist, dann wirkt das wie eine Antenne und es kann zwischen 1 und 0 hin- und herschalten.
Benutze pinMode(m1,INPUT_PULLUP);, dann wird der interne PULLUP-Widerstand benutzt und der Eingang auf HIGH gezogen.
Lasse98:
Hallo, ich bin gerade am programmieren, nur leider wird ein Pin immer als High erkannt.
Was heißt "leider"?
Hast Du an Deinem Pin vergessen, den Pull-Down-Widerstand anzuschließen?
Oder was "leider"?
Leider falsche Hardware-Schaltung verwendet, oder wozu hast Du dieses Thema gestartet?
Was ist denn an dem Pin angeschlossen, dass er LOW (=0V) haben soll?
Wenn der Pin "nirgends" angeschlossen ist, oder an einem "offenen Schalter", dessen anderes Ende "in der Luft hängt", dann ist der Zustand des Pins natürlich NICHT LOW (=0V), sondern er ist "FLOATEND!) und wechselt im Zeitverkauf munter zwischen HIGH und LOW hin und her. So funktioniert Digitaltechnik. LOW bedeutet eine Verbindung zu einem 0V Pegel. Und FLOATEND bedeutet, dass es keinen Anschluß an einer Spannung gibt, sondern der Pin Zufallswerte frei aus der Luft zieht, manchmal HIGH und manchmal LOW.
Das ergibt nur einen Hinweis auf einen anderen möglichen Fehler
Somewhere\Pullup\Pullup.ino: In function 'void loop()':
Somewhere\Pullup\Pullup.ino:27:22: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
else if (v1 == LOW);
^
Lasse98:
else if (v1 ==LOW); // Idiotenkram, oder was? wenn Bedingung erfüllt, mache nichts und gut isses?
// und danach fange einen Codeblock an, der vollkommen unabhängig so oder so ausgeführt wird.
{
digitalWrite(led2,HIGH);
delay(1000);
digitalWrite(led2,LOW);
delay(2000);
}// bis hierhin
}
gregorss:
Evtl. ist Deine IDE veraltet. Das mit dem „_PULLUP“ gab es früher nicht.
Na ja, dass noch jemand 1.0 benutzt ist ziemlich unwahrscheinlich, oder?
t always struck me as odd that the point of Arduino was to try to abstract the hardware away from the sketch
and yet turning on the pullup without something like INPUT_PULLUP is not supported by Arduino
and therefore becomes a processor specific non portable operation that is outside the
scope of Arduino.
Not sure why the Arduino team never saw it that way.
The real problem is it wasn't accepted as a solution to a real problem and implemented soon
enough in the mainline arduino core code so it didn't make it into the flagship 1.0 release
(It was added in 1.0.1 )
Whandall:
Na ja, dass noch jemand 1.0 benutzt ist ziemlich unwahrscheinlich, oder?
Das stimmt, aber meine Kiste läuft immer noch unter Debian 7.irgendwas, obwohl Debian inzwischen bei 8.7 (IIRC) ist. Es läuft halt einfach (und läuft und läuft ...).