Bonjours,
Je fabrique un robot, et j'ai besoin que la télécommande puisse envoyer et recevoir des information en même temps, de même du côté robot via le module NRF24L01 (acheté sur Banggood : 3pcs 1100 meter long distance nrf24l01+pa+lna wireless module with antenna Sale - Banggood.com ) en utilisant la librairie Mirf .
Les modules radios fonctionnent, puisque j'ai déjà réussis à les faire communiquer,
mais la télécommande ne faisait que envoyer et le robot ne faisait que recevoir. Voici les programmes :
(J'ai fait plusieurs post car sinon je dépassais la limite de caractères )
//programme téléversé sur arduino nano ( partie télécommande )
#include <SPI.h> // Pour la communication via le port SPI
#include <Mirf.h> // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI (ne cherchez pas à comprendre)
byte valeurs[9];//donnés à envoyer
char buzzer = 6;
const byte bouton1 = 4;
const byte bouton2 = 3;
const byte bouton3 = 2;
const byte joyx = A1;
int valx = 0;// valeur de joyx
const byte joyy = A2;
int valy = 0;// valeur de joyy
const byte potentiometre = A3;
int valp = 0;// valeur de ...
const byte joyx2 = A6;
int valx2;
const byte joyy2 = A7;
int valy2;
const byte boutonled = 5;
boolean valled = 0;
boolean valled2 = 0;
////valeurs à envoyer//////////
boolean led2 = 0;
byte vitessem1 = 0;
byte vitessem2 = 0;
boolean moteur1 = 0;
boolean moteur2 = 0;
boolean onoffmoteur = 0;
byte servo1 = 0;
byte servo2 = 0;
byte servoled = 0;
void setup() {
///////configuration du module radio///////////////
Mirf.cePin = 9; // Broche CE sur D9
Mirf.csnPin = 10; // Broche CSN sur D10
Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
Mirf.init(); // Initialise la bibliothéque
Mirf.channel = 1; // Choix du cannal de communication (128 canaux disponible, de 0 à 127)
Mirf.payload = sizeof(byte) * 9; // Taille d'un message (maximum 32 octets)(9 signifit le nombre de valeurs à envoyer)1 byte = 1 octet
Mirf.config(); // Sauvegarde la configuration dans le module radio
Mirf.setTADDR((byte *) "nrf02"); // Adresse de transmission
Mirf.setRADDR((byte *) "nrf01"); // Adresse de réception
Serial.begin(9600);
pinMode(joyx, INPUT);
pinMode(joyy, INPUT);
pinMode(potentiometre, INPUT);
pinMode(joyx2, INPUT);
pinMode(joyy2, INPUT);
pinMode(boutonled, INPUT);
}
void loop() {
/////////////////////////////////////////////////////////////////////////
// // // // // //corps du programme /// // // // // // // //
/////////////////////////////////////////////////////////////////////////
valx = analogRead(joyx);
valy = analogRead(joyy);
valp = analogRead(potentiometre);
valx2 = analogRead(joyx2);
valy2 = analogRead(joyy2);
valled = digitalRead(boutonled);
//////////////////////////////////////////
if (valled == 1) {
if (valled2 == 1) {
led2 = !led2;
valled2 = 0;
}
}
else {
valled2 = 1;
}
//////////////////////////////////////////////////////////
if ((valx2 > 500) && (valx2 < 540)) {
servo1 = 90;
}
else if ((valx2 < 500) && (valx2 > 10)) {
servo1 = map (valx2, 11, 499, 166, 91);
//servo1 = 134;
}
else if ((valx2 > 540) && (valx2 < 1010)) {
servo1 = map (valx2, 540, 1023, 89, 16);
//servo1 = 46;
}
else if (valx2 > 1010) {
servo1 = 15;
}
else if (valx2 < 10) {
servo1 = 167;
}
//////////////////////////////////////////////////////
if ((valy2 > 485) && (valy2 < 545)) {
servo2 = 165;
servoled = 85;
}
else if ((valy2 > 545) && (valy2 < 1013)) {
servo2 = map (valy2, 545, 1013, 164 , 79);
servoled = map (valy2, 545 , 1013, 86, 139);
//servo2 = 120;
//servoled = 125;
}
else if (valy2 > 1013) {
servo2 = 78;
servoled = 140;
}
if (led2 == 0) {
servoled = 85;
}
////////////////////////////////////////////////////////////
//mode 1: avence
if ((valx >= 751) && (valy <= 750) && (valy >= 251))
{
vitessem1 = map (valp, 0, 1023, 80, 255);
vitessem2 = map (valp, 0, 1023, 80, 255);
moteur1 = 1;
moteur2 = 1;
onoffmoteur = 1;
}
//mode 2:recule
else if ((valx <= 250) && (valy <= 750) && (valy >= 251))
{
vitessem1 = map (valp, 0, 1023, 80, 255);
vitessem2 = map (valp, 0, 1023, 80, 255);
moteur1 = 0;
moteur2 = 0;
onoffmoteur = 1;
}
//mode 3:tourne à gauche
else if ((valx <= 750) && (valx >= 251) && (valy <= 250))
{
vitessem1 = map (valp, 0, 1023, 80, 255);
vitessem2 = map (valp, 0, 1023, 80, 255);
moteur1 = 0;
moteur2 = 1;
onoffmoteur = 1;
}
//mode 4:tourne à droite
else if ((valx <= 750) && (valx >= 251) && (valy >= 751))
{
vitessem1 = map (valp, 0, 1023, 80, 255);
vitessem2 = map (valp, 0, 1023, 80, 255);
moteur1 = 1;
moteur2 = 0;
onoffmoteur = 1;
}
//mode 5:avant gauche
else if ((valx >= 751) && (valy <= 250))
{
vitessem1 = map (valp, 0, 1023, 80, 127);
vitessem2 = map (valp, 0, 1023, 80, 255);
moteur1 = 1;
moteur2 = 1;
onoffmoteur = 1;
}
//mode 6:avant droite
else if ((valx >= 751) && (valy >= 751))
{
vitessem1 = map (valp, 0, 1023, 80, 255);
vitessem2 = map (valp, 0, 1023, 80, 127);
moteur1 = 1;
moteur2 = 1;
onoffmoteur = 1;
}
//mode 7:arrière gauche
else if ((valx <= 250) && (valy <= 250))
{
vitessem1 = map (valp, 0, 1023, 80, 127);
vitessem2 = map (valp, 0, 1023, 80, 255);
moteur1 = 0;
moteur2 = 0;
onoffmoteur = 1;
}
//mode 8:arrière droite
else if ((valx <= 250) && (valy >= 751))
{
vitessem1 = map (valp, 0, 1023, 80, 255);
vitessem2 = map (valp, 0, 1023, 80, 127);
moteur1 = 0;
moteur2 = 0;
onoffmoteur = 1;
}
else {
moteur1 = 0;
moteur2 = 0;
onoffmoteur = 0;
}
/////////////////////////////////////////////////////////////////////////
// // // // // //partie envoie des donnés /// // // // // // /
/////////////////////////////////////////////////////////////////////////
valeurs[0] = led2;
valeurs[1] = vitessem1;
valeurs[2] = vitessem2;
valeurs[3] = moteur1;
valeurs[4] = moteur2;
valeurs[5] = onoffmoteur;
valeurs[6] = servo1;
valeurs[7] = servo2;
valeurs[8] = servoled;
Mirf.send((byte *) &valeurs); // On envoi le message
while (Mirf.isSending()); // On attend la fin de l'envoi
Serial.print(valeurs[0]);
Serial.print(" ");
Serial.print(valeurs[1]);
Serial.print(" ");
Serial.print(valeurs[2]);
Serial.print(" ");
Serial.print(valeurs[3]);
Serial.print(" ");
Serial.print(valeurs[4]);
Serial.print(" ");
Serial.print(valeurs[5]);
Serial.print(" ");
Serial.print(valeurs[6]);
Serial.print(" ");
Serial.print(valeurs[7]);
Serial.print(" ");
Serial.print(valeurs[8]);
Serial.print(" ");
Serial.println();
}