.. note:: Bonjour et bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez dans l'univers de Raspberry Pi, Arduino et ESP32 avec d'autres passionnés. **Pourquoi nous rejoindre ?** - **Support d'experts** : Résolvez les problèmes post-achat et les défis techniques avec l'aide de notre communauté et de notre équipe. - **Apprendre et partager** : Échangez des astuces et des tutoriels pour approfondir vos compétences. - **Aperçus exclusifs** : Accédez en avant-première aux annonces de nouveaux produits et à des aperçus exclusifs. - **Réductions spéciales** : Profitez de réductions exclusives sur nos nouveaux produits. - **Promotions festives et cadeaux** : Participez à des tirages au sort et des promotions spéciales. 👉 Prêt à explorer et créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! .. _ar_interval: 1.11 Intervalle ================= Aperçu -------- Il arrive parfois que vous deviez effectuer deux actions en même temps. Par exemple, vous voudrez peut-être faire clignoter une LED tout en surveillant l'appui sur un bouton. Dans ce cas, vous ne pouvez pas utiliser delay(), car cette fonction met en pause le programme Arduino pendant le délai spécifié. Si le bouton est pressé alors qu’Arduino est en pause, l'appui sera ignoré. Ce code démontre comment faire clignoter une LED sans utiliser delay(). La LED s’allume et le programme enregistre le moment. À chaque passage dans la boucle loop(), il vérifie si le temps de clignotement souhaité est écoulé. Si oui, il bascule la LED entre on et off et met à jour l'heure pour le prochain clignotement, de sorte que la LED continue de clignoter sans interruption du programme. Une analogie serait de chauffer une pizza au micro-ondes tout en surveillant un e-mail important. Avec delay(), vous resteriez devant le micro-ondes pendant 10 minutes. Avec ce code, vous pouvez allumer le micro-ondes, vérifier vos e-mails, faire autre chose, puis revenir voir si la pizza est prête. Composants requis -------------------- .. image:: img/list_1.11.png * :ref:`cpn_mega2560` * :ref:`cpn_breadboard` * :ref:`cpn_wires` * :ref:`cpn_led` * :ref:`cpn_resistor` Circuit Fritzing ------------------- Dans cet exemple, nous utilisons la broche numérique 9 pour piloter la LED. Une résistance est connectée entre la broche et l'anode (longue patte) de la LED, tandis que la cathode (courte patte) est reliée à la masse (GND). .. image:: img/image30.png Schéma électronique ---------------------- .. image:: img/image466.png Code ---- .. note:: * Vous pouvez ouvrir le fichier ``1.11_interval.ino`` dans le chemin ``sunfounder_vincent_kit_for_arduino\code\1.11_interval``. * Ou copier ce code dans l'IDE Arduino 1/2. .. raw:: html Une fois le code téléversé sur la carte Mega2560, vous verrez la LED clignoter. Analyse du Code ------------------ Déclarez la broche numérique 9 comme ledPin. .. code-block:: arduino const int ledPin = 9; Initialisez l'état de ledState à LOW pour éteindre la LED. .. code-block:: arduino int ledState = LOW; Déclarez une variable nommée previousMillis pour enregistrer le temps d'opération précédent du microcontrôleur. .. code-block:: arduino unsigned long previousMillis = 0; Définissez l'intervalle à 1000ms (millisecondes). .. code-block:: arduino const long interval = 1000; Définissez ledPin en mode OUTPUT. .. code-block:: arduino pinMode(ledPin, OUTPUT); Dans loop(), déclarez currentMillis pour enregistrer le temps actuel. .. code-block:: arduino unsigned long currentMillis = millis(); Lorsque l'intervalle entre le temps actuel et le dernier clignotement dépasse 1000 ms, certaines fonctions sont déclenchées. Ensuite, previousMillis est mis à jour pour permettre le prochain clignotement une seconde plus tard. .. code-block:: arduino if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // enregistrez le dernier temps de clignotement de la LED //... } Ici, les fonctions exécutées à intervalles modifient l'état de la LED. .. code-block:: arduino if (ledState == LOW) {ledState = HIGH;} else {ledState = LOW;} digitalWrite(ledPin, ledState); Illustration du phénomène ---------------------------- .. image:: img/image36.jpeg