Contrôler deux moteurs indépendamment et possiblement simultanément

Bonjour,

Je fais un code qui pourrait faire avancer ou reculer un système sur un câble à l’aide d’un moteur DC, et sous le système se situerait un moteur pas à pas, qui permettrait de faire tourner une caméra pour modifier l’angle de vue.

Pour cela, j’ai créé deux programmes différents : un pour le DC et l’autre pour le stepper. Tout marche parfaitement pou chaque code, mais ça se complique lorsque je les combine. En effet, une fois que j’ai mis en route le moteur DC ou le stepper, l’autre ne réagit à aucune de mes commandes.

Est-ce qu’il existe un moyen de combiner ces deux codes et de pouvoir par exemple, alors que le système se déplace sur le câble, de faire tourner la caméra ?

Merci pour l’aide que vous pourriez m’apporter.

Code moteur DC :

const int button_droite = 12 ;
const int button_gauche = 13 ;
const int button_off = 8 ;
const int sens_moteur_droite_dc = 2 ;
const int sens_moteur_gauche_dc = 3 ;
const int vitesse_moteur_dc = 9 ;
int etatbutton_droite = 0 ;
int etatbutton_gauche = 0 ;
int etatbutton_off = 0 ;
int c = 50 ;

void setup() {
 
 Serial.begin(115200);

 pinMode(button_droite,INPUT_PULLUP);
 pinMode(button_gauche,INPUT_PULLUP);
 pinMode(button_off,INPUT_PULLUP);
 pinMode(sens_moteur_droite_dc,OUTPUT);
 pinMode(sens_moteur_gauche_dc,OUTPUT);
 pinMode(vitesse_moteur_dc,OUTPUT);

 digitalWrite(vitesse_moteur_dc,LOW);
 digitalWrite(sens_moteur_droite_dc,LOW);
 digitalWrite(sens_moteur_gauche_dc,LOW);

}

void loop() {

 etatbutton_droite = digitalRead(button_droite);

 if (etatbutton_droite == LOW){

   etatbutton_off = digitalRead(button_off);

   while (etatbutton_off == HIGH){

     while (c<255){

       etatbutton_off = digitalRead(button_off);

       for (c; c<255; c++){

         c = c+5;
         digitalWrite(sens_moteur_droite_dc,HIGH);
         digitalWrite(sens_moteur_gauche_dc,LOW);
         analogWrite(vitesse_moteur_dc,c);
         delay(50);
         etatbutton_off = digitalRead(button_off);
           if (etatbutton_off == LOW){

             c = 255;
         
           }
       
       }  

     }

    digitalWrite(sens_moteur_droite_dc,HIGH);
    digitalWrite(sens_moteur_gauche_dc,LOW);
    digitalWrite(vitesse_moteur_dc,HIGH);
    etatbutton_off = digitalRead(button_off);
     if (etatbutton_off == LOW){

         c = 50;
         
     }
   }
   
 }

 etatbutton_gauche = digitalRead(button_gauche);

 if (etatbutton_gauche == LOW){

   etatbutton_off = digitalRead(button_off);

   while (etatbutton_off == HIGH){

     while (c<255){

       etatbutton_off = digitalRead(button_off);

       for (c; c<255; c++){

         c = c+5;
         digitalWrite(sens_moteur_droite_dc,LOW);
         digitalWrite(sens_moteur_gauche_dc,HIGH);
         analogWrite(vitesse_moteur_dc,c);
         delay(50);
         etatbutton_off = digitalRead(button_off);
           if (etatbutton_off == LOW){

             c = 255;
         
           }
       
       }  

     }

    digitalWrite(sens_moteur_droite_dc,LOW);
    digitalWrite(sens_moteur_gauche_dc,HIGH);
    digitalWrite(vitesse_moteur_dc,HIGH);
    etatbutton_off = digitalRead(button_off);
     if (etatbutton_off == LOW){

         c = 50;
         
     }
   }
   
 }
 
 else
 {
   digitalWrite(sens_moteur_droite_dc,LOW);
   digitalWrite(sens_moteur_gauche_dc,LOW);
   digitalWrite(vitesse_moteur_dc, LOW);
 }
   
}

Code moteur pas à pas :

#include <Stepper.h>

#define STEPS 400

Stepper stepper(STEPS, 4, 5, 6, 7);

const int bouton_sens_horaire = 13 ;
const int bouton_sens_anti_horaire = 12 ;
const int bouton_arret = 8 ;

int etatbouton_sens_horaire = 0;
int etatbouton_sens_anti_horaire = 0;
int etatbouton_arret = 0;
int i=1;
int n=1;


void setup()
{
 Serial.begin(9600);

 pinMode(bouton_sens_horaire,INPUT_PULLUP);
 pinMode(bouton_sens_anti_horaire,INPUT_PULLUP);
 pinMode(bouton_arret,INPUT_PULLUP);
 
 stepper.setSpeed(15);
}

void loop()
{

 etatbouton_sens_horaire = digitalRead(bouton_sens_horaire);

 etatbouton_sens_anti_horaire = digitalRead(bouton_sens_anti_horaire);   

   if (etatbouton_sens_horaire == LOW){

     etatbouton_arret = digitalRead(bouton_arret);

     while (etatbouton_arret == HIGH){
       
       for (i; i++;)
         {
           while (etatbouton_arret == HIGH)
           {
             etatbouton_arret = digitalRead(bouton_arret);
             stepper.step(-1);
           }
         }
     }
     i=1;
   }

 etatbouton_sens_horaire = digitalRead(bouton_sens_horaire);

 etatbouton_sens_anti_horaire = digitalRead(bouton_sens_anti_horaire);

   if (etatbouton_sens_anti_horaire == LOW){

     etatbouton_arret = digitalRead(bouton_arret);

     while (etatbouton_arret == HIGH){
       
       for (n; n++;)
         {
           while (etatbouton_arret == HIGH)
           {
             etatbouton_arret = digitalRead(bouton_arret);
             stepper.step(1);
           }
         }
     }
     n=1;
   }

}

Du coup j'ai réussi à régler mon problème en reconstruisant totalement le code. Merci quand même d'avoir pris le temps de me lire.