Problème Arduino Uno, Input 2 se charge tout seul

Bonjour,

J'ai une carte arduino uno, j'ai écris ce code afin d'afficher l'état de l'input 2 de ma carte:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(2, INPUT);
digitalWrite(2, LOW);
Serial.print("Init..\n");

}

void loop() {
// put your main code here, to run repeatedly:
int s2 = digitalRead(2);
Serial.print(s2);
Serial.println();
delay(500);
}

Au début cela affiche 0, puis cela affiche 1, puis lorsque je branche l'input 2 à la masse, cela retourne à 0 comme si cela se déchargeait, puis si je retire les fils, au bout de quelques secondes cela revient 1.

Pourquoi ?

Merci.

Bonjour,

C'est tout à fait normal.
Une entrée numérique en l'air est dans un état indéfinie.
On doit fixer son potentiel, ce que tu fais en la reliant à la masse.
Tu as deux soulutions:
1- Tu déclares: pinMode(2, INPUT_PULLUP);
Ce qui va connecter dans le µP une résistance, dite de pullup (de tirage, en français) au +5v (pour les AVR).

2- Tu connecte toi même une résistance de 10K à 100K par exemple au +5v.

si tu fait " digitalWrite(2, LOW);" tu désactive la résistance pull up
donc :
soit comme l'indique bilbo83

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP); // déclare et active la résistance de pull up
  Serial.print("Init..\n");   
  

}

void loop() {
  // put your main code here, to run repeatedly:
  int s2 = !digitalRead(2); // lecture inverse de l'entrée
  Serial.print(s2);
  Serial.println();
  delay(500);
}

soit à ta façon

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);  // active la résistance de pull up
  Serial.print("Init..\n");   
  

}

void loop() {
  // put your main code here, to run repeatedly:
  int s2 = !digitalRead(2); // lecture inverse de l'entrée
  Serial.print(s2);
  Serial.println();
  delay(500);
}