Contrôler un moteur à courant continu avec bluetooth

Bonjour,

Je souhaiterais mettre en route un moteur piloté par un driver Adafruit TB6612, mon module bluetooth est un HC-06. Je travaille avec une Arduino Uno. Si j’envoie au module le caractère “1”, alors le moteur DC doit tourner, et si, alors qu’il tourne, je lui envoie le caractère “3”, le moteur sors de la boucle while().

Mon problème, c’est que je voudrais que même si je suis sorti de cette boucle une fois, si je renvoie de nouveau le caractère “1”, le moteur se remette à tourner et s’arrête de nouveau quand j’envoie le “3”, et ce à “l’infini”.

Voici mon code :

#include <Stepper.h>
#include <SoftwareSerial.h>

#define STEPS 400
#define RX 11
#define TX 10

Stepper stepper(STEPS, 4, 5, 6, 7);
SoftwareSerial bluetooth(RX, TX);

String Message_Recu_1;
String Message_Recu_2;

const int bouton_sens_horaire = 13 ;
const int bouton_sens_anti_horaire = 50 ;
const int button_droite = 8 ;
const int button_gauche = 12 ;
const int sens_moteur_droite_dc = 2 ;
const int sens_moteur_gauche_dc = 3 ;
const int vitesse_moteur_dc = 9 ;

int etatbouton_sens_horaire = 0;
int etatbouton_sens_anti_horaire = 0;
int etatbutton_droite = 0 ;
int etatbutton_gauche = 0 ;

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

  bluetooth.begin(9600);

  pinMode(button_droite,INPUT_PULLUP);
  pinMode(button_gauche,INPUT_PULLUP);
  pinMode(bouton_sens_horaire,INPUT_PULLUP);
  pinMode(bouton_sens_anti_horaire,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);

  stepper.setSpeed(15);

}

void loop() {

if (bluetooth.available())
   {
    Message_Recu_1 = String("");
    if (bluetooth.available())
        {
          Message_Recu_1 = Message_Recu_1 + char(bluetooth.read());
          delay(100);
        }
  if (Message_Recu_1.length() > 0){

  while (Message_Recu_1 == "1" and Message_Recu_2 != "3"){

    digitalWrite(sens_moteur_droite_dc,HIGH);
    digitalWrite(sens_moteur_gauche_dc,LOW);
    digitalWrite(vitesse_moteur_dc,HIGH);
    Serial.write("Marche vers la droite");
    Message_Recu_2 = String("");
    if (bluetooth.available()){
      Message_Recu_2 = Message_Recu_2 + char (bluetooth.read());
    }
  }
  
  digitalWrite(sens_moteur_droite_dc,LOW);
  digitalWrite(sens_moteur_gauche_dc,LOW);
  digitalWrite(vitesse_moteur_dc,LOW);
  }
}
}

Pour les constantes et variables, certaines ne sont pas utilisées, car ce n’est là qu’un fragment de mon code entier, le reste n’était pas en rapport avec mon problème.

Merci pour toute aide que vous pourriez m’apporter.

Pas besoin du while, tu fais un simple if pour comparer ton message_recu_1 avec "1" puis avec "3" et tu donnes les ordres au moteur en conséquence. Pas besoin d'autre chose, ni d'autre message.

Merci du coup j’ai réussi à régler mon problème après de multiplies tentatives : il fallait réinitialiser les variables Message_Recu_1 et Message_Recu_2.

J’ai terminé mon code, je le donne à ceux qui rencontrent comme moi des problèmes pour contrôler des moteurs avec un bluetooth.

Mon code permet de contrôler un DC motor et un stepper motor, indépendamment l’un de l’autre :

#include <Stepper.h>
#include <SoftwareSerial.h>

#define STEPS 400
#define RX 11
#define TX 10

Stepper stepper(STEPS, 4, 5, 6, 7);
SoftwareSerial bluetooth(RX, TX);

String Message_Recu_1;
String Message_Recu_2;
String Message_Recu_3;

const int bouton_sens_horaire = 13 ;
const int bouton_sens_anti_horaire = 50 ;
const int button_droite = 8 ;
const int button_gauche = 12 ;
const int sens_moteur_droite_dc = 2 ;
const int sens_moteur_gauche_dc = 3 ;
const int vitesse_moteur_dc = 9 ;

int etatbouton_sens_horaire = 0;
int etatbouton_sens_anti_horaire = 0;
int etatbutton_droite = 0 ;
int etatbutton_gauche = 0 ;

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

  bluetooth.begin(9600);

  pinMode(button_droite,INPUT_PULLUP);
  pinMode(button_gauche,INPUT_PULLUP);
  pinMode(bouton_sens_horaire,INPUT_PULLUP);
  pinMode(bouton_sens_anti_horaire,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);

  stepper.setSpeed(15);

}

