hola todos, después de leer un montón, probar muchísimos sketch, librerías y demás, y no encontrar lo que busco, os pregunto los entendidos si hay alguna manera de hacer lo que os voy exponer.
dispongo de un arduino due, que es el receptor y 4 arduinos nano que son los emisores, en cada nano tengo un nrf24l01 para que pueda comunicarse con el receptor, si conseguido que se comunique pero no los 4 la vez.
os pongo el código ultimo que probado ver si alguno de vosotros me puede orientar.
de momento solo tengo 3 puestos
emisor1
emisor2
emisor3
receptor
quizá haya alguna manera mejor de hacerlo, solo necesito que cada emisor envié al receptor 4 variables diferentes.
un saludo.
dispongo de un arduino due, que es el receptor y 4 arduinos nano que son los emisores, en cada nano tengo un nrf24l01 para que pueda comunicarse con el receptor, si conseguido que se comunique pero no los 4 la vez.
os pongo el código ultimo que probado ver si alguno de vosotros me puede orientar.
de momento solo tengo 3 puestos
emisor1
code: [select]
/*
* getting started example sketch nrf24l01+ radios
* basic example of how send data 1 node another
* updated: dec 2014 tmrh20
*/
#include <spi.h>
#include "rf24.h"
/****************** user config ***************************/
/* hardware configuration: set nrf24l01 radio on spi bus plus pins 7 & 8 */
rf24 radio(7,8);
/**********************************************************/
byte addresses[][6] = {"1node","2node","3node","4node"};
// used control whether node sending or receiving
struct lectura {
byte id;
byte angulo;
};
void setup() {
serial.begin(57600);
serial.println(f("emisor 1"));
radio.begin();
// set pa level low prevent power supply related issues since a
// getting_started sketch, , likelihood of close proximity of devices. rf24_pa_max default.
radio.setpalevel(rf24_pa_low);
radio.setchannel (120);
// open writing , reading pipe on each radio, opposite addresses
radio.openwritingpipe(addresses[0]);
}
void loop() {
lectura enviar;
enviar.id=1;
enviar.angulo=10;
serial.println(f("enviando 1..."));
if (!radio.write( &enviar, sizeof(lectura) )){
serial.println(f("fallo al enviar"));
}
delay(1000);
} // loop
emisor2
code: [select]
/*
* getting started example sketch nrf24l01+ radios
* basic example of how send data 1 node another
* updated: dec 2014 tmrh20
*/
#include <spi.h>
#include "rf24.h"
/****************** user config ***************************/
/* hardware configuration: set nrf24l01 radio on spi bus plus pins 7 & 8 */
rf24 radio(7,8);
/**********************************************************/
byte addresses[][6] = {"1node","2node","3node","4node"};
// used control whether node sending or receiving
struct lectura {
byte id;
byte angulo;
};
void setup() {
serial.begin(57600);
serial.println(f("emisor 2"));
radio.begin();
// set pa level low prevent power supply related issues since a
// getting_started sketch, , likelihood of close proximity of devices. rf24_pa_max default.
radio.setpalevel(rf24_pa_low);
radio.setchannel(121);
// open writing , reading pipe on each radio, opposite addresses
radio.openwritingpipe(addresses[0]);
}
void loop() {
lectura enviar;
enviar.id=2;
enviar.angulo=20;
serial.println(f("enviando 2..."));
if (!radio.write( &enviar, sizeof(lectura) )){
serial.println(f("fallo al enviar"));
}
delay(1000);
} // loop
emisor3
code: [select]
/*
* getting started example sketch nrf24l01+ radios
* basic example of how send data 1 node another
* updated: dec 2014 tmrh20
*/
#include <spi.h>
#include "rf24.h"
/****************** user config ***************************/
/* hardware configuration: set nrf24l01 radio on spi bus plus pins 7 & 8 */
rf24 radio(7,8);
/**********************************************************/
byte addresses[][6] = {"1node","2node","3node","4node"};
struct lectura {
byte id;
byte angulo;
};
void setup() {
serial.begin(57600);
serial.println(f("emisor 3"));
radio.begin();
// set pa level low prevent power supply related issues since a
// getting_started sketch, , likelihood of close proximity of devices. rf24_pa_max default.
radio.setpalevel(rf24_pa_low);
radio.setchannel (122);
// open writing , reading pipe on each radio, opposite addresses
radio.openwritingpipe(addresses[0]);
}
void loop() {
lectura enviar;
enviar.id=3;
enviar.angulo=30;
serial.println(f("enviando 3..."));
if (!radio.write( &enviar, sizeof(lectura) )){
serial.println(f("fallo al enviar"));
}
delay(1000);
} // loop
receptor
code: [select]
//lee de 3 sensores distintos, cada uno debe enviar un byte con su id (1 2 3) en ascii
#include <spi.h>
#include "rf24.h"
/****************** user config ***************************/
/* hardware configuration: set nrf24l01 radio on spi bus plus pins 7 & 8 */
rf24 radio(7,8);
/**********************************************************/
byte addresses[][6] = {"1node","2node","3node","4node"};
struct lectura {
byte id;
byte angulo;
};
void setup() {
serial.begin(57600);
radio.begin();
// set pa level low prevent power supply related issues since a
radio.setpalevel(rf24_pa_low);
// getting_started sketch, , likelihood of close proximity of devices. rf24_pa_max default.
}
void loop() {
lectura recibido;
uint8_t canal=0;
(canal=120;canal < 123;canal++){
radio.setchannel (canal);
radio.openreadingpipe(1,addresses[0]);
radio.startlistening();
serial.print("leyendo en canal "); serial.print(canal); serial.println();
if( radio.available()){
radio.read( &recibido, sizeof(lectura) ); // payload
serial.print("recibido id "); serial.print(recibido.id); serial.print("recibido angulo "); serial.print(recibido.angulo); serial.println();
}
radio.stoplistening(); // first, stop listening can talk
}
delay (300);
} // loop
quizá haya alguna manera mejor de hacerlo, solo necesito que cada emisor envié al receptor 4 variables diferentes.
un saludo.
prueba con las librerías que expliqué en esa guía: http://forum.arduino.cc/index.php?topic=325087.0
Arduino Forum > International > Español > Hardware (Moderators: surbyte, Hector_A) > 4 emisores nrf24l01 a un receptor
arduino
Comments
Post a Comment