Consulta NRF24L01+

Hola:
He estado leyendo varias veces todo el post y buscando por otros el como funciona el nrf2401.

Gracias a vosotros creo haber "medio entendido" como funciona pero no me acabo de aclarar.

He estado trabajando en un código muy simple y me gustaría implementare estos módulos.

Consiste en un emisor que envía lo leído en el monitor serial (Caracteres numéricos) que provienen de eventghost, y que me los envié a un receptor el cual ejecuta el código en función de lo que recibe (Encender bombillas en este caso a través de un rele de 4 canales).

Bueno os pongo el código del emisor

//Declaramos la librerias 
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

//Declaramos los pines CE y el CSN
#define CE_PIN 9
#define CSN_PIN 10

int val;// Declaramos la variable val (aquí leeremos el monitor serial y guardaremos los valores a enviar)

//Variable con la dirección del canal por donde se va a transmitir
byte direccion[5] ={'c','a','n','a','l'};


//creamos el objeto radio (NRF24L01)
RF24 radio(CE_PIN, CSN_PIN);

//vector con los datos a enviar
 byte datos[0];

void setup()
{
  //inicializamos el NRF24L01 
  radio.begin();
  //inicializamos el puerto serie
  Serial.begin(9600); 
 
//Abrimos un canal de escritura
 radio.openWritingPipe(direccion[0]);
 }
 
void loop()
{ 
  val = Serial.read(); //Leemos los datos del monitor serial
  
 //cargamos los datos en la variable datos que vienen de la variable val
 datos[0]=val;

 //enviamos los datos
 bool ok = radio.write(datos, sizeof(datos));
 
  //reportamos por el puerto serial los datos enviados 
  if(ok)
  {
     Serial.print("Datos enviados: "); 
     Serial.print(datos[0]); 
       }
  else
  {
     Serial.println("no se ha podido enviar");
  }
  delay(1000);
}

La cosa es que no me esta dando fallo al compilar y me indica "no se ha podido enviar" por lo que algo estoy haciendo mal.

Soy realmente un novato en todo esto y voy muy poco a poco. no obstante ya conseguí leer datos y encender y apagar digitales entre otras cosas.
Pero esto de los arrays me vuelve loco, y no los entiendo muy bien.

También os pongo el código del receptor ya que no se donde esta el fallo a ver si me podéis iluminar un poco o decirme que debo buscar para seguir con mi proyecto.

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
 
//Declaremos los pines CE y el CSN
#define CE_PIN 9
#define CSN_PIN 10
 
//Variable con la dirección del canal que se va a leer
byte direccion[5] ={'c','a','n','a','l'}; 

//creamos el objeto radio (NRF24L01)
RF24 radio(CE_PIN, CSN_PIN);

//vector para los datos recibidos
byte datos[0];

void setup()
{
 //inicializamos el NRF24L01 
  radio.begin();
  //inicializamos el puerto serie
  Serial.begin(9600); 
  
  //Abrimos el canal de Lectura
  radio.openReadingPipe(1, direccion[0] );
  
    //empezamos a escuchar por el canal
  radio.startListening();
 
}
 
void loop() 
{
  if (radio.read(datos, sizeof(datos))); //Leemos los datos....
  
   Serial.print(datos[0]); //imprimimos en el monitor serial. No hace falta crear la variable val, se puede hacer desde aqui el switch case.



}

Y por ultimo la parte que tengo hecha que son el switch case que hago referencia que si me funciona sin problemas. Lo tengo aparte para agregarlo cuando tenga resuelto lo de los nNRF2401

char datosRecibidos;                      //Creo la variable "datosRecibidos" (Aqui almacenare las "pulsaciones" recibidas atraves del monitor serial. Por eso no le asigno valor.)

void setup()
{
Serial.begin (9600);                     // Inicio Comunicacion Serial

                                         // Declaro los pines del arduino como salida
                                         
pinMode (2, OUTPUT);                     // Pin "1" Declarado como Salida   
pinMode (3, OUTPUT);                     // Pin "2" Declarado como Salida
pinMode (4, OUTPUT);                     // Pin "3" Declarado como Salida                     
pinMode (5, OUTPUT);                     // Pin "4" Declarado como Salida

}

void loop()
{
  datosRecibidos = Serial.read();        // Leo los valores de Monitor Serial que tiene la variable "datosRecibidos."

  switch(datosRecibidos)                 // Declara las "acciones" Segun leo de la variable "datosRecibidos."  
  
                                         //(Cada "Case" Ejecuta la accion que incluye hasta el "Break")
  
{
  case '1':                              // Si recibe un "1"     
  Serial.println ("Pin 1 Activado");     // Responde "Pin 2 Digital 2 Activado"
  digitalWrite(2, HIGH);                 // Enciende "Pin Digital 2"
  break;                                 // Finaliza el Case 
  
  case '2':                              // Si recibe un "2"
  Serial.println ("Pin 2 Activado");     // Responde "Pin digital 3 Activado"
  digitalWrite(3, HIGH);                 // Enciende el "Pin Digital 3"
  break;                                 // Finaliza el Case
    
  case '3':                              // Si recibe un "3"
  Serial.println ("Pin 3 Activado");     // Responde "Pin digital 4 Activado"
  digitalWrite(4, HIGH);                 // Enciende "Pin Digital 4"
  break;                                 // Finaliza el Case

  case '4':                              // Si recibe un "4"
  Serial.println ("Pin 4 Activado");     // Responde "Pin Digital 5 Activado"
  digitalWrite(5, HIGH);                 // Enciende "Pin Digital 5"
  break;                                 // Finaliza el Case

  case '5':                              // Si recibe un "5"
  Serial.println ("Pin 1 Desactivado");  // Responde "Pin Digital 2 Desactivado"
  digitalWrite(2, LOW);                  // Apaga "Pin Digital 2"
  break;                                 // Finaliza el Case

  case '6':                               // Si recibe un "6"
  Serial.println ("Pin 2 Desactivado");   // Responde "Pin Digital 3 Desactivado"
   digitalWrite(3, LOW);                  // Apaga "Pin Digital 3" 
  break;                                  // Finaliza el Case

  case '7':                                // Si recibe un "7"
  Serial.println ("Pin 3 Desactivado");    // Responde "Pin Digital 4 Desactivado"
   digitalWrite(4, LOW);                   // Apaga "Pin Digital 4"
  break;                                   // Finaliza el Case

  case '8':                                // Si recibe un "8"
  Serial.println ("Pin 4 Desactivado");    // Responde "Pin Digital 5 Desactivado"
   digitalWrite(5, LOW);                   // Apaga "Pin 5"
  break;                                   // Finaliza el Case

  
/*De esta manera podemos activar o desactivar los todos los pines del arduino, asignándoles una pulsación a través del monitor serial. 
 * Determinando numero o carácter o lo que queramos por ejemplo: 
 * Si la variable "Val" la convertimos en un string podrían ser palabras.
 * También tendríamos la posibilidad de crear nuevas variables, de donde por ejemplo leeríamos valores de sensores y o los activariamos o no en función
 * de nuestros desarrollos. Solo es cuestión de echarle imaginación.
 */
 
}

}

Os agradezco toda la ayuda que dais y acepto sugerencias para el proyecto.
También me quiero disculpar en caso de no haber posteado bien ya que es la primera vez que lo hago y si no entendéis algo hacedme lo saber ya que no siempre me explico bien.
Un saludo y muchas gracias.