Recibe nrf24l01 rampa strobo

Hola a todos.

Ya estoy aqui con mi proyecto de RC camion, estoy intentando poner el codigo que me propuso el Sr.RIG
que funciona en un Sketch bien, pero ahora lo estoy pasando a dos osea a transmisor y receptor nrf24l01
He encontrado estos Sketch que me funcionan bien con los servos y motores, pero al ponerle la rampa y
strobo no funciona, los servos y motores los tengo funcionado en otro Sketch para luego unirlos todos en
uno (1 transmisor y 1 receptor), los Sketch son de esta web https://howtomechatronics.com

codigo Transmisor:

//transmisor
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>


               // Define las entradas digitales.
#define jB1 0  // Joystick boton 1
#define jB2 1  // Joystick boton 2
#define t1 2   // Interruptor de palanca 1
#define t2 3   // Interruptor de palanca 1
#define b1 4   // Boton 1
#define b2 5   // Boton 2
#define b3 6   // Boton 3
#define b4 7   // Boton 4

RF24 radio(9,10);   
const byte address[6] = "00001"; 

                                // El tamaño máximo de esta estructura es de 32 bytes - NRF24L01 límite de búfer
struct Data_Package {
  byte j1PotX;                  // joystick 1
  byte j1PotY;                  // joystick 1
  byte j1Button;                // joystick  boton 1
  byte j2PotX;                  // joystick 2
  byte j2PotY;                  // joystick 2 
  byte j2Button;                // joystick  boton 2
  byte j3PotX;                  // joystick 3
  byte j3PotY;                  // joystick 3
  byte pot1;                    // potenciometro 1 o joystick 3
  byte pot2;                    // potenciometro 2 o joystick 3
  byte tSwitch1;                // Interruptor de palanca 1
  byte tSwitch2;                // Interruptor de palanca 2
  byte button1;                 // Boton 1
  byte button2;                 // Boton 2
  byte button3;                 // Boton 3
  byte button4;                 // Boton 4
};

Data_Package data;              //Crear una variable con la estructura anterior.

void setup() {
  Serial.begin(9600);
   
                                // Define la comunicación por radio.
  radio.begin();
  radio.openWritingPipe(address);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_LOW);
  
                                // Activa las resistencias pull-up internas de Arduino.
  pinMode(jB1, INPUT_PULLUP);   // Joystick boton 1
  pinMode(jB2, INPUT_PULLUP);   // Joystick boton 2
  pinMode(t1, INPUT_PULLUP);    // Interruptor de palanca 1
  pinMode(t2, INPUT_PULLUP);    // Interruptor de palanca 2
  pinMode(b1, INPUT_PULLUP);    // Boton 1
  pinMode(b2, INPUT_PULLUP);    // Boton 2
  pinMode(b3, INPUT_PULLUP);    // Boton 3
  pinMode(b4, INPUT_PULLUP);    // Boton 4
  
                                // Establecer valores iniciales predeterminados
  
  data.j1PotX = 127;            // Valores de 0 a 255. Cuando el Joystick está en posición de reposo,                        
  data.j1PotY = 127;            // El valor está en el medio, o 127.
  data.j2PotX = 127;            // En realidad mapeamos el valor del pozo de 0 a 1023 a 0 a 255 porque ese es un valor BYTE
  data.j2PotY = 127;
  data.j1Button = 1;
  data.j2Button = 1;
  data.j3PotX = 127;
  data.j3PotY = 127;
  data.pot1 = 1;
  data.pot2 = 1;
  data.tSwitch1 = 1;
  data.tSwitch2 = 1;
  data.button1 = 1;
  data.button2 = 1;
  data.button3 = 1;
  data.button4 = 1;
}
void loop() {
                                                      // Lee todas las entradas analógicas y asignelas a un valor de byte
  data.j1PotX = map(analogRead(A0), 0, 1023, 0, 255); // Convierta el valor de lectura analógica de 0 a 1023 en un valor BYTE de 0 a 255
  data.j1PotY = map(analogRead(A1), 0, 1023, 0, 255);
  data.j2PotX = map(analogRead(A2), 0, 1023, 0, 255);
  data.j2PotY = map(analogRead(A3), 0, 1023, 0, 255);
  data.j3PotX = map(analogRead(A4), 0, 1023, 0, 255);
  data.j3PotY = map(analogRead(A5), 0, 1023, 0, 255);
  data.pot1 = map(analogRead(A6), 0, 1023, 0, 255);
  data.pot2 = map(analogRead(A7), 0, 1023, 0, 255);
                                                      // Lee todas las entradas digitales
  data.j1Button = digitalRead(jB1);                   // Joystick boton 1
  data.j2Button = digitalRead(jB2);                   // Joystick boton 2
  data.tSwitch1 = digitalRead(t1);                    // Interruptor de palanca 1
  data.tSwitch2 = digitalRead(t2);                    // Interruptor de palanca 2
  data.button1 = digitalRead(b1);                     // Boton 1
  data.button2 = digitalRead(b2);                     // Boton 2
  data.button3 = digitalRead(b3);                     // Boton 3
  data.button4 = digitalRead(b4);                     // Boton 4
                                                      // Si el interruptor de palanca 1 está encendido
  if (digitalRead(t1) == 0) {
    
  }
                                                     // Envia todos los datos de la estructura al receptor.
  radio.write(&data, sizeof(Data_Package));
 
}

