Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme tempo arduino

Sujet résolu
    5 mai 2019 à 16:05:12

    Bonjour 

    Pour un projet en arduino , j'ai besoin de faire une tempo , en gros elle doit faire allumer une led pendant un certain temps (n_minutes), faire une action pendant ce temps et 'eteindre juste après.

    Donc j'ai essayé de faire avec millis afin d'avoir plusieurs action en simultané sauf que j'ai du mal a comprendre comment utiliser millis en pratique.

    Le programme fait (pour faire simple) : si T_actuel - T_ancien > n_minutes alors faire...

    J'ai déclaré : int temps_ancien = millis(); et int temps_select = 0;  

    Seulement dans mon programme j'ai l'impression que c'est confus car j'ai l'impression que l'on fait millis() - millis() (temps_actuel - t_ancien):

    Si quelqu'un pourrait eventuellement m'eclaircir svp :) 

     // 1 MINUTES
          if (temps_select == 60000) 
          {
            digitalWrite(LED_TEST,HIGH);
            
            while(millis() - temps < 60000)
            {
              // Moteur allumé
            }
            digitalWrite(LED_TEST,LOW); 
          }
    • Partager sur Facebook
    • Partager sur Twitter
      5 mai 2019 à 17:41:18

      Hello,

      Ce serait plutot qqchose du genre

      #define DELAY	60000
      
      unsigned long start_time=millis();	
      digitalWrite(LED_TEST,HIGH);
      while(millis()-start_time < DELAY) {
      	// des actions
      } 
      digitalWrite(LED_TEST,LOW);
      

      -
      Edité par edgarjacobs 5 mai 2019 à 19:02:23

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        13 mai 2019 à 16:45:21

        edgarjacobs a écrit:

        Hello,

        Ce serait plutot qqchose du genre

        #define DELAY	60000
        
        unsigned long start_time=millis();	
        digitalWrite(LED_TEST,HIGH);
        while(millis()-start_time < DELAY) {
        	// des actions
        } 
        digitalWrite(LED_TEST,LOW);
        

        -
        Edité par edgarjacobs 5 mai 2019 à 19:02:23


        Bonjour , j'ai retravailler sur le prog en faisant l'essaie direct sur une carte mais le problème est que , la tempo s'ctive bien mais ne s'arrete pas et je ne comprends pas

        int led = 13;
        int temps_ancien = 0;
        unsigned long temps_select = 0;
        int tempo;
        
        
        void setup() {
          // put your setup code here, to run once:
          pinMode(led , OUTPUT);
          Serial.begin(9600);
         }
        
        void loop() {
          // put your main code here, to run repeatedly:
              temps_select = 30000; 
              tempo = millis() - temps_ancien;
              if (temps_select == 30000) //temps ne depasse pas 1 minute alors on lance le moteur sinon on l'arrete.
              {
                tempo = millis() - temps_ancien;
                digitalWrite(led,HIGH);
                while(tempo > 30000) // tant que la durée de cette boucle est inférieur à 1 minute : faire:
                {
                 Serial.println("***** je suis là pendant 30s*****");
                }
                digitalWrite(led,LOW);
              }
                
              };



        • Partager sur Facebook
        • Partager sur Twitter
          13 mai 2019 à 17:48:57

          Re,-

          Dans la boucle ligne 21, où modifies-tu tempo ?

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            13 mai 2019 à 18:07:51

            edgarjacobs a écrit:

            Re,-

            Dans la boucle ligne 21, où modifies-tu tempo ?

            Comment ça ? je ne Le modifie pas 

            • Partager sur Facebook
            • Partager sur Twitter
              13 mai 2019 à 18:34:39

              Kidorich a écrit:

              edgarjacobs a écrit:

              Re,-

              Dans la boucle ligne 21, où modifies-tu tempo ?

              Comment ça ? je ne Le modifie pas 

              C'est bien ça le problème. Si tu entres dans le while(), tu n'en sors plus. Exemple

              int a=10;
              
              while(a>5) {
                  puts("je suis dans le while");
              }
              puts("j'ai quitté le while");

              tu n'atteindras jamais la ligne 6

              Par contre, ici

              int a=10;
              
              while(a>5) {
                  puts("je suis dans le while");
                  a--;
              }
              puts("j'ai quitté le while");


              tu sortiras de la boucle

              -
              Edité par edgarjacobs 13 mai 2019 à 19:06:50

              • Partager sur Facebook
              • Partager sur Twitter

              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                13 mai 2019 à 19:25:52

                edgarjacobs a écrit:

                Kidorich a écrit:

                edgarjacobs a écrit:

                Re,-

                Dans la boucle ligne 21, où modifies-tu tempo ?

                Comment ça ? je ne Le modifie pas 

                C'est bien ça le problème. Si tu entres dans le while(), tu n'en sors plus. Exemple

                int a=10;
                
                while(a>5) {
                    puts("je suis dans le while");
                }
                puts("j'ai quitté le while");

                tu n'atteindras jamais la ligne 6

                Par contre, ici

                int a=10;
                
                while(a>5) {
                    puts("je suis dans le while");
                    a--;
                }
                puts("j'ai quitté le while");


                tu sortiras de la boucle

                -
                Edité par edgarjacobs il y a 11 minutes

                   temps_select = 30000; 
                      tempo = millis() - temps_ancien;
                      if (temps_select == 30000) //temps ne depasse pas 1 minute alors on lance le moteur sinon on l'arrete.
                      {
                        tempo = millis() - temps_ancien;
                        digitalWrite(led,HIGH);
                        while(tempo < 30000) // tant que la durée de cette boucle est inférieur à 1 minute : faire:
                        {
                         Serial.println("***** je suis là pendant 30s*****");
                         tempo--;
                        }
                        digitalWrite(led,LOW);
                      }
                        
                Ca ne fonctionne toujours pas je suis tjrs bloqué dans la boucle


                • Partager sur Facebook
                • Partager sur Twitter
                  13 mai 2019 à 19:31:08

                  Ligne 10: tempo++ !

                  Tu entres dans le while si tempo est inférieur à 30000, retirer 1 à tempo à chaque tour de boucle ne fera pas que tempo devienne supérieur à 30000. C'est vraiment de la logique de base.

                  -
                  Edité par edgarjacobs 13 mai 2019 à 19:34:40

                  • Partager sur Facebook
                  • Partager sur Twitter

                  On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                    13 mai 2019 à 19:54:32

                    edgarjacobs a écrit:

                    Ligne 10: tempo++ !

                    Tu entres dans le while si tempo est inférieur à 30000, retirer 1 à tempo à chaque tour de boucle ne fera pas que tempo devienne supérieur à 30000. C'est vraiment de la logique de base.

                    -
                    Edité par edgarjacobs il y a 17 minutes

                    Mais alors pourquoi "tempo++ " ?  En quoi ça nous fait sortir de la boucle while ? 

                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 mai 2019 à 22:31:49

                      Kidorich a écrit:

                      edgarjacobs a écrit:

                      Ligne 10: tempo++ !

                      Tu entres dans le while si tempo est inférieur à 30000, retirer 1 à tempo à chaque tour de boucle ne fera pas que tempo devienne supérieur à 30000. C'est vraiment de la logique de base.

                      -
                      Edité par edgarjacobs il y a 17 minutes

                      Mais alors pourquoi "tempo++ " ?  En quoi ça nous fait sortir de la boucle while ? 

                      Le tempo++ n'est là que pour corriger ton code, car tu t'es contenté de reprendre mon exemple. Ce n'est pas la solution à ton problème, que je t'ai donné dans mon 1er post.

                      Où en sont tes connaissances en programmation ?  As-tu seulement déjà écrit un programme, autre chose que "Hello world" ?

                      -
                      Edité par edgarjacobs 13 mai 2019 à 22:37:11

                      • Partager sur Facebook
                      • Partager sur Twitter

                      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                        15 mai 2019 à 19:17:15

                        edgarjacobs a écrit:

                        Kidorich a écrit:

                        edgarjacobs a écrit:

                        Ligne 10: tempo++ !

                        Tu entres dans le while si tempo est inférieur à 30000, retirer 1 à tempo à chaque tour de boucle ne fera pas que tempo devienne supérieur à 30000. C'est vraiment de la logique de base.

                        -
                        Edité par edgarjacobs il y a 17 minutes

                        Mais alors pourquoi "tempo++ " ?  En quoi ça nous fait sortir de la boucle while ? 

                        Le tempo++ n'est là que pour corriger ton code, car tu t'es contenté de reprendre mon exemple. Ce n'est pas la solution à ton problème, que je t'ai donné dans mon 1er post.

                        Où en sont tes connaissances en programmation ?  As-tu seulement déjà écrit un programme, autre chose que "Hello world" ?

                        -
                        Edité par edgarjacobs 13 mai 2019 à 22:37:11

                        Yep ahah , j'ai vu ça. j'ai essayé en efffet "tempo ++;": inutile lol 

                        Bon du coup j'ai essayé de mettre un else mais le problème persiste.

                        Je ne sais pa comment sortir de la boucle 

                         if (temps_select == 10000) //temps ne depasse pas 1 minute alors on lance le moteur sinon on l'arrete.
                              {
                                tempo = millis() - temps_ancien;
                                digitalWrite(led,HIGH);
                                while(tempo <= 10000) // tant que la durée de cette boucle est inférieur à 1 minute : faire:
                                {
                                 Serial.println("***** je suis là pendant 10s");
                                }
                              }
                              
                               else {
                                digitalWrite(led,LOW);
                                Serial.println("C'est terminé");
                                delay(1000);
                              }
                                


                        • Partager sur Facebook
                        • Partager sur Twitter

                        Probleme tempo arduino

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown