Recevoir sens de marche

Bonsoir à tous,

J'ai pour projet de commander un moteur dans les deux sens de marche a l'aide d'un module L298n en bluetooth, la partie commande en pwm du moteur fonctionne mais le problème c'est que je ne sais pas envoyer l'information du sens de marche. je voulais mettre une condition du genre "if((consigne.length()>0)&&(retour=="droite"))" mais cela ne fonctionne pas.
Voici mon programme (j'ai mis un double slash pour enlever mes dernier essai)

void loop()

{
digitalWrite(led, LOW);
while(HC06.available())
{
delay(3);
char car = HC06.read();
consigne += car;
}
if(consigne.length()>0)
{
//char info=HC06.read();
//retour += info;
//if(retour=="droite"){
Serial.println(consigne);
// Serial.println(infoo);
val=(consigne.toInt());//val égale consigne en nombre réel
digitalWrite(sensD, LOW);
digitalWrite(sensG, HIGH);
analogWrite(moteurenable, val);}
consigne="";
}

Merci d'avance

Bonjour,
as-tu essayé de débugger en utilisant Serial.println() pour voir les variables du début jusqu'à la fin du programme ?
Quelles sont leurs valeurs ?

Bonjour,
Mon programme tell présenté (sans les anti //) ,lorsque j'envoie le signal "droite" l'affiche sur le moniteur série mais mon signal pwm ne s'affiche pas. Lorsque j'avais mis "if ((consigne.lenght ())&&(infoo=="droite")) il ne m'afficher rien. Il me semble que c'est dans cette ordre la, sinon c'est l'inverse.

bonjour,
merci de mettre le code entre balise

Bonsoir, pour résumer, je voudrais pour commander avec mon module Bluetooth le sens du moteur ainsi que sa tension. J'ai réussi a faire varier la tension grace au PWM mais pour le sens de variation je n'y arrive pas. Quelqu'un aurrait il une solution

#include <SoftwareSerial.h>

SoftwareSerial HC06(11,10);//Tx11,Rx10
int moteurenable = 3;//enable sortie PWM
 int sensD=9;//in1
 int sensG=8;//in2
 int fdc1=7;
 int fdc2=6;
 int ledfdcG=5;
 String consigne="";
 String droite;
 byte val;

//-------------------------------------------------------

void setup() {
   Serial.begin(9600);
   HC06.begin(9600);  
   pinMode(moteurenable, OUTPUT);
   analogWrite(moteurenable, LOW);
   pinMode(sensD,OUTPUT);
   pinMode(sensG, OUTPUT);
   pinMode(fdc1, INPUT);
   pinMode(fdc2, INPUT);   
  attachInterrupt(0, fdcG, LOW);
   //attachInterrupt(1, fdcD, LOW);
   pinMode(ledfdcG, OUTPUT);
   //rajouter 3 leds pour allumage,fdcd et fdcg
 }
 
 void loop()   {
while(HC06.available())
{
delay(3);
char car = HC06.read();
consigne += car;
if(consigne.length())
 {
 Serial.println(consigne);
 val=(consigne.toInt());  
digitalWrite(sensD, LOW);
digitalWrite(sensG, HIGH);
analogWrite(moteurenable, val);
digitalWrite(ledfdcG, HIGH);}}
consigne="";   
 }

Bonsoir,
il faut que tu réceptionne proprement le sens de rotation :

while(HC06.available())
{
delay(3);
char info=HC06.read();
retour += info;
if(retour.length())
{
etc

Désolé trimarco mais je suis débutant je ne vois pas vraiment comment tu veux procéder .

Bonsoir
Je relance car je n'ai toujours pas résolu ce problème. Commander en bluetooth un moteur dans les 2 sens de marches en pwm.
:confused:

Bonsoir,
peux-tu nous dire quelles sont les commandes que tu envoies ?
c'est important de savoir exactement ce qu'il y à décoder

J'envoie un signal PWM "byte" :val (0 à 255) avec un slider ( fonctionne parfaitement ) par contre je cherche à envoyer "droite" ou "gauche" pour commander le sens de marche toujours avec la fonction PWM .

Bonjour,

Il y a des tas de moyens de coder le sens.
Sans beaucoup changer ton code, il suffit d'envoyer un entier signé au lieu d'un byte: +123 -> G et -123 ->D
Pour décoder:

...
 int val=(consigne.toInt());
 if (val>=0)
{
   // sens G
   // faire le traitement sens G
 }
 else
 {
   // sens D
   // faire le traitement sens D
   val=-val;
 }
 analogWrite(moteurenable, val);

Bonjour, j'ai fait le programme avec un "char" de -126" à "126" et sa fonctionne mais le soucis c'est que du coup j'envoie une valeur entre 0 et 2,5 volts. Je commande un moteur qui tourne donc en 6 volts. Y aurait il une autre solution ?

Bonjour,

Oui, tu utilises un int.

Je me retrouve dans la même situation qu'avant , je ne peux pas commander mon sens de marche. Est il possible d'avoir cette variable byte et d'envoyer en plus ( par exemple envoyer le mot droite) commander mon sens de marche et ma vitesse?

Pourquoi tu ne peux pas envoyer un int?

Je reposte mon programme au cas ou quelque chose m'aurais échappé. J'envoie un byte pour la variation et un mot pour commander le sens ( le programme ne fonctionne pas :ISO C++ forbids comparison between pointer and integer [-fpermissive])

#include <SoftwareSerial.h>

SoftwareSerial HC06(11,10);//Tx11,Rx10
int moteurenable = 3;//enable sortie PWM
 int sensG=9;//in1
 int sensD=8;//in2
 int fdc1=7;
 int fdc2=6;
 int ledfdcG=5;
 // int ledfdcD=...;
 String consigne="",gauche,droite;
int val;

//-------------------------------------------------------

void setup() {
   Serial.begin(9600);
   HC06.begin(9600);  
   pinMode(moteurenable, OUTPUT);
   analogWrite(moteurenable, LOW);
   pinMode(sensG,OUTPUT);
   pinMode(sensD, OUTPUT);
   pinMode(fdc1, INPUT);
   pinMode(fdc2, INPUT);   
  attachInterrupt(0, fdcG, LOW);
   //attachInterrupt(1, fdcD, LOW);
   pinMode(ledfdcG, OUTPUT);
   //rajouter 3 leds pour allumage,fdcd et fdcg
 }
 
 void loop() 
 
  {
while(HC06.available())
{
delay(3);
char car = HC06.read();
consigne += car;
}
if(consigne.length())
 {
  Serial.println(consigne);
 val=(consigne.toInt());
if (val=="droite"){
digitalWrite(sensG, LOW);
digitalWrite(sensD, HIGH);
digitalWrite(ledfdcG, LOW);
}
if(val=="gauche") {
digitalWrite(sensG, HIGH);
digitalWrite(sensD, LOW);
digitalWrite(ledfdcG, HIGH);
 }
 analogWrite(moteurenable, val);}   
consigne="";   
 }

Voila