02 – Entrée digitale

Dans cet exemple, un bouton va permettre de choisir l’état de la LED. Il faut d’abord réaliser le câblage proposé dans le fritzing. Pour le bouton, on utiliser le contact à fermeture (le courant passe lorsque le bouton est pressé).

// constantes
const int buttonPin = 2;
const int ledPin = 10;
// variables
int buttonState = 0;
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

Voici ce qui se passe dans ce programme :

  • Deux constantes sont définies, l’une pour la pin sur laquelle le bouton est connecté (pin 2), la seconde pour la LED (pin 10).
  • Une variable reçoit l’état du bouton
  • digitalRead permet de connaître l’état du bouton, cet état est conservé dans la variable buttonState.
  • Le test if – else qui suit permet d’allumer ou d’éteindre la LED selon l’état du bouton.

Que se passe-t-il lorsque l’interrupteur est ouvert ?

Essayez de remplacer INPUT_PULLUP par INPUT. Si vous approchez ou éloignez une main de l’Arduino, vous verrez que la LED change probablement de luminosité, c’est parce que l’état HAUT est mal définit. Avec INPUT_PULLUP, Arduino connecte une résistance interne (de grande valeur afin de consommer un minimum de courant), afin d’empêcher que l’état non connecté fournisse une valeur indéfinie.

Peut-on faire plus simple ?

La réponse est . . . oui.
Modifiez le code de la fonction loop ainsi :

void loop() {
  digitalWrite(ledPin, digitalRead(buttonPin))
}

Et supprimez la ligne dans laquelle la variable buttonState est définie et initialisée.
Dans cette version, le résultat de la fonction digitalRead est directement transmis à la fonction digitalWrite, rendant ainsi inutile la lecture préalable de l’état du bouton ainsi que le test.

Laisser un commentaire