Partage
  • Partager sur Facebook
  • Partager sur Twitter

variation de la puissance du moteur

    17 juillet 2019 à 7:58:01

    bonjour a tous

    dans le dernier chapitre, on nous a donner un code qui permet de faire tourner un moteur dans un sens comme dans l autre  sens .

    actionMoteur(1,1,100); //moteur 1 100% puissance sens 1
      actionMoteur(1,-1,100); //moteur 1 100% puissance sens 2

    mon problème c'est que je voudrais varier la puissance en fonction du temps d'appuis dans les 2 sens

    etatbp1=digitalRead(bp1);
     
      if(etatbp1==1){
        cumul=cumul+10;
        if(cumul>100)
          cumul=100;
      actionMoteur(1,1,cumul);  //moteur 1 100% puissance sens 1
       
      }
        else{
          cumul=cumul-10; //on fait diminuer la valeur de la variable
          if (cumul<0) //test si limite de diminution
            cumul=0;//mise à la limite si dépassement
          actionMoteur(1,1,cumul);
         
        
        }

       etatbp2=digitalRead(bp2);
     
      if(etatbp2==1){
        cumul=cumul+10;
        if(cumul>100)
          cumul=100;
      actionMoteur(1,-1,cumul);  //moteur 1 100% puissance sens 1
       
      }
        else{
          cumul=cumul-10; //on fait diminuer la valeur de la variable
          if (cumul<0) //test si limite de diminution
            cumul=0;//mise à la limite si dépassement
          actionMoteur(1,-1,cumul);
         
     
        }
      }

    merci

    -
    Edité par JiresseNakeu 17 juillet 2019 à 8:09:00

    • Partager sur Facebook
    • Partager sur Twitter
      17 juillet 2019 à 8:49:18

      Quel est t'on problème ?

      Après je ne sais pas ou est positionner se code dans la programme ? Dans le loop ?

      Si c'est le cas alors ton moteur freine quand un des deux bouton n'est pas pressé. Donc ta variable cumul = 0 tout le temps

      • Partager sur Facebook
      • Partager sur Twitter
      Il existe 10 type de personne dans le monde. Ceux qui on comprit et les autres.
        17 juillet 2019 à 9:20:27

        exactement cumul=0 tout le temps sauf si le bp est actionner

        je vous livre le code

        int pin1Moteur1=12; //pin de commande moteur 1

        int pin2Moteur1=8; // pin de commande moteur 1

        int pinPMoteur1=11;// pin PWM moteur 1

        int pin1Moteur2=2; // pin de commande moteur 2

        int pin2Moteur2=4; // pin de commande moteur 2

        int pinPMoteur2=5; // pin PWM moteur 2

        int bp1=3;

        int bp2=6;

        int bp3=7;

        boolean etatbp1;

        boolean etatbp2;

        int cumul=0;

        void setup() {


        Serial.begin(9600); //initialise la communication série

        pinMode(pin1Moteur1,OUTPUT);

        pinMode(pin2Moteur1,OUTPUT);

        pinMode(pinPMoteur1,OUTPUT);

        pinMode(pin1Moteur2,OUTPUT);

        pinMode(pin2Moteur2,OUTPUT);

        pinMode(pinPMoteur2,OUTPUT);

        pinMode(3,INPUT);

        pinMode(6,INPUT);

        pinMode(7,INPUT);

        }

        void loop() {

        etatbp1=digitalRead(bp1);

        if(etatbp1==1){        // le moteur tourne dans un sens

        cumul=cumul+10;

        if(cumul>100)

        cumul=100;

        actionMoteur(1,1,cumul);//moteur 1 100% puissance sens 1

        actionMoteur(2,1,cumul);

        }

        else{

        cumul=cumul-10; //on fait diminuer la valeur de la variable

        if (cumul<0) //test si limite de diminution

        cumul=0;//mise à la limite si dépassement

        actionMoteur(1,1,cumul);

         actionMoteur(2,1,cumul);

        }

         // ici le moteur tourne dans l'autre sens

        etatbp2=digitalRead(bp2);

        if(etatbp2==1){

        cumul=cumul+10;

        if(cumul>100)

        cumul=100;

         actionMoteur(1,-1,cumul);//moteur 1 100% puissance sens 1

        actionMoteur(2,-1,cumul);

        }

        else{

        cumul=cumul-10; //on fait diminuer la valeur de la variable

        if (cumul<0) //test si limite de diminution

        cumul=0;//mise à la limite si dépassement

        //actionMoteur(1,-1,cumul);

        actionMoteur(2,-1,cumul);

        }

        }

        void actionMoteur(int moteur,int sens,int pourcentage){

        int pin1,etat1,pin2,etat2,pinP,puissance; //variable de la fonction

        //test numéro du moteur

        if (moteur==1){

        pin1=pin1Moteur1;

        pin2=pin2Moteur1;

        pinP=pinPMoteur1;

        }

        else {

        pin1=pin1Moteur2;

        pin2=pin2Moteur2;

        pinP=pinPMoteur2;

        }

        //test sens du moteur 1,-1 (sens contrainre)

        if (sens==1){

        etat1=1;

        etat2=0;

        }

        else if (sens==-1){

        etat1=0;

        etat2=1;

        }

        else {

        etat1=0;

        etat2=0;

        }

        puissance=map(pourcentage,0,100,0,255);

        analogWrite(pinP,puissance);

        digitalWrite(pin1,etat1);

        digitalWrite(pin2,etat2);

        //affichage sur le moniteur série

        Serial.print("Moteur : ");

        Serial.print(moteur);

        if (sens==-1 || sens==1){

        Serial.print(" sens : ");

        Serial.print(sens);

        }

        else {

        Serial.print(" ! stop ! ");

        }

        Serial.print(" puissance : ");

        Serial.println(pourcentage);

        }

         

        -
        Edité par JiresseNakeu 17 juillet 2019 à 9:26:02

        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2019 à 9:48:11

          JiresseNakeu a écrit:

          exactement cumul=0 tout le temps sauf si le bp est actionner

          Non justement tu appuie que sur un bouton à la fois. 

          Exemple :

          bp1 est pressé, donc etatbp1 = 1

          bp2 est au repos, donc etatbp2 = 0

          etatbp1 = digitalRead(bp1);
          //
          //
          // On faire bien tourné le moteur dans se sens puisque etatbp1 = 1
          //
          //
          
          if(etatbp1==1){        // le moteur tourne dans un sens 
          cumul=cumul+10;
          
          if(cumul>100)
          
          cumul=100;
          
          actionMoteur(1,1,cumul);//moteur 1 100% puissance sens 1
          
          actionMoteur(2,1,cumul);
          
          }
          
          else{
          
          cumul=cumul-10; //on fait diminuer la valeur de la variable
          
          if (cumul<0) //test si limite de diminution
          
          cumul=0;//mise à la limite si dépassement
          
          actionMoteur(1,1,cumul);
          
           actionMoteur(2,1,cumul);
          
          }
          
           // ici le moteur tourne dans l'autre sens
          
          etatbp2 = digitalRead(bp2);
          
          if(etatbp2 == 1){
          
          cumul=cumul+10;
          
          if(cumul>100)
          
          cumul=100;
          
           actionMoteur(1,-1,cumul);//moteur 1 100% puissance sens 1
          
          actionMoteur(2,-1,cumul);
          
          }
          else{
          //
          //
          // Mais on le ralentit car etatbp2 = 0
          //
          //
          cumul=cumul-10; //on fait diminuer la valeur de la variable
          
          if (cumul<0) //test si limite de diminution
          
          cumul=0;//mise à la limite si dépassement
          
          //actionMoteur(1,-1,cumul);
          
          actionMoteur(2,-1,cumul);
          
          }

          Donc ton moteur accélère car bp1 est pressé mais la seconde après tu lui dit de ralentir car le 2° bouton n'est pas pressé. Je sais pas si je suis claire:D

          J'aurai fait un truc comme sa.

          etatbp1 = digitalRead(bp1); // Sens horaire
          etatbp2 = digitalRead(bp2); // Sens anti-horaire
          	
          	if(etatbp1 == 1 && etatbp2 == 0 || etatbp1 == 0 && etatbp2 == 1){ // Pour vérifier qu'on appuie pas en meme temps sur les deux bouton
          	
          		// Test pour le bp1
          		if(etatbp1 == 1 && vitesseAH == 0){  // Si bp1 est pressé et que le moteur ne tourne pas dans l'autre sens
          			vitesseH = vitesseH + 10; // On accélère dans le sens horaire
          
          			if(vitesseH > 100)
          			vitesseH = 100;
          
          			actionMoteur(1,1,vitesseH); // moteur 1 "vitesseH" puissance sens horaire
          			actionMoteur(2,1,vitesseH);
          		}
          		else if(etatbp1 == 1 && vitesseAH > 0){  // Si bp1 est pressé et que le moteur tourne dans l'autre sens on le ralenti
          			vitesseAH = vitesseAH - 10; // On le ralenti dans le sens anti-horaire
          			
          			if(vitesseAH < 0)
          				vitesseAH = 0;
          			
          			actionMoteur(1,-1,vitesseAH); // moteur 1 "vitesseH" puissance sens anti-horaire
          			actionMoteur(2,-1,vitesseAH);
          		}
          		else if(etatbp1 == 0 && vitesseH > 0){  // Si bp1 n'est pas pressé et que le moteur tourne dans le sens horaire
          			vitesseH = vitesseH - 10; // On le ralenti dans le sens horaire
          			
          			if(vitesseH < 0)
          				vitesseH = 0;
          			
          			actionMoteur(1,1,vitesseH); // moteur 1 "vitesseH" puissance sens horaire
          			actionMoteur(2,1,vitesseH);
          		}
          		
          		// Test pour le bp2
          		if(etatbp2 == 1 && vitesseH == 0){  // Si bp2 est pressé et que le moteur ne tourne pas dans l'autre sens
          			vitesseAH = vitesseAH + 10; // On accélère dans le sens anti-horaire
          
          			if(vitesseAH > 100)
          			vitesseAH = 100;
          
          			actionMoteur(1,-1,vitesseAH); // moteur 1 "vitesseAH" puissance sens anti-horaire
          			actionMoteur(2,-1,vitesseAH);
          		}
          		else if(etatbp2 == 1 && vitesseH > 0){  // Si bp2 est pressé et que le moteur tourne dans l'autre sens on le ralenti
          			vitesseH = vitesseH - 10; // On le ralenti dans le sens horaire
          			
          			if(vitesseH < 0)
          				vitesseH = 0;
          			
          			actionMoteur(1,1,vitesseH); // moteur 1 "vitesseH" puissance sens horaire
          			actionMoteur(2,1,vitesseH);
          		}
          		else if(etatbp2 == 0 && vitesseAH > 0){  // Si bp2 n'est pas pressé et que le moteur tourne dans le sens anti-horaire
          			vitesseAH = vitesseAH - 10; // On le ralenti dans le sens anti-horaire
          			
          			if(vitesseAH < 0)
          				vitesseAH = 0;
          			
          			actionMoteur(1,-1,vitesseAH); // moteur 1 "vitesseH" puissance sens anti-horaire
          			actionMoteur(2,-1,vitesseAH);
          		}
          	}

          Vérifiez bien que j'ai rien oublier :lol:

          -
          Edité par Flamby66 17 juillet 2019 à 10:19:01

          • Partager sur Facebook
          • Partager sur Twitter
          Il existe 10 type de personne dans le monde. Ceux qui on comprit et les autres.

          variation de la puissance du moteur

          × 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