Bonjour à tous,
Je suis sur un projet de voiture RC sur arduino uno, utilisant un module de gestion des moteurs L298N et un module RC nrfl24l01,
Le code me semble correct (aussi bien le transmetteur que le récepteur), le problème est que les 2 moteurs devraient tourner à la meme vitesse et ce n'est pas le cas, il y en a un sur les 2 qui tourne "normalement" et l'autre au ralenti voir pas du tout....
Je ne vois pas ou j'ai fait l'erreur, je vous envoie le code du transmetteur, du récepteur et les photos du montage.
Merci pour tout aide que vous pourrez me fournir, voila 3 soirs que je me creuse la tete sans aucune solution
Transmission:
#include <SPI.h>
#include "RF24.h"
//SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 10//CE -> 9
RF24 radio(9,10);
const uint64_t pipe = 0xF0F0F0F000LL;
int msg[1];
int potpin_1 = A0; /* joystick x et y correspondent a 2 potar*/
int val_1;
int potpin_2 = A1;
int val_2;
void setup(void){
radio.begin();
radio.setPALevel(RF24_PA_HIGH);
radio.openWritingPipe(pipe);
}
void loop() {
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);
/* la valeur des potars ( joystick ici) va de 0 à 1023 et la frequence du nrf224
* va de 0 à 255, comme il y a 2 informations a taiter ( avant arriere et gauche droite)
* il faut diviser cette freauence en 2 ( 1 potar par moitié) si il y avait 3 informations il faudrait diviser la frequence par 3
*/
}
et enfin le code pour la reception:
#include <SPI.h>
#include "RF24.h"
//SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 10//CE -> 9
RF24 radio(9,10);
const uint64_t pipe = 0xF0F0F0F000LL;
int msg[1];
int data;
int avant;
int droite;
int gauche;
int arriere;
const int in1 = 1; // direction pin 1
const int in2 = 2; // direction pin 2
const int in3 = 3; // idem
const int in4 = 4; // idem
const int ena = 5; // PWM pin changement de la vitesse
const int enb = 6;
void stop()
{
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
digitalWrite(enb, LOW);//ou analogWrite(enb, 200)
digitalWrite(enb, LOW);
}
void dirgauche(int gauche)
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
digitalWrite(ena, HIGH); // remplacer "150" par "gauche" si besoin
digitalWrite(enb, HIGH); //ou analogWrite(enb, 200)
}
void dirdroite(int droite)
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
digitalWrite(ena, HIGH); // remplacer "150" par "droite" si besoin
digitalWrite(enb, HIGH);//ou analogWrite(enb, 200)
}
void diravant (int avant)
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
digitalWrite(ena, HIGH); // remplacer "150" par "avant" si besoin
digitalWrite(enb, HIGH); //ou analogWrite(enb, 200)
}
void dirarriere (int arriere)
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
digitalWrite(ena, HIGH); // remplacer "150" par "arriere" si besoin
digitalWrite(enb, HIGH);//ou analogWrite(enb, 200)
}
void setup()
{
Serial.begin(9600);
pinMode(in1, OUTPUT); // connection to L298n
pinMode(in2, OUTPUT); // connection to L298n
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(ena, OUTPUT); // connection to L298n
pinMode(enb, OUTPUT);
delay(50);
radio.begin();
radio.setPALevel(RF24_PA_HIGH);
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available())radio.read(msg, 1);
if (msg[0] <64 && msg[0] >-1)data = msg[0], gauche = map(data, 63, 0, 0, 255),dirgauche(gauche); /* Gestion de la gauche. data: ce que est recu comme info de l'emeteur, ensuite division de
la frequence entre 0 et 60 ( division en 5 part pour gauche, droite, avant arriere et stop) */
if (msg[0] >64 && msg[0] <=128)data = msg[0], droite = map(data, 128, 65, 255, 0), dirdroite(droite);
if (msg[0] >128 && msg[0] <=189)data = msg[0], avant = map(data, 189, 129, 0, 255), diravant(avant);
if (msg[0] >=201 && msg[0] <=255)data = msg[0], arriere = map(data, 255, 201, 255, 0), dirarriere(arriere);
if (msg[0] >190 && msg[0] <=200)data = msg[0], stop();
Serial.println(arriere);
}
Merci encore pour votre aide.