Aqui pongo el receptor que me da error al compilarlo, quiero que funcione con “button1 y button2” hay algo que falla y no se que puede ser, gracias

Da este “error” = ‘button1’ was not declared in this scope
Da este “error” = ‘button2’ was not declared in this scope

P.D. Lo he puesto en un segundo post porque habia demasiados caracteres

//recive prueva NRF24L01 Rampa Strobo
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

Servo servo1;

RF24 radio(9,10);                      // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;
int pos = 0;                           // Posicion del servo que arranque en (0) 
int estadoLed;                         // guarda el estado del led (encendido o apagado)
int estadoLed1;                        // guarda el estado del led (encendido o apagado)
int periodo = 100;                     // tiempo que esta el LED en alto y bajo
int periodo1 = 50;                     // tiempo que esta el LED en alto y bajo
unsigned long tiempoAnterior = 0;      // guarda tiempo de referencia para comparar
unsigned long tiempoAnterior1 = 0;     // guarda tiempo de referencia para comparar
unsigned long pausa;

struct Data_Package {
  byte j1PotX;
  byte j1PotY;
  byte j1Button;
  byte j2PotX;
  byte j2PotY;
  byte j2Button;
  byte j3PotX;
  byte j3PotY;
  byte pot1;
  byte pot2;
  byte tSwitch1;
  byte tSwitch2;
  byte button1;
  byte button2;
  byte button3;
  byte button4;
};

Data_Package data;                              //Crear una variable con la estructura anterior.

void setup() 
{
    
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_LOW);
  radio.startListening();                       //  Establecer el módulo como receptor.
  resetData();
  servo1.attach(3);                             //configura la salida del servo
  pinMode(5,OUTPUT);                            //configura la salida del led
  pinMode(6,OUTPUT);                            //configura la salida del led
  servo1.write(0);
  
}
void loop() {
                                                // Compruebe si hay datos para recibir
  if (radio.available()) {
    radio.read(&data, sizeof(Data_Package));    // Lea todos los datos y guárdelos en la estructura de 'datos'
    lastReceiveTime = millis();                 // En este momento hemos recibido los datos.
  }
                                                // Compruebe si seguimos recibiendo datos.
                                                // o si tenemos una conexión entre los dos módulos.
  currentTime = millis();
  if ( currentTime - lastReceiveTime > 1000 ) { // Si la hora actual es más de 1 segundo desde que recibimos los últimos datos,
                                                // significa que hemos perdido la conexión
    
    resetData();                                // Si se pierde la conexión, reinicie los datos. 
                                                // Evita comportamientos no deseados, por ejemplo, 
                                                // Si un camión no tripulado tiene acelerador y perdemos la conexión,
                                                // Puede seguir circulando a menos que restablecemos los valores
  }
  //-----------Rampa Strobo------------------
  if(digitalRead(button1) && pos<=180)          // Da este "error" = 'button1' was not declared in this scope
  {
   if(millis()-pausa >= 10UL){
     pos++;
     pausa=millis();
   }
   servo1.write(pos);

  if(millis()>tiempoAnterior+periodo){          //si ha transcurrido el periodo programado
    estadoLed=!estadoLed;                       //cambia el estado del led cada 10ms
    digitalWrite(5,estadoLed);                  //actualiza el estado del led
    tiempoAnterior=millis();                    //guarda el tiempo actual como referencia
  }


  if(millis()>tiempoAnterior1+periodo1){        //si ha transcurrido el periodo programado
    estadoLed1=!estadoLed1;                     //cambia el estado del led cada 10ms
    digitalWrite(6,estadoLed1);                 //actualiza el estado del led
    tiempoAnterior1=millis();                   //guarda el tiempo actual como referencia
  }

}
else{
  digitalWrite(6,LOW);
  digitalWrite(5, LOW);
}


if(digitalRead(button2) && pos >=0)            // Da este "error" = 'button2' was not declared in this scope
{

  if(millis()-pausa >= 10UL){
   pos--;
   pausa=millis();
 }
 servo1.write(pos);      
}  
 //----------Fin rampa strobo---------------
 
}  
  


void resetData() {
  // Reinicie los valores cuando no haya conexión de radio - Establezca los valores predeterminados iniciales
  data.j1PotX = 127;
  data.j1PotY = 127;
  data.j2PotX = 127;
  data.j2PotY = 127;
  data.j1Button = 1;
  data.j2Button = 1;
  data.j3PotX = 127;
  data.j3PotY = 127;
  data.pot1 = 1;
  data.pot2 = 1;
  data.tSwitch1 = 1;
  data.tSwitch2 = 1;
  data.button1 = 1;
  data.button2 = 1;
  data.button3 = 1;
  data.button4 = 1;
}

Y cual es el error?

EDITO:

Tus errores estan en no haber definido pines para button1 y button2.

Hola surbyte te refieres a esto "#define button1 (5); #define button2 (6)," despues de Servo servo1; o tengo que ponerlo en otro sitio

Gracias

eso que pones esta mal o eso creo

#define button1  (5); 
#define button2  (6)

debe ser

#define button1  5; 
#define button2  6

Otra cosa mas.
El hecho de usar button1 genera un problema con el button1 de la estructura asi que ponle algo como

PinButton1 y PinButton2 y quedará asi

#define PinButton1  5; 
#define PinButton2  6

y en los digitalRead(PinButton1) lo cambias a esto.

