comunicación NRF24L01

hola a todos

me dirijo a ustedes con la intención de obtener ayuda en algo que quiero realizar. Resulta que compre unos módulos NRF24L01 y llevo varios días tratando de hacer funcionar un condigo básico que encontré y me funciono y que ahora quiero modificar para lo que yo necesito.

quiero enviar un caracter desde mi pc por ej 'A' desde el puerto serial de donde tengo conectado un arduino uno + nrf24l01 y recibir ese caracter para compararlo en mi otro arduino y asi realizar lo que yo quiero. El problema es que en el otro arduino solo me llegan ceros (0) y no entiendo porque, he buscado y probado por varios días y no logro resolver el problema.

adjunto código por favor si alguien me echara una mano seria de mucha ayuda.

transmisor

#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <nRF24L01.h>
#include <SPI.h>

//const int sensor=2;
//int State=0;

char comando;


void leer_dato()
{
  if(Serial.available()>0)
  {
   Serial.println(comando);
   comando = Serial.read(); 
  }
}


void setup()
{
 Serial.begin(9600);
 //pinMode(sensor,INPUT);
 Serial.println("esperando comando...");
 // Iniciamos el modo de trasmision
 Mirf.spi=&MirfHardwareSpi;
 Mirf.init();


 Mirf.setRADDR((byte *)"RX_99");
 Mirf.payload = 1;

 // indicamos el canal
Mirf.channel = 32;

// a configurar y vaciar cola FIFO
Mirf.config();


}


void loop()
{
leer_dato();

Mirf.setTADDR((byte *)"TX_01");

//ahora vamos a emitir
Mirf.send((byte*)&comando);

//esperamos a que termine de emitir
while( Mirf.isSending() ) ;
delay(500);
}

receptor

#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <nRF24L01.h>
#include <SPI.h>
#include <Servo.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(11, 10, 6, 5, 4, 2);
Servo servo1;

int led1 = A0;
int motor = A1;
char data;
//const int led=2;

void setup()
{
  Serial.begin(9600);
  servo1.attach(3);
  pinMode(led1,OUTPUT);
  pinMode(motor, OUTPUT);
  digitalWrite(led1, LOW);
  digitalWrite(motor, LOW);
  Mirf.spi=&MirfHardwareSpi;
  Mirf.init();


Mirf.setRADDR((byte *)"TX_01");
Mirf.payload = 1;
 
// el canal por el cual estaremos transmitiendo

Mirf.channel = 32;

// Esto inicia el mirf y borra la lista FIFO
Mirf.config(); 

}



void loop()
{
byte comando;
// comprobamos que no hay datos a recibir.

if( !Mirf.isSending()  &&  Mirf.dataReady() )
{
// recibimos la información  y lo almacenamos en C

Mirf.getData((byte*)&comando);
//data = (char)comando;
//Serial.println(comando);
//delay(100);

switch(comando)
  {
  case 'A':
 
 aqui lo que quiero accionar

  comando = ' ';
  break;
  
  case 'B':

aqui lo que quiero accionar

  comando = ' ';
  break;
  
   case 'C':

aqui lo que quiero accionar

  comando = ' ';
  break;
  

   case 'D':

aqui lo que quiero accionar
  comando = ' ';
  break;
  

  

  
  
     }
   }
 }




//if(c==1)
//{
//digitalWrite(led,HIGH);
//}
//
//else
//{
//digitalWrite(led,LOW);
//}
//
//// imprimiremos en el puerto serial el estado que recibimos del PIR
//Serial.println(c);

Bueno, esto comienzas por dos arduinos y sus nRF24L01 bien conectados.
Has verificado que estan bien conectados? Todos dicen que si y luego que un cable estaba suelto , el otro me confundí de linea en el protoboard. Te aconsejo que revises. Y si usas el protoboard lo hagas con cuidado.

Segundo.
Toda libreria tiene ejemplos para testear que las cosas estan bien. No uses tus códigos, usa los ejemplos sugeridos. Cuando éstos funcionen, pasas al tuyo.

Cuentame si esto te sirve o ya lo has hecho!!

gracias por responder.
no estoy utilizando protoboard ya que tengo los módulos conectados directamente a los arduino uno por lo cual verifique continuidad de cada pin del modulo a la tarjeta y todo bien, así que cargue otro código para probar la transmisión y recepción y funciono perfecto. entonces he estado mirando y creo que el inconveniente va relacionado con el tipo de dato que envío y la comparación que realizo en el arduino receptor ya que es byte y yo comparo es un carácter (char)
probe esto en el receptor pero no funciono.

byte c;

 int ascii;
 if( Mirf.dataReady() )
 {
 Mirf.getData(&c); 
 ascii=c; //
 char data = (char)ascii; //Casting de char para convertir de int a char
 Serial.print(data);

switch(data)
{

si me pudieras mostrar como trasmitir un caracter y recibirlo correctamente para compararlo y realizar lo que yo quiero seria de mucha ayuda.

Si es eso, define entonces en lugar de char comando como byte comando.

hice el cambio de variable en el emisor (char comando) ahora cuando ingreso un un caracter por ej 'B' me imprime por el puerto serialde emisor un cero (0) y en el receptor no llega nada.

transmisor

#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <nRF24L01.h>
#include <SPI.h>


byte comando;


void leer_dato()
{
  if(Serial.available()>0)
  {
   Serial.println(comando);
   comando = Serial.read(); 
  }
}


void setup()
{
 Serial.begin(9600);
 Serial.println("Control P Serial");
 Serial.println("esperando comando...");
 // Iniciamos el modo de trasmision
 Mirf.spi=&MirfHardwareSpi;
 Mirf.init();
 Mirf.setRADDR((byte *)"RX_99");
 Mirf.payload = 1;
 // Mirf.payload = sizeof(char);
Mirf.channel = 32;
Mirf.config();

}

void loop()
{
leer_dato();

Mirf.getData(&comando);
Mirf.setTADDR((byte *)"TX_01");
Mirf.send(&comando);
while( Mirf.isSending() ) ;
delay(500);
 
}

receptor

#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <nRF24L01.h>
#include <SPI.h>
#include <Servo.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(11, 10, 6, 5, 4, 2);
Servo servo1;

int led1 = A0;
int motor = A1;


void setup()
{
  Serial.begin(9600);
  Serial.println("esperando comando...");
  servo1.attach(3);
  pinMode(led1,OUTPUT);
  pinMode(motor, OUTPUT);
  digitalWrite(led1, LOW);
  digitalWrite(motor, LOW);
  Mirf.spi=&MirfHardwareSpi;
  Mirf.init();
Mirf.setRADDR((byte *)"TX_01");
Mirf.payload = 1;
//Mirf.payload = sizeof(char);
Mirf.channel = 32;
Mirf.config(); 

}



void loop()
{
byte c;

 int ascii;
 if( Mirf.dataReady() )
 {
 Mirf.getData(&c);
 ascii=c; //
 char data = (char)ascii; 
 Serial.print(data);

switch(data)

creo que esta bien la logica pero no me funciona aun... no se si puedes mirar a ver que tengo mal
gracias

Bueno te hice una versión usando las herramientas que suelo usar, que es todo el paquete de librerías RF24 de tmrh20

[b]Transmisor[/b]
/**
 * Modo simple de enviar datos usando  RF24Network 
 *
 * NODO TRANSMISOR
 * Cada vez que se digita algo lo envía
 */

#include <RF24Network.h>  
#include <RF24.h>
#include <SPI.h>

// nRF24L01(+) radio attached using Getting Started board 
RF24 radio(7, 8);  // Revisa los pines CN y CE

// Network uses that radio
RF24Network network(radio);

// Address of our node
const uint16_t this_node = 1;

// Address of the other node
const uint16_t other_node = 0;

// How often to send 'hello world to the other unit
const unsigned long interval = 2000; //ms

// When did we last send?
unsigned long last_sent;

// How many have we sent already
unsigned long packets_sent;

// Structure of our payload
struct payload_t
{
  unsigned long ms;
  unsigned long counter;
  char valor;
};

// leo puerto serie
char comando;

bool leer_dato()  {
  bool status = false;

  if (Serial.available()>0)  {
      Serial.println(comando);
      comando = Serial.read(); 
      if (isAlpha(comando)) 
          status = true;
      else 
          status = false;
  }
  return status;
}

void setup(void)
{
  Serial.begin(115200);
  Serial.println("RF24Network/examples/ASCII_tx/");
 
  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 90, /*node address*/ this_node);
}

void loop(void)
{
  // Pump the network regularly
  network.update();

  // If it's time to send a message, send it!
  unsigned long now = millis();
  if (leer_dato())  {
      last_sent = now;

      Serial.print("Sending...");
      payload_t payload = { millis(), packets_sent++, comando };
      RF24NetworkHeader header(/*to node*/ other_node);
      bool ok = network.write(header,&payload,sizeof(payload));
      if (ok)
          Serial.println("ok.");
      else
          Serial.println("failed.");
  }
}
[b]Receptor[/b]
/**
 * Ejemplo simple usando RF24Network,
 *
 * NODO RECEPTOR 
 * Escucha mensajes del transmisor y los imprime
 * 
 */

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>

// nRF24L01(+) radio attached using Getting Started board 
RF24 radio(9, 10);  // Verificar los pines

// Network uses that radio
RF24Network network(radio);

// Address of our node
const uint16_t this_node = 0;

// Address of the other node
const uint16_t other_node = 1;

// Structure of our payload
struct payload_t {
  unsigned long ms;
  unsigned long counter;
  char valor;
};

void setup(void) {
  Serial.begin(115200);
  Serial.println("RF24Network/examples/ASCII_rx/");
 
  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 90, /*node address*/ this_node);
}

void loop(void) {
  // Pump the network regularly
  network.update();

  // Is there anything ready for us?
  while ( network.available() )  {
        // If so, grab it and print it out
        RF24NetworkHeader header;
        payload_t payload;
        network.read(header,&payload,sizeof(payload));
        Serial.print("Received packet #");
        Serial.print(payload.counter);
        Serial.print(" a los ");
        Serial.print(payload.ms);
        Serial.print(" comando : ");
        Serial.println(payload.valor);
  }
}

muchas gracias Surbyte por tu ayuda y por las recomendaciones que me diste, el código no funcionaba inicialmente hasta que agregue un CAPACITOR DE 10Uf entre 3.3v y GND y funciono perfectamente.
bueno ahora que funciona solo seguir explorando todos los beneficios que tienen estos módulos.

Gracias Surbyte..!!

Por favor, muestra imágenes de la placa que hiciste para el nRF24L01.
Puede que a alguien le interese.