Sorties discrètes
Un montage très simple, support de trois applications dont les objectifs sont d'apprendre à :
Le schéma électrique est donné à titre indicatif.
Nom | Type |
---|---|
Composant1 | Arduino Uno (Rev3) |
LED1 | LED Rouge |
LED2 | LED jaune |
R1 | Résistance 330 Ω |
R2 | Résistance 330 Ω |
Un montage avec deux LED 5mm, une jaune et une rouge. La première est commandée par le port 6 et la seconde par le port 9. Les deux sont reliées à la masse via une résistance de 330 Ω. Ces résistances sont nécessaires à la création d'un courant suffisant dans les diodes qui vont leur permettre de s'allumer.
Ce programme a pour seul intérêt de présenter les fonctions pinMode()
et digitalWrite()
.
La première, pinMode()
, permet de définir le mode d'utilisation du port : en lecture (INPUT
) ou en écriture (OUTPUT
). Pour l'instant nous ne parlons que de ces deux modes.
La seconde fonction, digitalWrite()
, permet au travers de son paramètre, d'activer (HIGH
ou 5 volts) ou de désactiver (LOW
ou 0 volts) l'alimentation sur un port donné.
Ce qui est intéressant c'est le fait de pouvoir commander l'allumage ou l'extinction d'un dispositif au travers d'un programme informatique. Le montage donné en exemple, avec une LED, est présenté pour sa simplicité. On aurait pu, par exemple, remplacer la LED par un relai qui piloterait un moteur destiné à ouvrir une porte.
Ici, nous introduisons le fait de faire des actions à intervalles réguliers, sans pour autant bloquer l'exécution du micro-contrôleur. En effet pour un cas aussi simple, il aurait été tentant de réaliser la temporisation du clignotement avec la fonction delay()
qui permet d'attendre un certain nombre de millisecondes. Cependant, cette fonction est bloquante et si on désire faire autre chose en attendant (faire clignoter une autre LED, lire les valeurs de capteurs, faire un calcul, ...) ce n'est pas possible. Pour acquérir de bonnes pratiques dès le début, la méthode non bloquante est présentée.
Cette méthode fait appel à la fonction millis()
qui retourne le nombre de millisecondes écoulées depuis la mise en route du micro-contrôleur. Il est important de remarquer que les millisecondes passent rapidement et de fait, les nombres retournés sont souvent assez grands. Il faut donc choisir le bon type pour la variable qui va recueillir cette valeur. Ici, la réponse nous est donnée par la page descriptive de la fonction millis()
et c'est un unsigned long
, ce qui laisse un peu plus de 49 jours avant un retour à zéro.
Le principe du programme est le suivant : nous avons besoin de connaître l'état de notre LED (allumée ou éteinte). Nous avons besoin également de connaître le temps du dernier changement d'état. À partir de ça, il suffit de dire que l'on change d'état si la différence entre le temps actuel, donné par millis()
et le temps du dernier changement, est supérieur ou égal à un constante représentant notre fréquence de clignotement. À chaque fois que ce test est vrai, il faut 1) renseigner le temps du dernier changement avec le temps courant ; 2) changer l'état de la LED ; 3) écrire le nouvel état sur le port sur lequel est branchée la LED.
Cet exemple est une extension du précédent. La réalisation de plusieurs actions asynchrones se fait grâce à la fonction loop()
qui est répétée à l'infini. À chaque tour, il faut vérifier si un certain délai s'est écoulé depuis la dernière execution de nos actions. Il faut réaliser une vérification par action à mener.
Dans le cas où ce délai n'est pas passé, il est possible de faire autre chose. Mais alors il faudra, pour respecter les délais, s'assurer que tout ce qu'on fait d'autre ne prendra pas plus de temps que le délai minimal.