Hola surbyte gracias por ayudarme pero sigue sin funcionar, pero si compila sin dar errores
he puesto esto asin

 [Servo servo1;
#define PinButton1 5
#define PinButton2 6

servo1.attach(3);
pinMode(PinButton1,OUTPUT);            
pinMode(PinButton2,OUTPUT);
         
if(digitalRead(PinButton1)
if(digitalRead(PinButton1) ]

Te envié privado para que edites cada linea de tu hilo que no tenga etiquetas.
Hay algunos post que los he editado yo, pero debes saber que estas cometiendo faltas a las normas.

Yo respondí para que no de errores.
Que funcione es otro tema.

Sabes si se comunican? Partiste del ejemplo básico y lo fuiste modificando?

Ejemplo en tu transmisor tienes esto para qué

if (digitalRead(t1) == 0) {
    
  }

y porque cuando tomas el tamaño lo haces sobre la estructura, debe ser sobre la variable

radio.write(&data, sizeof(data));

haz lo mismo en el receptor

radio.read(&data, sizeof(Data_Package));

por

radio.read(&data, sizeof(data));

Otro error y perdona porque tu código al no estar identado (sangría) me cuesta ver los problemas hasta que lo organizo a mi gusto.
Jamás habilites pines para una cosa u otra sin ponerle etiquetas porque como veras en tu receptor tienes ahora

#define PinButton1 5
#define PinButton2 6

y luego en el setup

pinMode(5,OUTPUT);                            //configura la salida del led
  pinMode(6,OUTPUT);                            //configura la salida del led
pinMode(PinButton1,OUTPUT);            
pinMode(PinButton2,OUTPUT);

que es esto.. no se trata de entradas?

Hola, ya he leido su mensaje y le pido disculpas por mis errores.
He modificado segun su consejo pero sigue sin funcionar he cambiado las lineas 8,58,66
Cuando yo pulse el “button1” del transmisor el receptor lo recive por “button1” (cierto ?)
Entonces tiene que mover el servo1 lentamente de 0º a 180º y encender el strobo hasta que pulse
el “button2” y vuelva de la posicion de 180º a 0º y se apague el strobo.
Lee el button1 “digitalRead.button1” y la salida “digitalWrite (5,estadoLed)” y el pinMode tendria que ser
OUTPUT, creo yo no?
Donde pone define tendria que poner Led en vez de PinButton1,creo yo no?

referente a digitalRead(t1) esto viene de “serie” y no se que funcion tiene,

Gracias por su colaboracion pero sige sin funcionar y he hecho varias pruevas

//recive prueva NRF24L01 Rampa Strobo
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

Servo servo1;
#define PinButton1 5
#define PinButton2 6


RF24 radio(9,10);                      // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;
int pos = 0;                           // Posicion del servo que arranque en (0) 
int estadoLed;                         // guarda el estado del led (encendido o apagado)
int estadoLed1;                        // guarda el estado del led (encendido o apagado)
int periodo = 100;                     // tiempo que esta el LED en alto y bajo
int periodo1 = 50;                     // tiempo que esta el LED en alto y bajo

unsigned long tiempoAnterior = 0;      // guarda tiempo de referencia para comparar
unsigned long tiempoAnterior1 = 0;     // guarda tiempo de referencia para comparar
unsigned long pausa;

struct Data_Package {
  byte j1PotX;
  byte j1PotY;
  byte j1Button;
  byte j2PotX;
  byte j2PotY;
  byte j2Button;
  byte j3PotX;
  byte j3PotY;
  byte pot1;
  byte pot2;
  byte tSwitch1;
  byte tSwitch2;
  byte button1;
  byte button2;
  byte button3;
  byte button4;
};

Data_Package data;                              //Crear una variable con la estructura anterior.

void setup() 
{
    
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_LOW);
  radio.startListening();                       //  Establecer el módulo como receptor.
  resetData();
  servo1.attach(3);                             //configura la salida del servo
  pinMode(PinButton1,INPUT);                            //configura la salida del led (output)
  pinMode(PinButton2,INPUT);                            //configura la salida del led
  servo1.write(0);
  
}
void loop() {
                                                // Compruebe si hay datos para recibir
  if (radio.available()) {
    radio.read(&data, sizeof(data));  //sizeof(Data_Package)  
                                                // Lea todos los datos y guárdelos en la estructura de 'datos'
    lastReceiveTime = millis();                 // En este momento hemos recibido los datos.
  }
                                                // Compruebe si seguimos recibiendo datos.
                                                // o si tenemos una conexión entre los dos módulos.
  currentTime = millis();
  if ( currentTime - lastReceiveTime > 1000 ) { // Si la hora actual es más de 1 segundo desde que recibimos los últimos datos,
                                                // significa que hemos perdido la conexión
    
    resetData();                                // Si se pierde la conexión, reinicie los datos. 
                                                // Evita comportamientos no deseados, por ejemplo, 
                                                // Si un camión no tripulado tiene acelerador y perdemos la conexión,
                                                // Puede seguir circulando a menos que restablecemos los valores
  }
  //-----------Rampa Strobo------------------
  if(digitalRead(PinButton1) && pos<=180)          // Da este "error" = 'button1' was not declared in this scope
  {
   if(millis()-pausa >= 10UL){
     pos++;
     pausa=millis();
   }
   servo1.write(pos);

  if(millis()>tiempoAnterior+periodo){          //si ha transcurrido el periodo programado
    estadoLed=!estadoLed;                       //cambia el estado del led cada 10ms
    digitalWrite(5,estadoLed);                  //actualiza el estado del led
    tiempoAnterior=millis();                    //guarda el tiempo actual como referencia
  }


  if(millis()>tiempoAnterior1+periodo1){        //si ha transcurrido el periodo programado
    estadoLed1=!estadoLed1;                     //cambia el estado del led cada 10ms
    digitalWrite(6,estadoLed1);                 //actualiza el estado del led
    tiempoAnterior1=millis();                   //guarda el tiempo actual como referencia
  }

}
else{
  digitalWrite(6,LOW);
  digitalWrite(5, LOW);
}


if(digitalRead(PinButton2) && pos >=0)            // Da este "error" = 'button2' was not declared in this scope
{

  if(millis()-pausa >= 10UL){
   pos--;
   pausa=millis();
 }
 servo1.write(pos);      
}  
 //----------Fin rampa strobo---------------
 
}  
  


void resetData() {
  // Reinicie los valores cuando no haya conexión de radio - Establezca los valores predeterminados iniciales
  data.j1PotX = 127;
  data.j1PotY = 127;
  data.j2PotX = 127;
  data.j2PotY = 127;
  data.j1Button = 1;
  data.j2Button = 1;
  data.j3PotX = 127;
  data.j3PotY = 127;
  data.pot1 = 1;
  data.pot2 = 1;
  data.tSwitch1 = 1;
  data.tSwitch2 = 1;
  data.button1 = 1;
  data.button2 = 1;
  data.button3 = 1;
  data.button4 = 1;
}

Hola a todos, he echo varios cambios y funciona bastante mal y no es lo que quiero, haber si partiendo de este codigo se consige lo que yo quiero, lo del “mal” es que cuando lo conecto empieza a funcionar solo, me
explico los leds funciona como strobo pero no se paran y el servo funciona a pequeños golpes de 0º a 180º
y se para y luego empieza a tembar solo, tengo que pararlo desconectando todo.

P.D. al Sr.Surbyte le pido perdon por los fallos que he tenido en este hilo y modifique algunos

Aqui pongo el nuevo Recibe code

//recibe prueva NRF24L01 Rampa Strobo
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

Servo servo1;
int servo1_Value = 0;

int Led = 5;
int Led1 = 6;
int PinButton1;
int PinButton2;
 

RF24 radio(9,10);                      // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;
int pos = 0;                           // Posicion del servo que arranque en (0) 
int estadoLed;                         // guarda el estado del led (encendido o apagado)
int estadoLed1;                        // guarda el estado del led (encendido o apagado)
int periodo = 100;                     // tiempo que esta el LED en alto y bajo
int periodo1 = 50;                     // tiempo que esta el LED en alto y bajo


unsigned long tiempoAnterior = 0;      // guarda tiempo de referencia para comparar
unsigned long tiempoAnterior1 = 0;     // guarda tiempo de referencia para comparar
unsigned long pausa;

struct Data_Package {
  byte j1PotX;
  byte j1PotY;
  byte j1Button;
  byte j2PotX;
  byte j2PotY;
  byte j2Button;
  byte j3PotX;
  byte j3PotY;
  byte pot1;
  byte pot2;
  byte tSwitch1;
  byte tSwitch2;
  byte button1;
  byte button2;
  byte button3;
  byte button4;
};

Data_Package data;                              //Crear una variable con la estructura anterior.

void setup() 
{
  pinMode(Led,OUTPUT);                            //configura la salida del led (output)
  pinMode(Led1,OUTPUT);                           //configura la salida del led
    
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_LOW);
  radio.startListening();                       //  Establecer el módulo como receptor.
  resetData();
  servo1.attach(3);                             //configura la salida del servo
                             
  servo1.write(0);
  
}
void loop() {
                                                // Compruebe si hay datos para recibir
  if (radio.available()) {
    radio.read(&data, sizeof(Data_Package));            //sizeof(data)  
                                                // Lea todos los datos y guárdelos en la estructura de 'datos'
    lastReceiveTime = millis();                 // En este momento hemos recibido los datos.
  }
                                                // Compruebe si seguimos recibiendo datos.
                                                // o si tenemos una conexión entre los dos módulos.
  currentTime = millis();
  if ( currentTime - lastReceiveTime > 1000 ) { // Si la hora actual es más de 1 segundo desde que recibimos los últimos datos,
                                                // significa que hemos perdido la conexión
    
    resetData();                                // Si se pierde la conexión, reinicie los datos. 
                                                // Si un camión no tripulado tiene acelerador y perdemos la conexión,
                                                // Puede seguir circulando a menos que restablecemos los valores
  }
  //-----------Rampa Strobo------------------
  if(digitalRead(PinButton1) && pos<=180)          
  {
   if(millis()-pausa >= 10UL){
     pos++;
     pausa=millis();
   }
   servo1.write(pos);

  if(millis()>tiempoAnterior+periodo){          //si ha transcurrido el periodo programado
    estadoLed=!estadoLed;                       //cambia el estado del led cada 10ms
    digitalWrite(5,estadoLed);                  //actualiza el estado del led
    tiempoAnterior=millis();                    //guarda el tiempo actual como referencia
  }


  if(millis()>tiempoAnterior1+periodo1){        //si ha transcurrido el periodo programado
    estadoLed1=!estadoLed1;                     //cambia el estado del led cada 10ms
    digitalWrite(6,estadoLed1);                 //actualiza el estado del led
    tiempoAnterior1=millis();                   //guarda el tiempo actual como referencia
  }

}
else{
  digitalWrite(6,LOW);
  digitalWrite(5, LOW);
}


if(digitalRead(PinButton2) && pos >=0)            
{

  if(millis()-pausa >= 10UL){
   pos--;
   pausa=millis();
 }
 servo1.write(pos);      
}  
 //----------Fin rampa strobo---------------
 
}  
  


void resetData() {
  // Reinicie los valores cuando no haya conexión de radio - Establezca los valores predeterminados iniciales
  data.j1PotX = 127;
  data.j1PotY = 127;
  data.j2PotX = 127;
  data.j2PotY = 127;
  data.j1Button = 1;
  data.j2Button = 1;
  data.j3PotX = 127;
  data.j3PotY = 127;
  data.pot1 = 1;
  data.pot2 = 1;
  data.tSwitch1 = 1;
  data.tSwitch2 = 1;
  data.button1 = 1;
  data.button2 = 1;
  data.button3 = 1;
  data.button4 = 1;
}

Empieza por corregir esto

digitalWrite(5,estadoLed); 
digitalWrite(6,estadoLed1);

si usas 5 y 6 como entradas no puedes usarlo luego como salidas aunque como no estan definidas no se que harán realmente. pero quita ese 5 y 6 y cambialos por 7 y 8 por ejemplo y mueve los leds a esos pines.

Por todos lados en tu código tienes esa ambigüedad de definir 5 y 6 como entradas y pretender usarlos como salidas.

Y en el reciBe (porque recibir es con B) tienes esta falla

int Led = 5;
int Led1 = 6;
int PinButton1;
int PinButton2;

Los pines PinButton1y2 no estan definidos o mejor dicho lo estan pero con valor de pin 0 (RX)
De modo que cuando haces esto

if(digitalRead(PinButton2) && pos >=0)

lees el pin 0 y no el que supones.

Hola, Ya modifique el "recibe" tenias razon,

referente a "&& pos >=0" es la posicion de arranque del servo que es 0º y termina en 180º,

he cambiado los pines de los led a 7,8 y actuan igual que en el 5,6,

a los PinButtonX le puse 4,5. Ahora empieza todo apagado pero sige sin funcionar,

Bueno de vez en cuando se pone en marcha los led pero el servo no se mueve,
ya no se que hacer lo tendre que dejar y buscar otro sistema lo malo es que los servos y motores si me funcionan en el transmisor y receptor que tengo que si funcionan bien,

Gracias seguire un poco mas

Porque no haces lo mas simple del mundo…
Intenta ver que el transmitor transmite y que el receptor recibe. Sin Servos, sin botones que haya que pulsar para ver cambios.
Eso es básico cuando estas resolviendo problemas, no estar metido en 5 posibles responsables y no sabes cual es cual.
Por eso cuando inicias algo, se comienza desde lo básico… transmisor y receptor ejemplos. Funcionan bueno, paso lo siguiente.
Agrego un pulsador que prende un led, funciona, okay, paso a lo siguiente… otro pulsador que prende otro led… funciona… y asi.

En cambio te metiste solo en un laberinto y estas perdido.

Copia ambos codigos ysimplificalos y verifica que transmites ALGO y reciben ALGO.

Hola, voy a empezar de 0, haber si consigo que funcione, el transmisor funciona bien porque lo estoy haciendo funcionar con otro codigo de servos y motores, aqui voy a poner el receptor de origen que esta solo la parte principal. Para añadir lo que “quiera poner”

Cuando te refieres a probar es hacer pruebas con un led o poner un print para saber que pin lo recibe?

Con un led seria con “#define” o con “int” y si es con print como hacerlo.

El transmisor es el del primer post, porque es que tiene que enviar los datos al receptor tal como lo hace con los servos.

// receptor
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9,10);   // nRF24L01 (CE, CSN)
const byte address[6] = "00001";

unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;

// Max size of this struct is 32 bytes - NRF24L01 buffer limit
struct Data_Package {
  byte j1PotX;
  byte j1PotY;
  byte j1Button;
  byte j2PotX;
  byte j2PotY;
  byte j2Button;
  byte pot1;
  byte pot2;
  byte tSwitch1;
  byte tSwitch2;
  byte button1;
  byte button2;
  byte button3;
  byte button4;
};

Data_Package data; //Create a variable with the above structure

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_LOW);
  radio.startListening(); //  Set the module as receiver
  resetData();
}
void loop() {
  // Check whether there is data to be received
  if (radio.available()) {
    radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure
    lastReceiveTime = millis(); // At this moment we have received the data
  }
  // Check whether we keep receving data, or we have a connection between the two modules
  currentTime = millis();
  if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection
    resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone has a throttle up and we lose connection, it can keep flying unless we reset the values
  }
  
}

void resetData() {
  // Reset the values when there is no radio connection - Set initial default values
  data.j1PotX = 127;
  data.j1PotY = 127;
  data.j2PotX = 127;
  data.j2PotY = 127;
  data.j1Button = 1;
  data.j2Button = 1;
  data.pot1 = 1;
  data.pot2 = 1;
  data.tSwitch1 = 1;
  data.tSwitch2 = 1;
  data.button1 = 1;
  data.button2 = 1;
  data.button3 = 1;
  data.button4 = 1;
}

Cuando te refieres a probar es hacer pruebas con un led o poner un print para saber que pin lo recibe?

