Muy buenas, estoy tratando de enviar información entre 2 dispositivos NRF24 a través de arduino.
Mi intención eso enviar STRUCT's usando la librería MIRF. No se que más probar o hacer, he encontrado otras webs y otros códigos pero no me funciona con ninguno. Si alguien tiene algún código para este transmisor que funcione se lo agradecería mucho.
Usando el código sacado de esta web solo recibo ceros pese a simplemente tratar de enviar un entero.
Adjunto códigos:
El de enviar:
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
int valor;
void setup(){
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"trans"); //definimos el nombre del módulo. 5 bytes máximo
Mirf.payload = sizeof(valor);
Mirf.config();
}
void loop(){
valor=288;
Mirf.setTADDR((byte *)"recep"); //nombre del módulo al que enviamos
Mirf.send((byte *) &valor); //enviamos los datos
while(Mirf.isSending()){
}
}
El de recibir:
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
int valor;
void setup() {
Serial.begin( 9600);
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"recep"); //definimos el nombre del módulo. 5 bytes máximo
Mirf.payload = sizeof(valor);
Mirf.config();
}
void loop(){
while(!Mirf.dataReady()){
}
Mirf.getData((byte *) &valor);
Serial.print("valor = ");
Serial.println(valor);
Serial.println("---------------");
delay(500); //ponemos un delay para que nos de tiempo a leer
}
También traté de utilizar otro código de otra web en la que sí que se enviaban STRUCT's pero de nuevo lo único que recibía eran ceros.
Os dejo ambos códigos.
Cliente
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <Wire.h>
//#include <LCD.h>
//#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd( 0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE );
struct DATOS{
float temp;
unsigned long time;
}
datos;
void setup()
{
Serial.begin(57600);
//lcd.begin(16,2);
//lcd.backlight();
Mirf.spi = &MirfHardwareSpi;
Mirf.cePin = 7;
Mirf.csnPin = 8;
Mirf.init();
Mirf.setRADDR((byte *)"client");
Mirf.payload = sizeof(datos);
Mirf.channel = 10;
Mirf.config();
}
void loop()
{
if( !Mirf.isSending() && Mirf.dataReady() )
{
Mirf.getData((byte *) &datos);
Serial.print(datos.temp);
Serial.println(" c");
// Serial.setCursor(10,0);
Serial.print(datos.time);
Serial.println(" s");
}
}
Servidor:
//SERVER ENVIAR
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <Wire.h>
struct DATOS{
float temp;
unsigned long time;
}
datos;
void setup()
{
// lcd.begin(16,2);
// lcd.backlight();
Serial.begin(57800);
Mirf.spi = &MirfHardwareSpi;
Mirf.cePin = 7;
Mirf.csnPin = 8;
Mirf.init();
Mirf.setRADDR((byte *)"server");
Mirf.payload = sizeof(datos);
Mirf.channel = 10;
Mirf.config();
}
void loop()
{
datos.time = 1000;
datos.temp = 0.288;
if( !Mirf.isSending() )
{
Mirf.setTADDR((byte *)"client");
Mirf.send((byte *)&datos);
}
Serial.print(datos.temp);
Serial.println(" c");
Serial.print(datos.time);
Serial.println(" s");
// if( millis() % 1000 == 0 )
// {
// datos.time = 1000;
// datos.temp = 0.288;
//
// //lcd.setCursor(0,0);
// Serial.print(datos.temp);
// Serial.println(" c");
// Serial.print(datos.time);
// Serial.println(" s");
//
// if( !Mirf.isSending() )
// {
// Mirf.setTADDR((byte *)"client");
// Mirf.send((byte *)&datos);
// }
// }
}