Plusieurs problèmes peuvent apparaître lors de la lecture d’entrées digitales, notamment :
- Un état est mal définit
- Le rebond du contact
Un état est mal définit
Ceci se produit lorsque, sur une connexions électrique, la valeur arrivant sur l’entrée digitale est « en l’air », c’est-à-dire que lors qu’un contact est ouvert :
On voit ci-dessus que lorsque le contact est fermé, une tension de 5V est appliquée à l’entrée D10, mais lorsque l’interrupteur est ouvert, il n’existe pas d’état clairement définit.
Cette situation est résolue en ajoutant une résistance dite de PULL_UP, qui force un valeur de 5V à l’entrée D10 lorsque l’interrupteur est ouvert:
Il faut veiller à ce que la résistance de PULL_UP soit suffisamment élevée pour que le courant traversant l’interrupteur soit petit lorsque ce dernier est fermé.
Rappel de la loi d’Ohm :
Avec les Arduino, on peut plus simplement remplacer la résistance de PULL_UP en précisant INPUT_PULLUP dans la fonction pinMode, ce qui a été fait dans l’exemple précédent.
Le rebond du contact
Eh oui, un contact peut rebondir, c’est-à-dire que pendant un certain temps, l’état du contact peut changer entre la valeur actuelle et la valeur à atteindre, ci-dessous, par exemple, lors le contact est pressé, il faut attendre une certaine durée pour que l’état fermé soit stable, il en va de même lors de l’ouverture.
Plusieurs solutions permettent de limiter ou d’éliminer ces rebonds. Une solution consiste à placer un petit condensateur (quelques nF) en parallèle avec le contact, cela crée un circuit RC impliquant un certain retard, une autre solution est de valider l’état uniquement lorsque plusieurs lectures identiques ont été constatées, ou encore, après une premier changement d’état, de ne valider le nouvel état qu’après un temps déterminé (quelques ms).
Voir la solution proposée dans le tutoriel d’Arduino.