Bonjour, je vous ai mis tout mon code mais on ne s'intéressera pas à la librairies Mirf, seulement au niveau ou je commande les moteurs, mon problème est que quand j'ajoute la fonction pour n'allumer qu'un moteur avec l'axe X de mon joytick que j'ai ici nommé numero 2, et l'axe Y c'est à dire pour faire marcher les deux moteurs du sens avant et arrière, que j'ai nommé numéro 1. Sauf quand je mets la fonction "val" dans mon code, la fonction val2 ne tourne plus, enfin elle tourne mais les moteurs ne tourne plus, comment pourrais je faire pour faire tourné le moteur de droite quand je tounre le joystick a gauche et le moteur de gauche quand je tourne le joystick à droite ? merci
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
//Assignation des pins de l'Arduino
#define motorPin1a 7 // Marche avant du premier moteur
#define motorPin1b 8 // Marche arrière du premier moteur
#define speedPin1 6 // L293D enable pin pour le premier moteur
#define motorPin2a 3 // Marche avant du deuxième moteur
#define motorPin2b 4 // Marche arrière du deuxième moteur
#define speedPin2 5 // L293D enable pin pour le deuxième moteur
// jusqu'Ã nouvel ordre, la vitesse du moteur est nulle
int Mspeed= 0;
int Mspeed1 = 0;
int Mspeed2 = 0;
void setup() {
// réglage des broches à output
pinMode(motorPin1a, OUTPUT);
pinMode(motorPin1b, OUTPUT);
pinMode(speedPin1, OUTPUT);
pinMode(motorPin2a, OUTPUT);
pinMode(motorPin2b, OUTPUT);
pinMode(speedPin2, OUTPUT);
Serial.begin(9600); // pour le débogage
Mirf.cePin = 9; // CE sur D9
Mirf.csnPin = 10; // CSN sur D10
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.channel = 0;
Mirf.payload = 4;
Mirf.config();
Mirf.setTADDR((byte *)"nrf01"); // Le 2eme module va envoyer ses info au 1er module
Mirf.setRADDR((byte *)"nrf02"); // On définit ici l'adresse du 2eme module
}
void loop(){
int numero1;
int numero2;
byte numero;
int pairimpair;
byte data[Mirf.payload]; // Tableau de byte qui va stocker le message recu
if(!Mirf.isSending() && Mirf.dataReady()){ // Si un message a été recu et qu'un autre n'est pas en cours d'emission
Mirf.getData(data); // on récupére le message
// la suite de 4 bytes est convertie en 2 int
numero1 = ((long )data[0]) << 8;
numero1 |= data[1];
numero2 = ((long )data[2]) << 8;
numero2 |= data[3];
// pour débogage, on pourra enlever ensuite:
Serial.print("Recu les numeros ");
Serial.print(numero1,DEC);
Serial.print(" , ");
Serial.println(numero2,DEC);
int val2 = numero1 ;
int val = numero2 ;
if (val2 > 320) // donc marche arrière
{
val2 = map(val2, 311, 0, 0, 255);
analogWrite(speedPin1, val2);
digitalWrite(motorPin1a, HIGH);
digitalWrite(motorPin1b, LOW);
analogWrite(speedPin2, val2);
digitalWrite(motorPin2a, HIGH);
digitalWrite(motorPin2b, LOW);
Serial.print("Marche avant ");
Serial.print(val2,DEC);
Serial.print(" , ");
}
else if(val2 < 316) {
val2 = map(val2, 311, 0, 0, 255) ;
analogWrite(speedPin1,val2);
digitalWrite(motorPin1a,LOW) ;
digitalWrite(motorPin1b,HIGH);
analogWrite(speedPin2,val2);
digitalWrite(motorPin2a,LOW) ;
digitalWrite(motorPin2b,HIGH) ;
Serial.print("marche arriere ");
Serial.print(val2,DEC);
Serial.print(" , ");
}
if (val > 335) // moteur 1 en marche pour aller a droite
{
val = map(val, 311, 0, 0, 255);
analogWrite(speedPin1, val);
digitalWrite(motorPin1b, HIGH);
Serial.print("gauche ");
Serial.print(val2,DEC);
Serial.print(" , ");
}
else if(val < 332) moteur deux en marche pour aller à gauche
{
val = map(val, 311, 0, 0, 255) ;
analogWrite(speedPin2,val);
digitalWrite(motorPin2b,HIGH) ;
Serial.print("droite ");
Serial.print(val2,DEC);
Serial.print(" , ");
}
else
{
analogWrite(speedPin1,0);
analogWrite(speedPin2, 0);
}
}
}