While or not while ?

Répondre
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 9371
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 57
Pays :
France (fr)
France
oct. 2021 11 18:13

While or not while ?

Message par likikiFrance

Voici Un truc que je ne m'explique pas.

Dans le code qui suit, j'arrive sur ma boucle while, l'affichage sur l'écran est bien exécuté (je suis donc bien dans ma boucle while) mais le reste ... non et le programme reste planté là, même en cas de changement de l'état d'"Inter".

Là, j'avoue que je sèche dessus depuis 2 jours.

Si l'un d'entre vous a une idée, je suis preneur.

N'hésitez pas a poser des questions.

Code : Tout sélectionner


while (Inter == HIGH){
  
    lcd.setCursor (0,0);
    lcd.print ("Position plateau"); 
    delay(10);
    lcd.setCursor(0,1);         // place le curseur ligne suivante
    lcd.print (plateau);
    lcd.print ("            ");
    delay (40);

if (BPMO == HIGH){
  
  delay(500);
  
  stepper.setSpeed(10);
  stepper.step(1);
  plateau = plateau + 1;
  
}

if (BPDE == HIGH){
  
  delay(500);
  
  stepper.setSpeed(10);
  stepper.step(-1);
  plateau = plateau -1;
  
}

}

.


:kingmoi:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
herwatFrance
2000 posts et +
2000 posts et +
Messages : 5668
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 77
Pays :
France (fr)
France
oct. 2021 11 20:20

Re: While or not while ?

Message par herwatFrance

:hhhaaaa: :hhhaaaa: :hhhaaaa:

ça fait plaisir ! je ne suis pas le seul à avoir ce genre de problème ! ! ! L'ordi a même failli passer par la fenêtre plus d'une fois, même s'il n'y est pour rien, le pauvre . . . .

J'ai souvent eu des problèmes avec les identités et je n'ai jamais compris pourquoi .

Dans ton cas , tu écrit : while (Inter == HIGH) { en fait, while (Inter ) { suffit .
Même chose pour if (BPMO ){ au lieu de if (BPMO == HIGH){

Par contre dans la boucle while, on a jamais Inter = LOW . Donc, c'est normal que le programme ne sorte jamais de la boucle . . . .
Il faut savoir que le moteur ne bouge que lorsque le programme passe sur la fonction run() et il ne bouge que d'un pas ; donc cette fonction doit être dans une boucle .

J'espère t'avoir été utile . En tout cas n'hésite pas à poser d'autre question .
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 9371
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 57
Pays :
France (fr)
France
oct. 2021 11 20:34

Re: While or not while ?

Message par likikiFrance

:hhhaaaa: bienvenue au club des jeteur de pc par la fenêtre. :hhhaaaa:

Le propre de la boucle while() est :

Tant que la condition entre (), "Inter == High" dans mon cas, est VRAIS, la boucle continue. Dès que la condition est FAUX (Inter == LOW) la boucle stop.

Mais là non.

Ou alors je n'ai rien compris a la boucle while. :lollol:


Je viens de lire (sur le net) qu'il faudrait écrire : while (digitalRead(Inter) == HIGH). Je vais tester cela (sans grande conviction). :mdr3:

herwat a écrit : 11 oct. 2021, 20:20
Dans ton cas , tu écrit : while (Inter == HIGH) { en fait, while (Inter ) { suffit .
Même chose pour if (BPMO ){ au lieu de if (BPMO == HIGH){

Par contre dans la boucle while, on a jamais Inter = LOW . Donc, c'est normal que le programme ne sorte jamais de la boucle . . . .
Il faut savoir que le moteur ne bouge que lorsque le programme passe sur la fonction run() et il ne bouge que d'un pas ; donc cette fonction doit être dans une boucle .

J'espère t'avoir été utile . En tout cas n'hésite pas à poser d'autre question .
Pour toi "while (inter)" = "while(Inter == HIGH)". Comment sait-il que je veux la condition "HIGH" et non pas "LOW" ?

A moins que ce ne soit la condition par défaut, en ce cas OK. Mais je n'ai lue ça nul part.

Je sent que je vais me coucher moins bête ce soir.

:siffle:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
herwatFrance
2000 posts et +
2000 posts et +
Messages : 5668
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 77
Pays :
France (fr)
France
oct. 2021 11 21:07

Re: While or not while ?

Message par herwatFrance

likiki a écrit : 11 oct. 2021, 20:34

Je viens de lire (sur le net) qu'il faudrait écrire : while (digitalRead(Inter) == HIGH). Je vais tester cela (sans grande conviction). :mdr3:


:siffle:
Ah ben oui, Si Inter est une entrée, il faut effectivement la lire .

Sinon, Dans une condition, "Inter" équivaut à "Inter == High" et "!Inter" équivaut à "Inter == LOW" .
likiki a écrit : 11 oct. 2021, 20:34
Je sent que je vais me coucher moins bête ce soir.

:siffle:

ça, c'est toi qui le dit ! :hhhaaaa: :hhhaaaa: :hhhaaaa:
Avatar du membre
herwatFrance
2000 posts et +
2000 posts et +
Messages : 5668
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 77
Pays :
France (fr)
France
oct. 2021 11 23:36

Re: While or not while ?

Message par herwatFrance

Bon, je m'explique .

Prenons l'expression : "!Inter" équivaut à "Inter == LOW" . Et supposons que Inter = LOW .
L'identité "Inter == LOW" est donc VRAI . Ok ? Bon .
Le "!" devant Inter signifie que l'expression : "!Inter" est le contraire de Inter . Donc, dans le cas présent, "!Inter" est donc VRAI, puisque Inter est LOW .
Les deux propositions "!Inter" et "Inter == LOW" sont donc équivalentes . CQFD
En résumé, si c'est FAUX, c'est que c'est VRAI . . . . :3:

Bon, il est temps de prendre un Doliprane et d'aller se coucher ! :hhhaaaa:

Mais j'adore ces subtilités de programmation que j'ai découvert au fur et à mesure et qui font parfois éviter des lignes de programme .

L'opérateur "ou exclusif " qui s'écrit " ^ " est très intéressant aussi . Mais je m'emporte ! Allez, dodo . . .
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 9371
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 57
Pays :
France (fr)
France
oct. 2021 12 04:49

Re: While or not while ?

Message par likikiFrance

Oui, tu a raison.

Je viens de me réveiller, mais après un tel post, je retourne me coucher.

:hhhaaaa:

:sivousme:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
Pirlouit95France
Modérateur
Modérateur
Messages : 1282
Enregistré le : 10 mars 2021, 16:27
Prénom : Johan
LOCALISATION : Magny-en-Vexin
Centres d'intérêts : En dehors du modélisme ferroviaire, j'aime la marche, les séries télévisées cultes des années 60 à 80.
Echelle pratiquée : H0
Âge : 56
Pays :
France (fr)
France
oct. 2021 12 04:57

Re: While or not while ?

Message par Pirlouit95France

Moi j'ai rien compris.
Que vient faire l'inter de Milan dans ce jeu de quilles?

:sivousme:
Amicalement vôtre.
Johan.
Papy2568
oct. 2021 12 09:07

Re: While or not while ?

Message par Papy2568

:hhhaaaa: :hhhaaaa:
Avatar du membre
herwatFrance
2000 posts et +
2000 posts et +
Messages : 5668
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 77
Pays :
France (fr)
France
oct. 2021 12 09:09

Re: While or not while ?

Message par herwatFrance

:mdrmdr:
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 9371
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 57
Pays :
France (fr)
France
oct. 2021 13 19:03

Re: While or not while ?

Message par likikiFrance

Il semblerais que dans une boucle "While" ou "do ... while", les bouche "if" ou "if ... else" ne fonctionnent pas.

Pourquoi, mystère (et boule de gomme). :siffle:

Avec ça, je ne suis pas verni.

Il me reste "une" solution (avant de faire comme Hervé ==> Image ) :mdr1:


Une fonction magique.

:a_suivre:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
herwatFrance
2000 posts et +
2000 posts et +
Messages : 5668
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 77
Pays :
France (fr)
France
oct. 2021 13 20:18

Re: While or not while ?

Message par herwatFrance

Si si si, ça fonctionne !

Pour exemple, je te met ci dessous ma fonction de sélection de voie qui marche sans soucis

Code : Tout sélectionner

    void SelecVoie() {               // Sélection et choix d'une voie

             Alim_Led () ;
             Confirm = false ;
             mem = false ;
             Voie =  VoieSel ;
             do
                 {
                  if (!Veille && millis() - TempsZero > 6000 )
                        { Veille = true ;
                          if( Voie != VoieSel ){ digitalWrite(pinLed [Voie],LOW); }
                        }
                  act = false ;
                  VoieInt = Voie ;
                  if (!act && digitalRead(PinBPplus))         // Bouton montée actionné
                                        { Voie = Voie + 1 ; act = true ; }                                                 
                  if (!act && digitalRead(PinBPmoins))        // Bouton descente actionné
                                        { Voie = Voie -1 ; act = true ; }                       
                  if (!Confirm && digitalRead(PinBPConf))     // Bouton de confirmation actionné
                                        { Confirm = true ; }
                  if (!mem && digitalRead(PinBPajustmem))     // Bouton d'ajustement actionné
                                        { mem = true ; }
                  if (act)
                            {
                            if ( Voie < 0 ) { Voie = 0; }
                            if ( Voie > 10 ) { Voie = 10; }

                            TempsZero = millis() ;
                            Veille = false ;
                            affichage (3) ;
                            digitalWrite(pinLed [Voie], HIGH);
                            if( VoieInt != VoieSel ){ digitalWrite(pinLed [VoieInt], LOW); }
                            delay (400) ;
                            }
                 }
            while ( !mem && !Confirm && !Veille ) ;
                  
            if ( Confirm ) {VoieAnc = VoieSel ;
                            VoieSel = Voie ;
                            digitalWrite(pinLed [VoieSel], HIGH);
                            digitalWrite(pinLed [VoieAnc], LOW);
                            Mvt = true ;
                            delay (400) ; }
                            
            if ( mem ) { Ajustement () ; }

    }
C'est le programmeur qui fonctionne mal ! :hhhaaaa: :hhhaaaa: :hhhaaaa:
L'ordi n'y est pour rien . :D :D :D épargne le, le pauvre . . .

Sérieusement, La définition des variables, tu les trouvera ici
Avatar du membre
herwatFrance
2000 posts et +
2000 posts et +
Messages : 5668
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 77
Pays :
France (fr)
France
oct. 2021 13 20:34

Re: While or not while ?

Message par herwatFrance

L'exemple ci-dessous me parait plus adapté pour ton problème

Code : Tout sélectionner

void Ajustement ()
     {
      Niveaumod = NiveauVoie [VoieSel] ;
      Confirm = false ;
      Verrouillage( false ) ;
      digitalWrite(pinDriverHT,LOW);
      affichage (7) ;
      do
                 {
                  act = false ;
                  if (!act && digitalRead(PinBPplus))         // Bouton montée actionné
                                        { Niveaumod = Niveaumod + 32 ; act = true ; }                                                 
                  if (!act && digitalRead(PinBPmoins))        // Bouton descente actionné
                                        { Niveaumod = Niveaumod -32 ; act = true ; }                       
                  if (!Confirm && digitalRead(PinBPConf))     // Bouton de mémorisation actionné
                                        { Confirm = true ; }
                  
                  if (act)
                            {
                            Moteur1.moveTo(Niveaumod);
                            affichage (7) ;
                            ini = true ; 
                            while (ini) {
                            Moteur1.run();
                            if ( !Moteur1.run() ){ ini = false ; }
                                        }
                            delay (400) ;
                            }
                 }
            while ( !Confirm ) ;
            
            if ( Confirm ) {
                            digitalWrite(pinDriverHT,HIGH);
                            NiveauVoie [VoieSel] = Niveaumod ;
                            EEPROM.put(VoieSel*4+2, NiveauVoie [VoieSel]);
                            affichage (8) ;
                            delay (2000) ;
                           }

     }
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 9371
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 57
Pays :
France (fr)
France
oct. 2021 14 17:13

Re: While or not while ?

Message par likikiFrance

Effectivement, cela fonctionne.

J'ai inséré une variable de contrôle (z) et effectivement les boucle sont bien lue et exécutées correctement.

Code : Tout sélectionner

//
//--------------------------- Mise a quai descente ---------------------------------
//

void Maqd(){


if (BPDE == HIGH){
  
            delay(500);
  
            stepper.setSpeed(10);
            stepper.step(-1);
            plateau = plateau -1;
            z --;
 
            }
  
}



//
//--------------------------- Mise a quai montée ---------------------------------
//

void Maqm(){

if (BPMO == HIGH){
  
            delay(500);
  
            stepper.setSpeed(10);
            stepper.step(1);
            plateau = plateau + 1;
            z --;
 
            }
  
}



//
//--------------------------- Mise a quai manuel ---------------------------------
//


void Apprentissage(){           // Module apprentissage

Pinter = 1;


do {

  
    lcd.setCursor (0,0);
    lcd.print ("Position plateau"); 
    delay(10);
    lcd.setCursor(0,1);         // place le curseur ligne suivante
    lcd.print (plateau);
    //lcd.print ("            ");
    lcd.print ("       ");
    lcd.print (z);
    delay (40);


            Maqm();


            Maqd();
z ++;

            if (Inter == LOW){
              Pinter = 0;
              
            }
} 

           while (Pinter = 0);

      // }   


}

Mais voilà LE hic.


Si je rajoute une instruction au début de l'instruction void comme ici :

Code : Tout sélectionner

//
//--------------------------- Mise a quai manuel ---------------------------------
//


void Apprentissage(){           // Module apprentissage

Pinter = 1;

Otaquet(); <===== cette fonction qui actionne le servo

do {

  
    lcd.setCursor (0,0);
    lcd.print ("Position plateau"); 
    delay(10);
    lcd.setCursor(0,1);         // place le curseur ligne suivante
    lcd.print (plateau);
    //lcd.print ("            ");
    lcd.print ("       ");
    lcd.print (z);
    delay (40);


            Maqm();


            Maqd();
z ++;

            if (Inter == LOW){
              Pinter = 0;
              
            }
} 

           while (Pinter = 0);

      // }   


}

C'est la merdasse. Cette instruction est lue constamment alors que la boucle while ne devrait pas aller la lire tant que Inter est HIGH.

C'est là que je sèche comme le linge sur son fil.

:hurt4:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
herwatFrance
2000 posts et +
2000 posts et +
Messages : 5668
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 77
Pays :
France (fr)
France
oct. 2021 14 19:33

Re: While or not while ?

Message par herwatFrance

Tu écris " while (Pinter = 0); " . Ne devrais-tu pas écrire " while (Pinter == 0); "

Bon . . . . Je vais approfondir la question . . .
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 9371
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 57
Pays :
France (fr)
France
oct. 2021 16 17:45

Re: While or not while ?

Message par likikiFrance

Alors voilà la solution (ou le problème tout dépend de quel coté on se met). :siffle:


1) prendre un Doliprane avec un verre d'eau

2) Relire le programme de A ==> Z :hurt4:

3) Reprendre un Doliprane

4) Prendre une feuille de papier, un crayon et faire un schéma séquentiel du programme en le lisant (en profiter pour re-prendre un Doliprane) :photo:

5) Allez dans le garage chercher un gros marteau

6) S'en mettre un bon coup derrière l'oreille droite (ou la gauche si vous êtes gaucher)

7) modifier la grosse connerie que vous avez faite dans le programme

8) Tester le programme

