Leçon 14/31-2 : Exemple 2 de codage Arduino millis() avec événement
Dans ce tutoriel, vous apprendrez à utiliser la fonction millis() d'Arduino pour déclencher une action uniquement après qu'une période de temps spécifiée se soit écoulée, le tout sans bloquer le reste de votre programme. C'est une technique fondamentale pour créer des projets Arduino réactifs où plusieurs tâches doivent s'exécuter simultanément, comme faire clignoter des LED tout en lisant des capteurs ou en surveillant des pressions de boutons. Cet exemple spécifique se concentre sur le déclenchement d'un événement après cinq secondes, mais la logique peut être appliquée à d'innombrables scénarios du monde réel.
Voici quelques exemples pratiques de la façon dont vous pourriez utiliser ce modèle dans vos propres projets :
- Activation différée : Allumer un ventilateur ou une pompe uniquement après qu'un système ait fonctionné pendant un temps défini.
- Verrouillages de sécurité : Exiger qu'un bouton soit enfoncé et maintenu pendant une durée avant d'effectuer une action dangereuse, comme démarrer un moteur.
- Alertes basées sur le temps : Déclencher une alarme ou une notification si une lecture de capteur n'a pas changé dans un certain intervalle.
- Minuteries non bloquantes : Créer une minuterie « chien de garde » qui réinitialise un appareil s'il devient non réactif.
Le problème principal que cela résout est la limitation de la fonction delay(). Lorsque vous utilisez delay(5000), l'Arduino cesse d'exécuter tout autre code pendant ces cinq secondes. Cela est acceptable pour des esquisses simples, mais cela devient un problème majeur dans des projets plus complexes où vous devez lire des capteurs, mettre à jour des affichages ou écouter des pressions de boutons pendant l'attente. La fonction millis(), qui compte les millisecondes depuis la mise sous tension de la carte, vous permet de vérifier le temps sans mettre le programme en pause.
Matériel requis
- Carte Arduino (Uno, Nano, Mega, etc.)
- Un bouton poussoir
- Fils de connexion
Guide de câblage
Le câblage pour cet exemple est très simple. Il utilise une résistance de tirage interne, donc aucune résistance externe n'est nécessaire pour le bouton.
- Connectez une patte du bouton poussoir à la broche GND de l'Arduino.
- Connectez l'autre patte du bouton poussoir à la broche numérique 2 de l'Arduino.
Parce que nous utilisons INPUT_PULLUP dans le code, la broche lira HIGH lorsque le bouton n'est pas enfoncé et LOW lorsqu'il est enfoncé, connectant la broche à la masse. (dans la vidéo à 08:29)
Comprendre le code
Ce code démontre une minuterie simple basée sur des événements. Le programme imprime en continu la valeur actuelle de millis() sur le moniteur série. Lorsque le bouton poussoir est enfoncé et maintenu, et que l'Arduino a fonctionné pendant au moins 5 secondes, il imprimera « Take action » sur le moniteur série. La clé est que la vérification de millis() n'arrête pas l'impression continue du temps.
Décomposons les parties configurables par l'utilisateur du code :
unsigned long event = 5000;// 5 secondes
C'est la variable la plus importante à configurer. Elle définit la durée de votre « événement » en millisecondes. Dans cet exemple, elle est définie sur 5000, ce qui équivaut à 5 secondes. Pour changer le délai, modifiez simplement ce nombre. Par exemple, le définir sur 10000 ferait déclencher l'action après 10 secondes. Il est crucial d'utiliser le type de données unsigned long, car la valeur de millis() peut devenir très grande et finira par dépasser la valeur maximale d'une variable int standard, provoquant des erreurs de comparaison. (dans la vidéo à 05:46)
pinMode(2,INPUT_PULLUP);
Cette ligne configure la broche numérique 2 comme entrée et active sa résistance de tirage interne. C'est une étape de configuration clé qui vous permet de connecter un bouton sans résistance externe. La broche lira HIGH par défaut et passera à LOW lorsque le bouton sera enfoncé, la connectant à la masse. Si vous souhaitez utiliser une autre broche, changez le nombre 2 ici et dans la ligne digitalRead(2) dans la boucle. (dans la vidéo à 08:46)
La logique à l'intérieur de loop() est simple. Elle lit l'état du bouton. Si le bouton est enfoncé (pb == LOW), elle vérifie ensuite si le temps actuel (millis()) est supérieur ou égal à votre temps event défini. Si les deux conditions sont vraies, elle imprime le message d'action. Le reste de la boucle, qui imprime le temps, continue de s'exécuter sans interruption, démontrant la puissance de millis() par rapport à delay().
Cet exemple vérifie le temps depuis le démarrage de l'Arduino. Le troisième exemple de la série vidéo s'appuie sur cela en enregistrant le moment de la première pression du bouton et en déclenchant une action uniquement si une deuxième pression se produit au moins 5 secondes plus tard. Cette logique est couverte dans Leçon 14/31-3 : Exemple 3 de codage Arduino millis() avec bouton poussoir.
Démonstration du projet en direct
Une fois que vous téléversez le code et ouvrez le moniteur série (à 9600 bauds), vous verrez un flux continu de nombres, représentant les millisecondes depuis la mise sous tension de la carte. Si vous appuyez et maintenez le bouton poussoir avant que 5 secondes ne se soient écoulées, rien ne se passera. Cependant, si vous appuyez et maintenez le bouton après le repère de 5 secondes, vous verrez le message « Take action » imprimé dans le moniteur série. L'action continuera de s'imprimer tant que le bouton est maintenu. Cela démontre une minuterie non bloquante qui permet à d'autres codes (l'impression) de s'exécuter sans interruption. (dans la vidéo à 10:52)
Projets connexes de cette vidéo
Cette vidéo fait partie d'une série en plusieurs parties sur les fonctions de temporisation et de mappage d'Arduino. Explorez les autres tutoriels créés à partir de ce même matériel source :
- Leçon 14/31-1 : Arduino Millis (sans délai) et fonctions map | SunFounder Robojax
- Leçon 14/31-3 : Codage Arduino millis() exemple 3 avec bouton poussoir
- Leçon 14/31-4 : Codage Arduino map() exemple 1
- Leçon 14/31-5 : Codage Arduino map() exemple 2
Chapitres
- [00:00] Introduction à millis() et au kit SunFounder
- [01:19] Qu'est-ce que millis() et pourquoi l'utiliser à la place de delay() ?
- [03:06] Démonstration pratique : impression de la valeur de millis()
- [05:46] Création d'un événement avec millis() et unsigned long
- [08:29] Câblage et codage d'un bouton poussoir avec INPUT_PULLUP
- [10:52] Exécution de l'exemple d'événement avec un bouton poussoir
- [12:14] Aperçu de l'exemple 3 : détection d'une deuxième pression sur le bouton
- [17:20] Introduction à la fonction map()
- [19:47] Codage et démonstration de la fonction map() avec une LED
/*
Lesson 14/31: Arduino coding millis() example 2 with event
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
unsigned long event = 5000;// 5 seconds
void setup() {
Serial.begin(9600);//initialize serial monitor
Serial.println("Introduction to millis");
pinMode(2,INPUT_PULLUP);
}
void loop() {
// Robojax.com millis() example 1
Serial.println(millis());
int pb = digitalRead(2);// read pin 2
if(pb ==LOW)
{
if(millis() >= event)
{
Serial.println("Take action");
}// if end
}// if end
}// loop end
Ce dont vous pourriez avoir besoin
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
Autre
Ressources et références
-
Externe
Fichiers📁
Manuel de l'Utilisateur
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB