Digitaler Pin wird als HIGH erkannt

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.

Danke, jetzt macht er mit aber ein Problem beim compilen:

error: 'INPUT_PULLUP' was not declared in this scope

Poste bitte den Kode der den Fehler zeigt.

Hab es so wie oben gemacht, hier der Code:

pinMode(m1,INPUT_PULLUP);

Ein vollständiges Programm bitte.

Okay, hier:

//Melder Anlage

int m1=2;
int led1=8;
int led2=13;

int v1;

void setup()
{
  pinMode(m1,INPUT_PULLUP);
  pinMode(led1,OUTPUT);
}

void loop()
{
  v1=digitalRead(m1);
  if (v1 == HIGH)
  {
      digitalWrite(led1,HIGH);
      delay(500);
  digitalWrite(led1,LOW);
      delay(500);    
  digitalWrite(led1,HIGH);
      delay(500);        
  }
  else if (v1 ==LOW);
  {
    digitalWrite(led2,HIGH);
    delay(1000);
    digitalWrite(led2,LOW);
    delay(2000);
  }
}

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);

                      ^

Ersetze das

  else if (v1 == LOW);

durch   else.

Das zweite if ist falsch und völlig überflüssig.

Lasse98: hier der Code:

pinMode(m1,INPUT_PULLUP);

Hihi .... der ist gut!

Evtl. ist Deine IDE veraltet. Das mit dem „_PULLUP“ gab es früher nicht. Probiere es statt

pinMode(m1,INPUT_PULLUP);

mit

pinMode(m1,INPUT);
digitalWrite(m1, HIGH); // Pull-up-Widerstand aktivieren

Gruß

Gregor

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 )

https://forum.arduino.cc/index.php?topic=142041.15

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 ...).

Gruß

Gregor

Lasse98 erleuchte uns.

Welche IDE Version benutzt du auf welcher Plattform?