Boucle en C++

Le langage C permet de créer des programmes rapides et proches de la machine

Modérateur : Francois

Répondre
EVOTk

Boucle en C++

Message par EVOTk » ven. 17 juin 2016 16:43

Hello,

Petit soucis que je ne comprend pas. Je début en C !


Avant je déclare bien sur :

Code : Tout sélectionner

double coeff = 2.02;
double cutoff = 2.75;

Code : Tout sélectionner

      while (tension >= cutoff) // DEBUT - Test tant que batterie sup a cutoff
      {
      int val = adc.readADC(0);
      double tension = ( 3.4 * val / 1024 ) * coeff;
      lcd.clear();
      lcd.home();
      lcd.print("TEST EN COURS ...");
      lcd.setCursor(0, 1);
      lcd.print(tension);
      delay(5000);
      }
      
      ...
Avant la boucle,
La valeur de tension est 3.4
La valeur de cutoff est 2.75

Je suis donc bien avec tension supérieur a cutoff, cela marche je rentre dans la boucle, mais je n'en sort jamais !
Meme pas la suite, quand tension tombe a 0.00, la boucle continue ! Pourtant la condition n'est plus respectée !

J'affiche exprès les valeurs sur mon écran pour vérifié et tension passe bien a 0.00 mais je ne sort pas de la boucle !

Une idée ?

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: Boucle en C++

Message par guillaume9344 » ven. 17 juin 2016 18:02

Bonsoir,
attention, vous déclarez la variable tension dans la boucle while, et utilisez aussi tension dans le test du while.
deux possibilitées:
-tension est aussi declarée au dessus et du coup , il y a deux variaables tension (mais le compileur aurait du metre une erreure ou un warning .

-tension est juste déclaré dans la boucle , et là je ne sais pas comment réagit le compilateur , ca peut compiler mais avoir des fonctionnements aléatoirs .
je vous conceil de déclarer tension avant la boucle et de faire une premiére lecture convertion avant celle-ci.

de plus dans le calcul de tension , il y a un melange de type : int pour val et bouble pour coef . sur certain compilateur ca ma poser problémes , pour etre précis il faidrais faire un "cast " sur val c'est à dire indiquer au compilateur qu'il faut convertir val en double:

Code : Tout sélectionner

 tension = ( 3.4 *(static_cast<double> (val) )/ 1024 ) * coeff; 

Peut etre pouvez vous également inverser le test :

Code : Tout sélectionner

while (cutoff <=tension )
parfois ca débloque le truc.
et aussi tester la boucle en simple variable pour voir si ca réagit bien:

Code : Tout sélectionner

    
    double tension=3.3;
    double cutoff=2.5;
    
     while (tension >= cutoff) // DEBUT - Test tant que batterie sup a cutoff
      {
     tension -=0.3;
      delay(5000);
      }
pour info , quel compilateur ou IDE utilisez vous?
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

EVOTk

Re: Boucle en C++

Message par EVOTk » ven. 17 juin 2016 18:59

Merci pour ta réponse !
J'utilise Arduino IDE

j'ai donc mis sa pour etre plus propre :

Code : Tout sélectionner

tension = ( 3.4 *(static_cast<double> (val) )/ 1024 ) * coeff;
et je declare au lancement du programme :

Code : Tout sélectionner

double tension = 0.00
Mais cela ne change rien.

Avant ma boucle, je fait un :

Code : Tout sélectionner

tension = ( 3.4 *(static_cast<double> (val) )/ 1024 ) * coeff;
Donc tension est connu est je l'affiche sur le LCD
La boucle se fait bien, la tension change sur l'afficheur LCD, mais par contre meme tension a 0, la boucle continu !

J'ai fait comme ceci :

Code : Tout sélectionner

      while (tension >= cutoff) // DEBUT - Test tant que batterie sup a cutoff
      {
      lcd.clear();
      lcd.home();
      lcd.print("TEST EN COURS ...");
      lcd.setCursor(0, 1);
      lcd.print(tension);
      lcd.print(" ");
      lcd.print(val);
      lcd.print(" ");
      lcd.print(cutoff);
      
      tension -=0.3;
      
      delay(5000);
      }
Et la sa fonctionne :( Quand la tension va en dessous de cutoff, on sort de la boucle! Il y a quelle que chose qui m'échappe visiblement !

Alors que comme ceci, cela ne fonctionne pas :

Code : Tout sélectionner

      while (tension >= cutoff) // DEBUT - Test tant que batterie sup a cutoff
      {
      int val = adc.readADC(0);
      tension = ( 3.4 *(static_cast<double> (val) )/ 1024 ) * coeff;
      lcd.clear();
      lcd.home();
      lcd.print("TEST EN COURS ...");
      lcd.setCursor(0, 1);
      lcd.print(tension);
      lcd.print(" ");
      lcd.print(val);
      lcd.print(" ");
      lcd.print(cutoff);
      delay(5000);
      }
Meme avec tension a 0, je ne sort pas de la boucle, pourtant cutoff est a 2,75

--------------

J'ai rien dit, cela marche maintenant !

Surement résolu donc par

Code : Tout sélectionner

tension = ( 3.4 *(static_cast<double> (val) )/ 1024 ) * coeff;
Merci beaucoup :D

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: Boucle en C++

Message par guillaume9344 » ven. 17 juin 2016 20:16

De rien , donc résolut ?
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

EVOTk

Re: Boucle en C++

Message par EVOTk » ven. 17 juin 2016 20:17

Oui oui completement, merci !

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: Boucle en C++

Message par vague nerd » sam. 25 juin 2016 16:43

Ben et le petit [Résolu] alors ? :lol:
Cdt.
Cordialement,

Vague Nerd

EVOTk

Re: Boucle en C++

Message par EVOTk » sam. 25 juin 2016 19:15

C'etait fait ! :mrgreen:

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: Boucle en C++

Message par vague nerd » sam. 25 juin 2016 21:57

:oops: alors !
Cordialement,

Vague Nerd

Répondre

Retourner vers « C / C++ »