Bonjour à tous !
Je suis actuellement sur un petit projet : faire un boitier permettant de commander un bandeau de led RGB (on est pas dans l'originalité ).
J'aurais sur mon boitier un interrupteur à levier pour basculer mon boitier de "Mode Automatique" (les effets s'enchainent seul) à "Mode Manuel" (je choisis la couleur et l'effet que je veux via un écran de contrôle).
Pour détecter le basculement, j'utilise une interruption, qui fait passer une variable globale "RESET_LOOP" de false à true. Dans mon code, j'ai placé à plusieurs endroits stratégiques un bout de code permettant de vérifier la valeur de ce booléan : s'il est à true, cela permet d'interrompre instantanément l'exécution de "loop" pour passer à l'itération suivante (cela permet une commutation quasi instantanée du mode auto au mode manuel et inversement).
Peut-être qu'il y a une autre méthode pour gérer cette commutation auto-manuel, mais après recherche, je suis parti sur le choix de l'interruption. Mais le problème n'est pas là
Le problème se situe dans le morceau de code suivant :
for(int i=0; i<=255; i++) {
Serial.println(RESET_LOOP);
if(RESET_LOOP) {Serial.println("B");return;}
if(color_R != -1) {
if(counter_R>0.99) {
color_red++;
counter_R--;
}
analogWrite(led_R, color_red);
counter_R+=color_R_ratio;
}
...
Dans cette configuration, tout va bien, s'il y a l'interruption, on rentre dans le "if", on a le "return" qui stop la fonction en cours, comme voulu.
En revanche, si j'enlève cette ligne :
Serial.println(RESET_LOOP);
Et ben.... on ne rentre plus dans le "if"....
Je n'arrive pas à comprendre pourquoi c'est le Serial.println() qui fait que le code fonctionne ou pas....
Si quelqu'un à une explication, parce que la je suis à sec
Merci !