void loop() {

if (bluetooth.available())
   {
    Message_Recu_1 = String("");
    if (bluetooth.available())
        {
          Message_Recu_1 = Message_Recu_1 + char(bluetooth.read());
          delay(100);
        }

  while (Message_Recu_1 == "1" and Message_Recu_2 != "5" and Message_Recu_3 != "5"){

    digitalWrite(sens_moteur_droite_dc,HIGH);
    digitalWrite(sens_moteur_gauche_dc,LOW);
    digitalWrite(vitesse_moteur_dc,HIGH);
    Message_Recu_2 = String("");
    if (bluetooth.available()){
      Message_Recu_2 = Message_Recu_2 + char (bluetooth.read());
    }
    while (Message_Recu_2 == "3" and Message_Recu_3 != "6"){

      digitalWrite(sens_moteur_droite_dc,HIGH);
      digitalWrite(sens_moteur_gauche_dc,LOW);
      digitalWrite(vitesse_moteur_dc,HIGH);
      stepper.step(1); 
      Message_Recu_3 = String("");
      if (bluetooth.available()){
        Message_Recu_3 = Message_Recu_3 + char (bluetooth.read());
      } 

    }
    while (Message_Recu_2 == "4" and Message_Recu_3 != "7"){

      digitalWrite(sens_moteur_droite_dc,HIGH);
      digitalWrite(sens_moteur_gauche_dc,LOW);
      digitalWrite(vitesse_moteur_dc,HIGH);
      stepper.step(-1);
      Message_Recu_3 = String("");  
      if (bluetooth.available()){
        Message_Recu_3 = Message_Recu_3 + char (bluetooth.read());
      }
    }
  }

  while (Message_Recu_1 == "2" and Message_Recu_2 != "5" and Message_Recu_3 != "5"){

    digitalWrite(sens_moteur_droite_dc,HIGH);
    digitalWrite(sens_moteur_gauche_dc,LOW);
    digitalWrite(vitesse_moteur_dc,HIGH);
    Message_Recu_2 = String("");
    if (bluetooth.available()){
      Message_Recu_2 = Message_Recu_2 + char (bluetooth.read());
    }
    while (Message_Recu_2 == "3" and Message_Recu_3 != "6"){

      digitalWrite(sens_moteur_droite_dc,HIGH);
      digitalWrite(sens_moteur_gauche_dc,LOW);
      digitalWrite(vitesse_moteur_dc,HIGH);
      stepper.step(1); 
      Message_Recu_3 = String("");
      if (bluetooth.available()){
        Message_Recu_3 = Message_Recu_3 + char (bluetooth.read());
      } 

    }
    while (Message_Recu_2 == "4" and Message_Recu_3 != "7"){

      digitalWrite(sens_moteur_droite_dc,HIGH);
      digitalWrite(sens_moteur_gauche_dc,LOW);
      digitalWrite(vitesse_moteur_dc,HIGH);
      stepper.step(-1);  
      Message_Recu_3 = String("");
      if (bluetooth.available()){
        Message_Recu_3 = Message_Recu_3 + char (bluetooth.read());
      }
    }
  }

  while (Message_Recu_1 == "3" and Message_Recu_2 != "6"){

    digitalWrite(sens_moteur_droite_dc,LOW);
    digitalWrite(sens_moteur_gauche_dc,LOW);
    digitalWrite(vitesse_moteur_dc,LOW);
    stepper.step(1);
    Message_Recu_2 = String("");
    if (bluetooth.available()){
      Message_Recu_2 = Message_Recu_2 + char (bluetooth.read());
    } 
  }

  while (Message_Recu_1 == "4" and Message_Recu_2 != "7"){

    digitalWrite(sens_moteur_droite_dc,LOW);
    digitalWrite(sens_moteur_gauche_dc,LOW);
    digitalWrite(vitesse_moteur_dc,LOW);
    stepper.step(-1);
    Message_Recu_2 = String("");
    if (bluetooth.available()){
      Message_Recu_2 = Message_Recu_2 + char (bluetooth.read());
    } 
  }

  Message_Recu_1 = String ("");
  if (bluetooth.available())
  {
    Message_Recu_1 = Message_Recu_1 + char (bluetooth.read());
    delay(100);
  }
  Message_Recu_2 = String ("");
  if (bluetooth.available())
  {
    Message_Recu_2 = Message_Recu_2 + char (bluetooth.read());
    delay(100);
  }
  Message_Recu_3 = String ("");
  if (bluetooth.available())
  {
    Message_Recu_3 = Message_Recu_3 + char (bluetooth.read());
    delay(100);
  }
  
  digitalWrite(sens_moteur_droite_dc,LOW);
  digitalWrite(sens_moteur_gauche_dc,LOW);
  digitalWrite(vitesse_moteur_dc,LOW);
  }

}

Bonne chance à tous ! :wink: