forcer une fonction à s’exécuter jusqu'à la fin

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour les agrumes !

J'ai un petit soucis en programmation arduino qui, je pense, vient d'un problème tout bête de logique. Je vous donne un peu le schéma de la situation qui me pose problème (je vous épargne le code entier qui va plus vous perdre vu le bidouillage du projet ^^)

En gros: j'ai un capteur qui me donne une valeur, stockée dans une variable v.

  • si cette valeur est entre 0 et 550 -> action 1
  • si cette valeur est entre 550 et 650 -> action 2
  • si cette valeur est entre 650 et 1000 -> action 3

l'action 2 se résume en une boucle while qui fait 6 fois :

  • clignoter une led avec millis()
  • mettre a jour un tableau de ces "millis" {instant t,t+500,t+1000,t+1500,…}

Le problème c'est que si pendant cette boucle je fait varier manuellement ce que capte le capteur alors BAM l'action 1 ou 3 commence… alors que c'est une boucle while… pourquoi le programme quitte la boucle ?

soit comme je le disais c'est un truc tout con juste devant moi, soit j'ai peur que ça vienne d'un détail que je ne vous ai pas donné… pour recentrer ma question : quelles sont les conditions pour qu'une boucle while saute comme ça? \:|

Merci :)

+0 -0
Auteur du sujet

Bon il m'a suffit de reformuler le problème pour voir où ça cloche :

dans ma boucle while il y a le

1
2
3
4
if((millis()-temps)>500){
        etat_led=!etat_led;
        temps=millis();
      }

donc en gros le µC à le temps de passer 6 fois la condition fausse, de sortir de la boucle, de relire la valeur du capteur et de relancer une action avant même que la led n'ai clignoté une fois… il faut donc que je lui dise "tant que la led n'ai pas clignoté 6 fois, tu ne passe pas à autre chose". Mais pour l'instant tout ce que j'essais force juste la led à s'éteindre ou rester allumer pendant 6s ^^ Je hais le temps xD

Ex : reste allumée pendant 6 seconde

1
2
3
4
5
6
7
nombre_clignotement=0;
do{
  if((millis()-temps)>500);
    etat_led=!etat_led;
    temps=millis();
    nombre_clignotement=nombre_clignotement+1;
}while(nombre_clignotement<13);

Édité par Ulic3

+0 -0
Auteur du sujet

Ok je vais me coucher… j'ai juste oublié d'intégrer le digitalWrite à la boucle… ce fut une expérience fort enrichissante pour moi mais surement très drôle pour vous. J'espère que vous les collectionnez ces genres de posts inutiles. En tout cas ce forum est hyper efficace, j'ai ma réponse en moins d'une heure ! ^^

Allez bonne nuit :D !

+2 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte