Problème Programmation

Yo les gens !,
Pour un projet, j’ai réalisé un programme permettant de commander par bluetooth deux moteurs à l’aide du L293D et du HC-05.

Voici le programme:

#include <SoftwareSerial.h>

// définition des broches utilisées pour le programme des moteurs 
 
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 input = 0;
int Rx = 0;
int Tx = 1;

SoftwareSerial BT(Rx, Tx);

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

  pinMode(Rx, INPUT);
  pinMode(Tx, OUTPUT);
}

void loop(){
  if(BT.available()){
    
   input = BT.read();
   
   }
    if(input!=9){
    if(input==2){
     actionMoteur(1,-1,100); //moteur 1 100% puissance sens -1
     actionMoteur(2,-1,100); //moteur 2 100% puissance sens -1
     
    }
    
    
    if(input==1){
      actionMoteur(1,1,100); //moteur 1 100% puissance sens 1
      actionMoteur(2,1,100); //moteur 2 100% puissance sens 1
      
    }
    

    if(input==3){
      actionMoteur(1,1,100); //moteur 1 100% puissance sens 1
      actionMoteur(2,1,0); //moteur 2 100% puissance sens 1
      
    }
    

    if(input==4)
    {
      actionMoteur(1,1,0); //moteur 1 100% puissance sens 1
      actionMoteur(2,1,100); //moteur 2 100% puissance sens 1
    }
    
    }
    
  }


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) ou tout autre valeur (stoppe le moteur)
  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);
}

Donc la connexion bluetooth marche bien et la carte Arduino reçoit les données mais quand je tape sur “avancer”, le robot n’avance qu’une fois soit environ pendant 0.2s… :disappointed_relieved:
Depuis je n’arrive plus à corriger ce problème qui me ralentie sur ce projet.
En plus, je ne peux pas cliquer deux fois sur la même touche d’affiler ou même après 2,5,6h… je dois appuyer sur une autre touche :cold_sweat:
J’ai besoin de vous,
Aidez-moi pls

As-tu essayé en envoyant directement des commandes via un terminal série ? pour vérifier si le problème est dans ton programme ou dans ton "appli bluetooth"

J'ai testé, c'est mon programme arduino qui fonctionne mal

J'ai trouvé le problème, les moteurs nécessite une tension supérieur à 600mA or le l293D ne peut pas envoyer cette intensité. Je vais donc utiliser le L298

Pourquoi utilises-tu SoftwareSerial sur les pin 0 et 1 ? Tu peux utiliser directement la port série natif de l’arduino (Serial).

void setup {
    Serial.begin(9600);
}

Ensuite, il y a peut-être (je n’ai pas le moyen de tester) un problème de typage de tes variables.

int input => tu veux donc stocker un int pour la commande à traiter pour tes moteurs
Serial.read => retourne un char

Donc si tu envoies le caractère ASCII ‘9’ sur ta liaison série, cela va correspondre en décimal à la valeur 57. Sous réserve que la transformation de ton char en int se passe bien, lorsque tu envoies le caractère ‘9’, tu devrais avoir l’entier 57 dans ta variable input.

Il faut donc que tu fasses un if(input!=57) pour ton premier if (et ensuite que tu modifies les autres de la même façon pour tester la valeur entière qui représente le caractère que tu envoies)

Dylan28:
J'ai trouvé le problème, les moteurs nécessite une tension supérieur à 600mA or le l293D ne peut pas envoyer cette intensité. Je vais donc utiliser le L298

une intensité supérieure à 600mA, la tension se mesure en Volt (V)