voici le code de mon emetteur:
//
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
int val[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // État des boutons
int old_val[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // État précédent des boutons
int state[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // État de la LED
byte message; // ce qui sera envoyé à l'autre Arduino
void setup(){
Mirf.cePin = 47; // CE branché sur 8
Mirf.csnPin = 49; // CSN branché sur 9
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.channel = 65;
Mirf.payload = sizeof(byte); // taille de ce qu'on va envoyer
Mirf.config();
Mirf.setTADDR((byte *)"nrf02"); // on baptise les deux modules
Mirf.setRADDR((byte *)"nrf01");
// configuration des entrées numériques associées aux boutons:
for (int i=0; i <= 11; i++){
pinMode(BOUTON+i, INPUT);
}
}
void loop(){
for (int i=0; i <= 11; i++){
val[i] = digitalRead(BOUTON+i);
// Y a-t-il eu un changement?
if ((val[i] == HIGH) && (old_val[i] == LOW)){
state[i] = 1 - state[i];
delay(10);
}
old_val[i] = val[i];
}
// mise à jour du message à envoyer à l'autre Arduino:
message = B00000000;
if (state[0]){
message = message + B00000001;
}
if (state[1]){
message = message + B00000010;
}
if (state[2]){
message = message + B00000011;
}
if (state[3]){
message = message + B00000100;
}
if (state[4]){
message = message + B00000101;
}
if (state[5]){
message = message + B00000110;
}
if (state[6]){
message = message + B00000111;
}
if (state[7]){
message = message + B00001000;
}
if (state[8]){
message = message + B00001001;
}
if (state[9]){
message = message + B00001010;
}
if (state[10]){
message = message + B00001011;
}
if (state[11]){
message = message + B00001100;
}
// on peut maintenant envoyer le message
Mirf.send((byte *)&message);
while(Mirf.isSending()); // On attend aussi longtemps que le message n'a pas été envoyé
}
Et le code de mon récepteur:
/
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
Servo servo8;
Servo servo9;
Servo servo10;
Servo servo11;
Servo servo12;
byte message;
void setup(){
Mirf.cePin = 47; // CE branché sur 8
Mirf.csnPin = 49; // CSN branché sur 9
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.channel = 65;
Mirf.payload = sizeof(byte); // taille de ce qu'on va recevoir
Mirf.config();
Mirf.setTADDR((byte *)"nrf01"); // on baptise les deux modules
Mirf.setRADDR((byte *)"nrf02");
// configuration des sorties (Servo)
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
servo1.attach(2);
servo2.attach(3);
servo3.attach(4);
servo4.attach(5);
servo5.attach(6);
servo6.attach(7);
servo7.attach(8);
servo8.attach(9);
servo9.attach(10);
servo10.attach(11);
servo11.attach(12);
servo12.attach(13);
}
void loop(){
byte data[Mirf.payload]; // data va contenir les donnéees reçues
if(!Mirf.isSending() && Mirf.dataReady()){
Mirf.getData(data); // réception du message
message = data[0];
// on fait bouger les servos
if (message >= B00001000){
servo8.write(90);
message = message - B00001000;}
else
{servo8.write(180); }
if (message >= B00000111){
servo7.write(90);
message = message - B00000111;}
else
{servo7.write(180); }
if (message >= B00000110){
servo6.write(90);
message = message - B00000110;}
else
{servo6.write(180); }
if (message >= B00000101){
servo5.write(90);
message = message - B00000101;}
else
{servo5.write(180); }
if (message >= B00000100){
servo4.write(90);
message = message - B00000100;}
else
{servo4.write(180); }
if (message >= B00000011){
servo3.write(90);
message = message - B00000011;}
else
{servo3.write(180); }
if (message >= B00000010){
servo2.write(90);
message = message - B00000010;}
else
{servo2.write(180); }
}
if (message >= B00000001){
servo1.write(90);
}
else
{servo1.write(180); }
}
La communication fonctionne, j'ouvre et je fermes les 6 premiers servos mais au delà ca ne fonctionne plus.
Je pense que mon problème de ce message "B000000001" que j'envoie et que je reçois, je voudrais un truc plus simple mais je n'arrive à traduire ma pensé en code:
J'appuie sur le bouton 1, le message "1" s'envoie
J'appuie sur le bouton 2, le message "2" s'envoie
Ainsi de suite jusqu'au bouton 12
Récepteur:
Si le message est "1", le servo 1 s'ouvre, sinon il reste à son état initial
Si le message est "2", le servo 2 s'ouvre, sinon il reste à son état initial
Ainsi de suite jusqu'au servo 12