Cualquiera de los dos o los dos. Lo que te resulte mas cómodo pero recuerda pocas variables, saber si funciona o no funciona. Y luego la transmisión no se toca mas y se avanza con otras cosas.

Hola, ya modifique el codigo y añadido las siguientes lineas int 31,32, bool 33,34 y pinMode 38,39
el programa va desde la 61 hasta la 85 y funciona.

Como hacerlo en toggle, encender y apagar con el mismo boton.

Seguire probando el (toggle) a ver que sale y gracias por su ayuda en sugerirme empezar desde 0

Los pines de salidas ya los modificare cuando lo junte con los servos y motores

Aqui pongo el codigo que supongo se podra mejorar pero de momento funciona y a por otro pasito corto
pero firme.

Saludos

// receptor leds
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(9,10);   // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;

// Max size of this struct is 32 bytes - NRF24L01 buffer limit
struct Data_Package {
  byte j1PotX;
  byte j1PotY;
  byte j1Button;
  byte j2PotX;
  byte j2PotY;
  byte j2Button;
  byte pot1;
  byte pot2;
  byte tSwitch1;
  byte tSwitch2;
  byte button1;    // enciende momentaneo
  byte button2;    // enciende momentaneo
  byte button3;    // enciende toggle (aun no) encender apagar con mismo boton
  byte button4;    // enciende toggle (aun no)
};

Data_Package data; //Create a variable with the above structure

int led = 5;
int led1 = 6;
bool encender_state = false;
bool encender1_state = false;

void setup() {

  pinMode(led, OUTPUT);
  pinMode(led1, OUTPUT);
  
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_LOW);
  radio.startListening(); //  Set the module as receiver
  resetData();
}
void loop() {
  // Check whether there is data to be received
  if (radio.available()) {
    radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure
    lastReceiveTime = millis(); // At this moment we have received the data
  }
  // Check whether we keep receving data, or we have a connection between the two modules
  currentTime = millis();
  if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection
    resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone has a throttle up and we lose connection, it can keep flying unless we reset the values
  }
  //--------enciende led momentaneo--------
  if(data.button1 == 1 &&  !encender_state)
  {
  digitalWrite (led,HIGH);
  encender_state = true;
  digitalWrite (led, LOW);
  }
  if(data.button1 == 0)
  {
    digitalWrite (led,HIGH);
    encender_state = false;
  }
  //-------enciende led1 momentaneo-----------------
  if(data.button2 == 1 && !encender1_state)
  {
  digitalWrite (led1,HIGH);
  encender1_state = true;
  digitalWrite (led1, LOW);
  }
  if(data.button2 == 0)
  {
    digitalWrite (led1,HIGH);
    encender1_state = false;
  }
  //-------fin encender led/led1-----------
}

void resetData() {
  // Reset the values when there is no radio connection - Set initial default values
  data.j1PotX = 127;
  data.j1PotY = 127;
  data.j2PotX = 127;
  data.j2PotY = 127;
  data.j1Button = 1;
  data.j2Button = 1;
  data.pot1 = 1;
  data.pot2 = 1;
  data.tSwitch1 = 1;
  data.tSwitch2 = 1;
  data.button1 = 1;
  data.button2 = 1;
  data.button3 = 1;
  data.button4 = 1;
}

Y veo que sigues poniendo

radio.read(&data, sizeof(Data_Package));

y que pasó con lo que sugerí post anteriores?

Hola, Surbyte ya cambie " Data_Package" por “data” en el RX pero no en el TX y funciona igual de bien, no se para que sirve este cambio?

He agregado “rampa y strobo” en el RX y funciona bien junto con lo anterior servo y leds momentaneos.

Ahora voy a ponerme con "encender y apagar led con mismo boton (toggle) " pero tengo una duda todo lo que he visto hay que modificar el TX con “encender, anterior, estado” y en el RX pocos cambios.

Se puede hacer lo mismo pero que solo se tenga que modificar el RX porque creo que modificar el TX
me va traer mas problemas de los que ya tengo.

Aqui pongo el nuevo codigo.

// receptor leds,servos,strobo
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

RF24 radio(9,10);   // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;

Servo servo1;
Servo servo2;

int servo2Value;
int pos = 0;
int estadoLed;                              //guarda el estado del led (encendido o apagado)
int estadoLed1;                             //guarda el estado del led (encendido o apagado)
int periodo = 100;                          // tiempo que esta el LED en alto y bajo
int periodo1 = 50;
unsigned long tiempoAnterior = 0;           //guarda tiempo de referencia para comparar
unsigned long tiempoAnterior1 = 0;          //guarda tiempo de referencia para comparar
unsigned long pausa; 

// Max size of this struct is 32 bytes - NRF24L01 buffer limit
struct Data_Package {
  byte j1PotX;      //servo direccion
  byte j1PotY;
  byte j1Button;
  byte j2PotX;
  byte j2PotY;
  byte j2Button;
  byte pot1;
  byte pot2;
  byte tSwitch1;
  byte tSwitch2;
  byte button1;    // enciende momentaneo
  byte button2;    // enciende momentaneo
  byte button3;    // baja Rampa y enciende strobo y mueve el servo hasta posicion 180º  luego para y apaga strobo
  byte button4;    // sube rampa del servo
};

Data_Package data; //Create a variable with the above structure

int led = 7;
int led1 = 8;
bool encender_state = false;
bool encender1_state = false;

void setup() {

  pinMode(led, OUTPUT);                 //configura la salida led Blanco momentaneo
  pinMode(led1, OUTPUT);                //configura la salida led Blanco momentaneo
  pinMode(5,OUTPUT);                    //configura la salida led Ambar  strobo
  pinMode(6,OUTPUT);                    //configura la salida led Ambar  strobo
  servo1.write(0);
  
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_LOW);
  radio.startListening();                //  Set the module as receiver
  resetData();
  //--------------
  servo2.attach(14);                     //servo direccion
  servo1.attach(3);                      //servo rampa
  
}
void loop() {
                                         // Check whether there is data to be received
  if (radio.available()) {
    radio.read(&data, sizeof(data));     // Data_Package Read the whole data and store it into the 'data' structure
    lastReceiveTime = millis();          // At this moment we have received the data
  }
                                         // Check whether we keep receving data, or we have a connection between the two modules
  currentTime = millis();
  if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection
    resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone has a throttle up and we lose connection, it can keep flying unless we reset the values
  }
  //----------------servo------------------
  servo2Value = map(data.j1PotX, 0, 255, 0, 180);
  servo2.write(servo2Value);
  //--------------fin servo----------------
  
  //--------enciende led momentaneo--------
  if(data.button1 == 1 &&  !encender_state)
  {
  digitalWrite (led,HIGH);
  encender_state = true;
  digitalWrite (led, LOW);
  }
  if(data.button1 == 0)
  {
    digitalWrite (led,HIGH);
    encender_state = false;
  }
  //-------enciende led1 momentaneo--------
  if(data.button2 == 1 && !encender1_state)
  {
  digitalWrite (led1,HIGH);
  encender1_state = true;
  digitalWrite (led1, LOW);
  }
  if(data.button2 == 0)
  {
    digitalWrite (led1,HIGH);
    encender1_state = false;
  }
    //-------fin encender led/led1---------
    
    //----------rampa strobo---------------
    if(data.button3 == 0 && pos<=180)
  {
   if(millis()-pausa >= 10UL){
     pos++;
     pausa=millis();
   }
   servo1.write(pos);

  if(millis()>tiempoAnterior+periodo){          //si ha transcurrido el periodo programado
    estadoLed=!estadoLed;                       //cambia el estado del led cada 10ms
    digitalWrite(5,estadoLed);                  //actualiza el estado del led
    tiempoAnterior=millis();                    //guarda el tiempo actual como referencia
  }


  if(millis()>tiempoAnterior1+periodo1){        //si ha transcurrido el periodo programado
    estadoLed1=!estadoLed1;                     //cambia el estado del led cada 10ms
    digitalWrite(6,estadoLed1);                 //actualiza el estado del led
    tiempoAnterior1=millis();                   //guarda el tiempo actual como referencia
  }

}
else{
  digitalWrite(6, LOW);
  digitalWrite(5, LOW);
}


if(data.button4 == 0 && pos >=0)
{

  if(millis()-pausa >= 10UL){
   pos--;
   pausa=millis();
 }
 servo1.write(pos);      
}
//-------fin rampa y strobo----------
}

// el void resetData lo pase a otra pestaña en el proximo post lo quitare de aqui para tener mas espacio

/*void resetData() {
  // Reset the values when there is no radio connection - Set initial default values
  data.j1PotX = 127;
  data.j1PotY = 127;
  data.j2PotX = 127;
  data.j2PotY = 127;
  data.j1Button = 1;
  data.j2Button = 1;
  data.pot1 = 1;
  data.pot2 = 1;
  data.tSwitch1 = 1;
  data.tSwitch2 = 1;
  data.button1 = 1;
  data.button2 = 1;
  data.button3 = 1;
  data.button4 = 1;
}
*/