BUG Virtualwire avec L293D

Bonjour,
je vous demande de l'aide car je suis bloqué depuis maintenant une semaine dans un projet de véhicule basique ( 2 roues motrices, 1 roue libre en rotule à doigt à l'arrière ) contrôlés avec un module RF 433MHz.

Voilà la situation:
J'utilise pour contrôler mes moteurs un L293D et un module RF 433MHz de base pour Arduino programmés grâce à la bibliothèque VirtualWire.

J'arrive à contrôler seulement un seul de mes moteurs à distance et l'autre ne tourne pas sauf quand le signal analogique envoyé à sa broche E du L293D est de 255 ( le maximum ) !! Ca fait réellement plus de 7 jours que je vais des tests (parfois jusqu'à 4h34 du matin avec cours le lendemain, oh tiens comme aujourd'hui…), j'ai testé les moteurs dans un programme "vide" (sans VirtualWire et ligne pour recevoir les données) et je contrôle les deux parfaitement ! J'ai vérifié tous les pins de mon programme 18000 fois et je me suis alors décidé d'enlever des petits bouts de code au fur et à mesure pour découvrir que c'est la ligne "vw_setup(nombre);" qui empêche UN seul de mes moteurs de fonctionner correctement… problème: j'ai absolument besoin de cette commande pour démarrer la réception des données !

Merci de votre aide,
Cordialement
un lycéen en galère

Comme tu te couches tard, tu dois avoir un peu la tête dans le c.l
Tu n'as pas mis ton code donc ça va pas être facile de t'aider.

Voici:
#include <VirtualWire.h>

int pinRecepteur = 13;

void setup(){
pinMode(9, OUTPUT);
vw_set_rx_pin(pinRecepteur);
Serial.begin(9600);
Serial.println("Go !");

}

void loop(){
byte taille_message = sizeof(double);
double NombreRecu;
delay(200);
vw_setup(500);
vw_rx_start();

if(vw_wait_rx_max(5000)){
if (vw_get_message((byte *) &NombreRecu, &taille_message)) {
int ValeurRecueX = fmod(NombreRecu, 1024);
int ValeurRecueY = (NombreRecu-ValeurRecueX)/1024;
int rotation = map(ValeurRecueX,0,1024,0,510)-255;
int vitesse = map(ValeurRecueY,0,1024,0,510)-255;
Serial.println(rotation);
Serial.println(vitesse);
int zonemorte = 60;
if (abs(vitesse)<=zonemorte){vitesse=0;}
if (abs(rotation)<=zonemorte){rotation=0;}
/if (abs(speedy-speedy_mem)<5 or abs(speedx-speedx_mem)<5){
return;
}
/
int vitesseGauche;
int vitesseDroite;
boolean sensAG;
boolean sensAD;
boolean sensRG;
boolean sensRD;
String sensD;
String sensG;

vitesseGauche = min(max(-255,(vitesse+rotation)),255);
vitesseDroite = min(max(-255,(vitesse-rotation)),255);

if (vitesseGauche >=0){sensAG=HIGH;sensRG=LOW;sensG="a";}
else {sensAG=LOW;sensRG=HIGH;sensG="r";}
if (vitesseDroite >=0){sensAD=HIGH;sensRD=LOW;sensD="a";}
else {sensAD=LOW;sensRD=HIGH;sensD="r";}

analogWrite(3, abs(vitesseGauche));
digitalWrite(2, sensAG);
digitalWrite(4, sensRG);

analogWrite(9, abs(vitesseDroite));
digitalWrite(8, sensAD);
digitalWrite(7, sensRD);

Serial.print("Sens gauche : ");
Serial.print(sensG);
Serial.print(" droit : ");
Serial.println(sensD);

}
}
else{

analogWrite(3,0);
digitalWrite(2, LOW);
digitalWrite(4, LOW);

analogWrite(9,0);
digitalWrite(7, LOW);
digitalWrite(8, LOW);

}
}

Avant ce code j'avais mis des PinMode pour tous les pins mais c'est totalement inutile...
Pour vous expliquer rapidement, on reçoit un nombre on le demultiplex puis on met une valeur dans vitesse l'autre dans rotation et ensuite s'en suit des légers calculs pour déterminer la vitesse et le sens de chaque moteur !

Merci de votre aide
ps: ce programme fonctionne pour les deux moteurs avec n'importe quels valeurs

void setup() {
// put your setup code here, to run once:

}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
analogWrite(9,155);
digitalWrite(2,HIGH);
digitalWrite(4,LOW);
analogWrite(3,173);
}

Bonjour,

Mets ton code entre balises de code.

Tu ne donnes pas le type de ta carte. Je vais supposer que tu as une UNO.
VirtualWire et le pwm sur la sortie 9 utilisent tout les deux le timer 1. Il y a conflit.
Utilises une autre sortie pwm qui n'utilise pas le timer 1. Voir ici l'utilsation des timers pour le pwm.