9) Enregistrer le programme

10) Aller ranger le marteau

11) Re-re-prendre un Doliprane a cause du marteau

12) Danser un peu ça fait du bien. :banane:

Bon, trêve de plaisanterie, quand on utilise la variable d'un actionneur en sortie type servo et qu'ensuite vous attendez qu'elle vous donne une valeur en entré de 1 ou 0, vous vous mettez dans la galère.

Temps perdu sur cette idiotie, deux semaines a raison de 2 a 3 heures par jours plus un samedi de 8h à 17 h.

Moi je vais me prendre une bière.


:sivousme:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
herwatFrance
2000 posts et +
2000 posts et +
Messages : 5668
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 77
Pays :
France (fr)
France
oct. 2021 16 18:20

Re: While or not while ?

Message par herwatFrance

Bon, j'ai pas tout compris . . . à part le Doliprane ! :D

ça fonctionne maintenant ?

J'ai eu ce genre de problème : utiliser la même variable pour deux choses en même temps . :hurt4: ça fait des choses bizarres . :-)
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 9371
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 57
Pays :
France (fr)
France
oct. 2021 16 18:35

Re: While or not while ?

Message par likikiFrance

Oui, ça fonctionne comme c'était prévue dans mon idée. :mdr:

Il me reste quelques bricoles a revoir, comme le calcul pour les déplacements, y adjoindre des feux (vert & rouge) est, etc.

:kingmoi:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
herwatFrance
2000 posts et +
2000 posts et +
Messages : 5668
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 77
Pays :
France (fr)
France
oct. 2021 16 18:43

Re: While or not while ?

Message par herwatFrance

:cooooool: :cooooool: :cooooool: :cooooool:
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 9371
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 57
Pays :
France (fr)
France
oct. 2021 16 18:44

Re: While or not while ?

Message par likikiFrance

Là ça prendre un peu de temps, car je vais me lancer dans mon concours.

:hhhaaaa:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
herwatFrance
2000 posts et +
2000 posts et +
Messages : 5668
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 77
Pays :
France (fr)
France
oct. 2021 17 11:33

Re: While or not while ?

Message par herwatFrance

Une tite vidéo, quand même . :-)
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 9371
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 57
Pays :
France (fr)
France
oct. 2021 17 11:56

Re: While or not while ?

Message par likikiFrance

Hummmmm, A voir si je met mon prototipage a coté.

:kingmoi:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Répondre