Delay
Commençons par utiliser delay
L’instruction delay permet de faire une pause dans le programme, cela peut être utile a certains moments pour recevoir des données après un certain temps mais durant le temps de delay notre arduino ne répondra plus a nos demandes.
Ce que l’on va rajouter à notre programme c’est un « delay » de 4 secondes pour bloquer toute autre instruction
Je rajoute l’instruction delay(4000); qui correspond a 4 secondes d’attente.
A l’intérieur le temps est exprimé en millisecondes.
Il faut rajouter cette valeur a l’intérieur des 2 conditions IF a la fin avant l’accolade finale du IF
Ce que l’on constate c’est que si j’appui sur le bouton 1 et que j’appuie tout de suite après sur le bouton 2 , le bouton 2 ne sera pas pris en compte pendant la durée de 4 secondes ici définie.
Le delay est intéressant si l’on a besoin d’empêcher toute autre événement pendant l’action.
Télécharger le code Delay
Millis
Maintenant que vous connaissez l’instruction pour mettre un temps d’arrêt nous allons maintenant utiliser la notion du temps avec l’utilisation des millis();
Reprenons le même schéma de la carte .
Ce que je recherche maintenant à faire dans mon programme c’est que je veux que mes led automatiquement toutes les 10 secondes bascule d’un a l’autre comme pour un feu tricolore mais je veux aussi quand j’appuie sur un bouton donner l’ordre de changement la led allumé et repartir un compteur de 0. Mon programme va pas mal évoluer , passons au code et explications.
Ce que j’ai rajouté dans la partie variable en haut du programme ce sont 2 variable , long tempsReference; qui va nous permettre de stocker la variable de temps (long qui nous permet d’enregistrer un très gros nombre ) et int ledAllume; qui permet d’enregistrer quel led est allumée.
Partie setup je défini que led 1 est allumée au démarrage ledAllume=1; et j’enregistre la valeur du temps au moment ou j’allume ma led pour calculer le temps avant de basculer sur l’autre led tempsReference=millis(); .
Au niveau de la boucle loop je rajoute dans mes conditions de bouton tempsReference=millis(); pour mémoriser le nouveau temps de référence et je mémorise quel led est maintenant allumée ledAllume=1; si c’est le bouton 1.
Il faut maintenant créer le code qui va basculer d’une led a l’autre en fonction du temps, on continue avec une condition IF , ici if(millis()> (tempsReference + 10000)){ .
Ce qui se traduit par si le temps actuel est supérieur au temps de référence enregistré plus 10 secondes alors on respecte notre condition de changement.
A l’intérieur de cette condition maintenant que les 10 secondes sont écoulés je pose a nouveau une condition , if(ledAllume == 1){ si la led 1 est allumée alors je fais ce qu’il faut pour la led 2 ; sinon ( else ) je m’occupe de la led 1 .
Dans le cas de la led 1 allumée a l’intérieur de la condition je vais éteindre la led 1 et allumer la led 2, puis je met une nouvelle valeur dans le temps de référence tempsReference=millis(); ainsi que la valeur de ledAllume=2; car la led 2 est maintenant allumée.
On peut rajouter des valeurs Serial pour suivre l’évolution du programme Serial.print(« Feu 2 allume »); …
Je vous donne le code complet pour cette partie mais je lance un mini défi pour compléter le programme.
Télécharger le code a compléter
Maintenant le petit défi !
Notre feu tricolore ici ne réagit pas exactement comme on le souhaite, je veux pouvoir aussi rajouter une condition pour qu’il y ait un temps minimum avant de basculer d’une led a l’autre si j’appuie un bouton et ne pas repartir a zero si j’appuie sur le bouton correspondant a la led ( led1 = bouton1 ).
Pour rajouter une condition dans un if , j’utilise le « && » double & puis ma condition a ajouter.
Ici 2 conditions supplémentaires sont nécessaires a 2 endroits différents.
Je vous donne mon code pour corriger si cela ne fonctionne pas chez vous , mais sachez qu’il y a différentes manières de coder qui amèneront au même résultat.Télécharger le code.
Notre feux tricolore est presque fini, dans le prochain tutoriel on le termine donc il vous faudra quelques led en plus et un peu du matériel de récupération pour le rendre utilisable avec des enfants.
N’hésitez pas à poser vos questions sur les réseaux sociaux de la chaîne twitter , facebook ,youtube ; si vous ne comprenez pas certaines parties du tutoriel, me dire ce que vous aimeriez que je crée pour en faire des vidéos tutoriel ,à partager les projets que vous aimeriez créer etc…
Comme toujours allez sur la page de C’est quoi Retro et Geek pour connaître tout ce que je recherche à faire sur la chaîne.
Merci les RetroGeeker et RetroGeekeuse