Comment Faire Fonctionner Deux Fonctions En Même Temps Sur Arduino

Salut tout le monde ! Installez-vous confortablement, prenez un café (ou un thé, je ne juge pas !), et parlons Arduino. Vous avez déjà fait clignoter une LED, c'est ça ? Super ! Mais que se passe-t-il si vous voulez faire clignoter une LED et surveiller un bouton en même temps ? C'est là que les choses deviennent intéressantes. Comment faire fonctionner deux fonctions en même temps sur Arduino ? Eh bien, c'est plus simple que vous ne le pensez !
L'Arduino, par défaut, ne fait qu'une chose à la fois. Il exécute votre code ligne par ligne, du début à la fin. Donc, si vous avez une fonction qui prend beaucoup de temps, disons une seconde entière, à s'exécuter, l'Arduino sera bloqué pendant cette seconde. Pas idéal, n'est-ce pas ? Imaginez que vous essayez de lire une donnée d'un capteur pendant que la LED clignote… vous risquez de manquer des lectures importantes !
Alors, comment contourner ce problème ? La réponse est : la non-blocking code, ou le code non bloquant. L'idée est de diviser vos tâches en petites étapes et de les exécuter alternativement, très rapidement, de sorte qu'elles semblent s'exécuter en même temps. C'est un peu comme jongler : vous lancez une balle, puis une autre, et ainsi de suite. Vous ne gardez pas une balle en l'air tout le temps, mais l'illusion est là. Et franchement, c'est une très bonne illusion !
Must Read
La clé ici, c'est la fonction `millis()`. Cette fonction renvoie le nombre de millisecondes écoulées depuis le démarrage de votre programme Arduino. C'est notre chronomètre personnel ! On va l'utiliser pour suivre le temps et déclencher nos actions à intervalles réguliers.
Prenons un exemple concret. Supposons que vous vouliez faire clignoter une LED toutes les 500 millisecondes. Au lieu d'utiliser `delay(500)`, qui bloquerait l'Arduino pendant une demi-seconde, vous pouvez faire quelque chose comme ceci :

unsigned long previousMillis = 0;
const long interval = 500;
int ledState = LOW;
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledPin, ledState);
}
// Ici, vous pouvez ajouter d'autres tâches !
// Par exemple, lire un capteur, surveiller un bouton...
}
Ce code est magique ! (Enfin, pas vraiment de la magie, mais c'est très astucieux.) Il vérifie constamment si 500 millisecondes se sont écoulées depuis la dernière fois que la LED a changé d'état. Si c'est le cas, il change l'état de la LED et met à jour `previousMillis`. Le plus important, c'est que l'Arduino ne s'arrête jamais ! Il continue à exécuter la fonction `loop()`, et vous pouvez y ajouter d'autres tâches sans problème.

Vous pouvez maintenant lire un bouton, surveiller un capteur, afficher des informations sur un écran LCD... tout en faisant clignoter votre LED ! Tout cela en même temps (enfin, presque en même temps, mais suffisamment vite pour que vous ne voyiez pas la différence). N'hésitez pas à adapter ce code à vos propres projets. Expérimentez, amusez-vous ! C'est le meilleur moyen d'apprendre.
Alors, la prochaine fois que vous vous demanderez comment faire fonctionner deux fonctions en même temps sur Arduino, souvenez-vous de `millis()` et du code non bloquant. C'est votre ticket pour des projets plus complexes et plus intéressants. Allez-y, créez quelque chose d'incroyable ! Et n'oubliez pas : chaque grand projet commence par une petite étincelle. Alors allumez votre Arduino et laissez briller votre créativité !
