Partage
  • Partager sur Facebook
  • Partager sur Twitter

le dé numerique....

encore lui !

    29 avril 2020 à 18:53:23

    bonjour,

    voici mon code pour le dé numerique. j'ai une erreur qui se répète tout le temps :

    expected unqualified-id before 'if'

    Pouvez vous me conseiller ?

    Guillaume

    [code]
    int pinBp=7;
    int ledHautGauche=2;
    int ledBasGauche=3;
    int ledCentre=4;
    int ledHautDroit=5;
    int ledBasDroit=6;
    int nbAlea;
    int affichage;
    
    void setup() {
      Serial.begin(9600);
      
    
        pinMode(pinBp,INPUT_PULLUP);
        for(int d=2;d<7;d++){//mise en mode output et mise a 0
         pinMode(d,OUTPUT); 
         digitalWrite(d,LOW);
        }
        
        randomSeed(analogRead(0));//initialise la sequence aléatoire
           
      
    
    }
    
    
    void loop() {
      boolean
      etatBp=digitalRead(pinBp);//lecture etatBp et stockage dans etatBp
      if (etatBp=HIGH);
      for (int compteur=1;compteur<=6;compteur++)
        nbAlea=random(6);
        Serial.println(nbAlea);
    
    }
    //declaration des fonctions
    //cette fonction sert à eteindre toutes les diodes
    
    void setZero(){
       for(int d=2;d<7;d++){
        digitalWrite(d,LOW);
       }
    }
    //cette fonction recupere un nombre et allume les led en conséquence
    void affiche(int nombre){
    setZero();//fonction pour tout eteindre
    }
    
    if (nombre==1){
      digitalWrite(ledCentre,HIGH);
      return;
    }
    if (nombre==2){
      digitalWrite(ledHautDroit,HIGH);
      digitalWrite(ledBasGauche,HIGH);
      return;
    }
    if (nombre==3){
      digitalWrite(ledHautDroit,HIGH);
      digitalWrite(ledBasGauche,HIGH);
      digitalWrite(ledCentre,HIGH);
      return;
    }
    if (nombre==4){
      digitalWrite(ledHautDroit,HIGH);
      digitalWrite(ledBasGauche,HIGH);
      digitalWrite(ledHautGauche,HIGH);
      digitalWrite(ledBasDroit,HIGH);
        return;
    }
    if (nombre==5){
      digitalWrite(ledHautDroit,HIGH);
      digitalWrite(ledBasGauche,HIGH);
      digitalWrite(ledHautGauche,HIGH);
      digitalWrite(ledBasDroit,HIGH);
      digitalWrite(ledCentre,HIGH);
      return;
    }
    [/code]



    Arduino : 1.8.10 (Windows 10), Carte : "Arduino Uno"

    de_led:50:1: error: expected unqualified-id before 'if'

    de_led:54:1: error: expected unqualified-id before 'if'

    de_led:59:1: error: expected unqualified-id before 'if'

    de_led:65:1: error: expected unqualified-id before 'if'

    de_led:72:1: error: expected unqualified-id before 'if'

    exit status 1

    expected unqualified-id before 'if'

    -
    Edité par GuillaumeDubreuil 30 avril 2020 à 17:40:39

    • Partager sur Facebook
    • Partager sur Twitter
      Staff 30 avril 2020 à 15:09:10

      Bonjour,

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        30 avril 2020 à 18:18:08

        Ca me semble évident: la ligne 50 n'appartenant à aucune fonction, le compilateur n'y comprend plus rien et se demande ce que vient faire ce if perdu au milieu de nulle part.

        Pareil pour les autres if.

        De plus, la ligne 31 est très très suspecte: un = au lieu d'un ==, le if se termine par un ;

        et vu l'indentation des ligne 33 et 34, elles semblent devoir faire partie du for de la ligne 32, ce qui n'est pas le cas.

        • Partager sur Facebook
        • Partager sur Twitter
          30 avril 2020 à 20:00:48

          bonjour,

          J'ai modifié mon code, il n'y a plus d'erreur.

          Mais mon dé ne fonctionne pas correctement. En effet, les leds ne s'allument pas comme il faudrait !

          j'ai aussi regardé un autre code (avec 7 LEDs) , totalement different il n'a rien à voir avec le cours d'ici. 

          [code]
          int pinBp=7;
          int ledHautGauche=2;
          int ledBasGauche=3;
          int ledCentre=4;
          int ledHautDroit=5;
          int ledBasDroit=6;
          int nbAlea;
          int affichage;
          
          void setup() {
            Serial.begin(9600);
            
          
              pinMode(pinBp,INPUT_PULLUP);
              for(int d=2;d<7;d++){//mise en mode output 
               pinMode(d,OUTPUT); 
               
              }
              
              randomSeed(analogRead(0));//initialise la sequence aléatoire
                 
            
          
          }
          
          
          void loop() {
            boolean
            etatBp=digitalRead(pinBp);//lecture etatBp et stockage dans etatBp
            if (etatBp==LOW){
              
              nbAlea=random(6);
              Serial.println(nbAlea);
              for (int nb=0;nb<6;nb++){
          setZero();
              delay(2000);
                  affiche(nb);
              delay(2000);
            }
            
          
          }
          }
          //declaration des fonctions
          //cette fonction sert à eteindre toutes les diodes
          
          void setZero(){
             for(int d=2;d<7;d++){
              digitalWrite(d,LOW);
              return;
             }
          }
          //cette fonction recupere un nombre et allume les led en conséquence
          void affiche(int nombre){
          
          
          if (nombre==1){
            digitalWrite(ledCentre,HIGH);
            return;
          }
          if (nombre==2){
            digitalWrite(ledHautDroit,HIGH);
            digitalWrite(ledBasGauche,HIGH);
            return;
          }
          if (nombre==3){
            digitalWrite(ledHautDroit,HIGH);
            digitalWrite(ledBasGauche,HIGH);
            digitalWrite(ledCentre,HIGH);
            return;
          }
          if (nombre==4){
            digitalWrite(ledHautDroit,HIGH);
            digitalWrite(ledBasGauche,HIGH);
            digitalWrite(ledHautGauche,HIGH);
            digitalWrite(ledBasDroit,HIGH);
              return;
          }
          if (nombre==5){
            for(int d=2;d<7;d++){
              digitalWrite(d,LOW);
            return;
          }
          }
          if (nombre==6){
            for(int d=2;d<7;d++){
              digitalWrite(d,LOW);
              return;
             }
          }
          }
          
          
          [/code]

          -
          Edité par GuillaumeDubreuil 1 mai 2020 à 20:00:43

          • Partager sur Facebook
          • Partager sur Twitter
            1 mai 2020 à 23:10:30

            bonjour,

            J'ai modifié mon code, il n'y a plus d'erreur.

            Mais mon dé ne fonctionne pas correctement. En effet, les leds ne s'allument pas comme il faudrait !

            [code]
            int pinBp=7;
            int ledHautGauche=2;
            int ledBasGauche=3;
            int ledCentre=4;
            int ledHautDroit=5;
            int ledBasDroit=6;
            int nbAlea;
            int affichage;
            
            void setup() {
              Serial.begin(9600);
              
            
                pinMode(pinBp,INPUT_PULLUP);
                for(int d=2;d<7;d++){//mise en mode output 
                 pinMode(d,OUTPUT); 
                 
                }
                
                randomSeed(analogRead(0));//initialise la sequence aléatoire
                   
              
            
            }
            
            
            void loop() {
              boolean
              etatBp=digitalRead(pinBp);//lecture etatBp et stockage dans etatBp
              if (etatBp==LOW){
                
                nbAlea=random(6);
                Serial.println(nbAlea);
                for (int nb=0;nb<6;nb++){
            setZero();
                delay(2000);
                    affiche(nb);
                delay(2000);
              }
              
            
            }
            }
            //declaration des fonctions
            //cette fonction sert à eteindre toutes les diodes
            
            void setZero(){
               for(int d=2;d<7;d++){
                digitalWrite(d,LOW);
                return;
               }
            }
            //cette fonction recupere un nombre et allume les led en conséquence
            void affiche(int nombre){
            
            
            if (nombre==1){
              digitalWrite(ledCentre,HIGH);
              return;
            }
            if (nombre==2){
              digitalWrite(ledHautDroit,HIGH);
              digitalWrite(ledBasGauche,HIGH);
              return;
            }
            if (nombre==3){
              digitalWrite(ledHautDroit,HIGH);
              digitalWrite(ledBasGauche,HIGH);
              digitalWrite(ledCentre,HIGH);
              return;
            }
            if (nombre==4){
              digitalWrite(ledHautDroit,HIGH);
              digitalWrite(ledBasGauche,HIGH);
              digitalWrite(ledHautGauche,HIGH);
              digitalWrite(ledBasDroit,HIGH);
                return;
            }
            if (nombre==5){
              for(int d=2;d<7;d++){
                digitalWrite(d,LOW);
              return;
            }
            }
            if (nombre==6){
              for(int d=2;d<7;d++){
                digitalWrite(d,LOW);
                return;
               }
            }
            }
            
            
            [/code]



            • Partager sur Facebook
            • Partager sur Twitter
              Staff 4 mai 2020 à 15:06:08

              Premier problème, tes affichages de 5 et 6 sont identiques, c'est embêtant.

              Dans les 2 cas, tu viens faire un LOW sur toutes les LEDs, donc cela va éteindre tout ton dé.

              Je pense que tu as oublié d'implémenter ces 2 cas ;)

              Autre problème, sur tes affichages 1, 2, 3 et 4, tu mets un HIGH sur les LEDs devant afficher le nombre en question mais tu ne touches pas aux autres LEDs.

              Du coup, les autres LEDs ne changent pas d'état, ce qui implique qu'elles restent allumées si elles étaient déjà allumées.

              Dans ta fonction affiche, tu devrais d'abord tout éteindre dans un premier temps, puis allumer les bonnes LEDs dans un second temps.

              Dernier point, ta boucle ligne 34 à 40 va toujours demander d'afficher 0,1,2,3,4,5, ce qui me parait assez étrange vu qu'elle n'utilise pas le nombre aléatoire généré... il te faudrait étudier ce point aussi.

              • Partager sur Facebook
              • Partager sur Twitter
                5 mai 2020 à 12:18:45

                Bonjour,

                Dans ma boucle 34 à 40, je veux appeler les fonctions setZero() et affiche(nombre).

                J'avoue, que je ne comprends pas trop ce passage.

                voila ma modif : 

                [code]
                int pinBp=7;
                int ledHautGauche=2;
                int ledBasGauche=3;
                int ledCentre=4;
                int ledHautDroit=5;
                int ledBasDroit=6;
                int nbAlea;
                int affichage;
                
                void setup() {
                  Serial.begin(9600);
                  
                
                    pinMode(pinBp,INPUT_PULLUP);
                    for(int d=2;d<7;d++){//mise en mode output 
                     pinMode(d,OUTPUT); 
                     
                    }
                    
                    randomSeed(analogRead(0));//initialise la sequence aléatoire
                       
                  
                
                }
                
                
                void loop() {
                  boolean
                  etatBp=digitalRead(pinBp);//lecture etatBp et stockage dans etatBp
                  if (etatBp==HIGH){
                    
                    nbAlea=random(6);
                    
                    for (int nbAlea=0;nbAlea<6;nbAlea++){
                setZero();
                    delay(2000);
                    Serial.println(nbAlea);
                        affiche(nbAlea);
                    delay(2000);
                  }
                  
                
                }
                }
                //declaration des fonctions
                
                
                void setZero(){//cette fonction sert à eteindre toutes les diodes
                   for(int d=2;d<7;d++){
                    digitalWrite(d,LOW);
                    return;
                   }
                }
                //cette fonction recupere un nombre et allume les led en conséquence
                void affiche(int nbAlea){
                
                
                if (nbAlea==1){
                  digitalWrite(ledCentre,HIGH);
                  return;
                }
                if (nbAlea==2){
                  digitalWrite(ledHautDroit,HIGH);
                  digitalWrite(ledBasGauche,HIGH);
                  return;
                }
                if (nbAlea==3){
                  digitalWrite(ledHautDroit,HIGH);
                  digitalWrite(ledBasGauche,HIGH);
                  digitalWrite(ledCentre,HIGH);
                  return;
                }
                if (nbAlea==4){
                  digitalWrite(ledHautDroit,HIGH);
                  digitalWrite(ledBasGauche,HIGH);
                  digitalWrite(ledHautGauche,HIGH);
                  digitalWrite(ledBasDroit,HIGH);
                    return;
                }
                if (nbAlea==5){
                  for(int d=2;d<7;d++){
                    digitalWrite(d,HIGH);
                  return;
                }
                }
                if (nbAlea==6){
                  for(int d=2;d<7;d++){
                    digitalWrite(d,LOW);
                    return;
                   }
                }
                }
                [/code]



                • Partager sur Facebook
                • Partager sur Twitter
                  Staff 5 mai 2020 à 16:31:47

                  Ta fonction setZero éteint tout tandis que ta fonction affiche se contente d'allumer certaines LED en fonction du nombre en paramètre.

                  Mais ta fonction affiche ne fait qu'allumer des LEDs et n'en n'éteint aucune.

                  Donc si tu fais un appel à affiche(1) pour afficher 1 suivit d'un appel à affiche(2) pour afficher 2, tu vas te retrouver avec un résultat assez étrange car tu auras les LED du 1 et du 2 allumées.

                  Il faut donc penser à appeler setZero entre 2 affichage pour qu'il n'y ai pas de glitch.

                  D'où ma proposition de faire en sorte que ta fonction affiche éteigne tout avant d'allumer les LEDs adéquates.

                  *****

                  PS: je crois qu'il te manque des LEDs... un dès possède 7 emplacements et non 5 :

                  En l'état, il te manque 2 LEDs pour afficher le chiffre 6.

                  ===== 0 =====
                  
                  .     .
                  
                  .  .  .
                  
                  .     .
                  
                  ===== 1 =====
                  
                  .     .
                  
                  .  O  .
                  
                  .     .
                  
                  
                  ===== 2 =====
                  
                  .     O
                  
                  .  .  .
                  
                  O     .
                  
                  
                  ===== 3 =====
                  
                  .     O
                  
                  .  O  .
                  
                  O     .
                  
                  ===== 4 =====
                  
                  O     O
                  
                  .  .  .
                  
                  O     O
                  
                  ===== 5 =====
                  
                  O     O
                  
                  .  O  .
                  
                  O     O
                  
                  ===== 6 =====
                  
                  O     O
                  
                  O  .  O
                  
                  O     O



                  -
                  Edité par lorrio 5 mai 2020 à 16:34:27

                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 mai 2020 à 12:42:39

                    Bonjour,

                    Le dé 5 led, correspond au cours sur openclassroom. (la correction n'existe pas !)

                    Effectivement, un autre support propose un dé 7 leds, avec une autre logique de codage...

                    Mais j'aimerais finir ce code, pour comprendre tout ca.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      Staff 6 mai 2020 à 14:08:42

                      Et tu coups, où en es tu ?

                      Que vois tu s'afficher sur ton dé ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 mai 2020 à 16:35:13

                        Bonjour,

                        Voilà encore des corrections :

                        Maintenant, quand  j'appuie sur le BP, une sequence de chiffre commence de 0à5, pas du tout aléatoire !

                        Le 6 ne sort pas !

                        Le BP ne sert qu'a démmarer un compte. Ca avance, mais je ne dois pas mettre certaines lignes à la bonne place ?

                        Et ma fonction setZero ne doit servir à rien.

                        [code]
                        int pinBp=7;
                        int ledHautGauche=2;
                        int ledBasGauche=3;
                        int ledCentre=4;
                        int ledHautDroit=5;
                        int ledBasDroit=6;
                        int nbAlea;
                        int affichage;
                        
                        void setup() {
                          Serial.begin(9600);
                          
                        
                            pinMode(pinBp,INPUT_PULLUP);
                            for(int d=2;d<7;d++){//mise en mode output 
                             pinMode(d,OUTPUT); 
                             
                            }
                            
                            randomSeed(analogRead(0));//initialise la sequence aléatoire
                               
                          
                        
                        }
                        
                        
                        void loop() {
                          boolean
                          etatBp=digitalRead(pinBp);//lecture etatBp et stockage dans etatBp
                          if (etatBp==LOW){
                            
                            nbAlea=random(6);
                            
                            for (int nbAlea=0;nbAlea<6;nbAlea++){
                        setZero();
                            delay(2000);
                            Serial.println(nbAlea);
                                affiche(nbAlea);
                            delay(2000);
                          }
                          
                        
                        }
                        }
                        //declaration des fonctions
                        //cette fonction sert à eteindre toutes les diodes
                        
                        void setZero(){
                           for(int d=2;d<7;d++){
                            digitalWrite(d,LOW);
                            return;
                           }
                        }
                        //cette fonction recupere un nombre et allume les led en conséquence
                        void affiche(int nbAlea){
                        
                        
                        
                        if (nbAlea==1){
                          digitalWrite(ledCentre,HIGH);
                          digitalWrite(ledHautGauche, LOW);
                          digitalWrite(ledHautDroit, LOW);
                          digitalWrite(ledBasGauche, LOW);
                          digitalWrite(ledBasDroit, LOW);
                          
                          delay (3000);
                          
                          return;
                        }
                        if (nbAlea==2){
                          digitalWrite(ledHautDroit,HIGH);
                          digitalWrite(ledBasGauche,HIGH);
                          digitalWrite(ledCentre,LOW);
                          digitalWrite(ledHautGauche, LOW);
                          digitalWrite(ledBasDroit, LOW);
                          delay (3000);
                          return;
                        }
                        if (nbAlea==3){
                          digitalWrite(ledHautDroit,HIGH);
                          digitalWrite(ledBasGauche,HIGH);
                          digitalWrite(ledCentre,HIGH);
                          digitalWrite(ledHautGauche, LOW);
                          digitalWrite(ledBasDroit, LOW);
                          delay (3000);
                           return;
                        }
                        if (nbAlea==4){
                          digitalWrite(ledHautDroit,HIGH);
                          digitalWrite(ledBasGauche,HIGH);
                          digitalWrite(ledHautGauche,HIGH);
                          digitalWrite(ledBasDroit,HIGH);
                          digitalWrite(ledCentre, LOW);
                          delay (3000);
                              return;
                        }
                        if (nbAlea==5){
                          for(int d=2;d<7;d++){
                            digitalWrite(d,HIGH);}
                            delay (3000);
                         
                          return;
                        
                        }
                        if (nbAlea==6){
                          for(int d=2;d<7;d++){
                            digitalWrite(d,LOW);}
                            return;
                           
                        }
                        }
                        [/code]



                        • Partager sur Facebook
                        • Partager sur Twitter
                          Staff 8 mai 2020 à 11:40:18

                          Regarde bien ces lignes :

                          nbAlea=random(6);
                          
                          for (int nbAlea=0;nbAlea<6;nbAlea++){
                          	setZero();
                          	delay(2000);
                          	Serial.println(nbAlea);
                          	affiche(nbAlea);
                          	delay(2000);
                          }

                          Tu commences par tirer un nombre aléatoire que tu places dans la variable nbAlea.

                          Puis juste après, tu fais une boucle for qui utilise cette même variable pour faire une boucle de 0 à 6 (non inclu).

                          Alors forcément, cela ne sert à rien de tirer aléatoirement un nombre puisque tu l'écrases juste après.

                          Tu ferais mieux d'avoir ce genre de code :

                          for ( int loop = 0 ; loop <6 ; loop++ ){
                          	int nbAlea = random(6);
                          	setZero();
                          	delay(2000);
                          	Serial.println(nbAlea);
                          	affiche(nbAlea);
                          	delay(2000);
                          }

                          Tu remarqueras que j'ai utiliser 2 variables différentes : loop et nbAlea.

                          Et que j'ai placé le tirage du nombre à l'interieur de la boucle pour qu'une nouveau nombre soit généré à chaque itération.

                          Sinon, le nombre aléatoire affiché sera 6 fois le même.

                          *****

                          Pour ce qui est du 6 qui ne sort pas, c'est normal : la fonction random(x) sort un nombre entre 0 et x non inclu.

                          Donc random(6) peut te donner les valeurs 0,1,2,3,4,5 aléatoirement.


                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 mai 2020 à 14:59:13

                            Bonjour,

                            Tout va bien, sauf mon bouton poussoir. En appuyant dessus, je lance une séquence complète. Un nombre sort toute les 3 secondes après

                            un seul appui. La gestion du Bp doit être mal placé dans mon code.

                            Guillaume

                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 mai 2020 à 19:40:36

                              au debut, j'ai utilisé input_pullup. J'ai modifié en montant mon Bp en pull-down avec une R=10k.

                              j'ai remarqué, que le BP n'avait pas un bon contact sur la plaque d'essai. J'ai aussi court-circuité le BP mais sans changement...

                              • Partager sur Facebook
                              • Partager sur Twitter
                                Staff 12 mai 2020 à 8:09:18

                                Ce n'est pas très clair tout ça... pourrais tu nous montrer un schéma de câblage de ton bouton ?

                                Ou une photo du montage ?

                                Je te propose aussi d'essayer ce code :

                                int pinBp = 7;
                                int pinLedCentre = 4;
                                
                                void setup() {
                                	pinMode(pinBp, INPUT);
                                	pinMode(pinLedCentre, OUTPUT);
                                }
                                
                                void loop() {
                                	int etatBp = digitalRead(pinBp);
                                	digitalWrite(ledCentre, pinLedCentre);
                                }
                                

                                Celui-ci recopie l'état du bouton sur la LED du centre.

                                Si tu vois que ta LED s'allume et s'éteint en fonction du bouton, c'est que ton bouton marche, et donc que le problème vient de ton code du dés.

                                Si tu vois que ta LED reste toujours allumées ou toujours éteinte, alors c'est un problème de câblage.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                le dé numerique....

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                • Editeur
                                • Markdown