Ayuda con MODULO NRF24L01 4 SERVOS Y 4 POTENCIOMETROS

Hola Amigos, este es mi ultimo recurso, ya he buscado la solucion de mi proyecto hasta debajo de la piedras y no hay caso, estoy trabajando en un proyecto con 2 arduinos y dos modulos NRF24L01 para mover 4 servos con cuatro potenciometros, podrian decirme cual es mi problema les pasare mis codigos pero los servos no trabajan independientemente quiero que cada uno se mueva de forma indeoendiente con cada potenciometro. les dejo el codigo.

RX

#include <Servo.h>
#include <SPI.h>
#include "RF24.h"
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int data;
int pos1;
int pos2;
int pos3;
int pos4;
void setup()
{
servo1.attach(3);
servo2.attach(7);
servo3.attach(5);
servo4.attach(6);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available())radio.read(msg, 1);
if (msg[0] <128 && msg[0] >-1)data = msg[0], pos1 = map(data, 10, 254, 7, 177),servo1.write(pos1);
if (msg[0] >127 && msg[0] <255)data = msg[0], pos2 = map(data, 10, 254, 9, 177),servo2.write(pos2);
if (msg[0] >127 && msg[0] <255)data = msg[0], pos3 = map(data, 10, 254, 9, 177),servo3.write(pos3);
if (msg[0] >127 && msg[0] <255)data = msg[0], pos4 = map(data, 10, 254, 9, 177),servo4.write(pos4);
}


TX

#include <SPI.h>
#include "RF24.h"
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int potpin_1 = A0;
int val_1;
int potpin_2 = A1;
int val_2;
int potpin_3= A2;
int val_3;
int potpin_4= A3;
int val_4;

void setup(void)
{
radio.begin();
radio.openWritingPipe(pipe);
Serial.begin(9600);
}
void loop()
{
val_1 = analogRead(potpin_1);
val_1 = map(val_1, 600, 800, 20, 180);
msg[0] = val_1;
radio.write(msg, 1);
Serial.print("Valor Val_1:");
Serial.println(val_1);
delay(2000);

val_2 = analogRead(potpin_2);
val_2 = map(val_2, 600, 800, 20, 180);
msg[0] = val_2;
radio.write(msg, 1);
Serial.print("Valor Val_2:");
Serial.println(val_2);
delay(2000);

val_3 = analogRead(potpin_3);
val_3 = map(val_3, 600, 800, 20, 180);
msg[0] = val_3;
radio.write(msg, 1);
Serial.print("Valor Val_3:");
Serial.println(val_3);
delay(2000);

val_4 = analogRead(potpin_4);
val_4 = map(val_4, 600, 800, 20, 180);
msg[0] = val_4;
radio.write(msg, 1);
Serial.print("Valor Val_4:");
Serial.println(val_4);
delay(2000);
}

Detalla un poco más tu problema, ¿la comunicación RF funciona?
Lo mejor en estos casos es ir probando el código por parte, primero los servos, luego el RF y finalmente todo junto.

Coméntanos ese detalle para poder ayudarte

PD: edita tu promer post y adjunta los códigos, con la etiqueta de código que tiene el símbolo de </>

Los delays del código tx, son un problema grave. Detienes el código 2 segundos después de cada lectura, de forma que una variación de posición en un potenciómetro, se demora 8 segundos !!!!!! y no entiendo la razón de que, en el código rx, la variable msg, sea un array de una sola posición.

Voy a detallar bien mi problema, soy muy novato en esto y no soy muy experto en programacion, aclarado esto, mi proyecto es una mano robotica de 4 servos, los cuales estan funcionando a la perfeccion con un solo arduino y 4 potenciometros, en este caso los potenciometros los he reemplazado por un ldr y una resistencia en serie y alimetados con 6vcc lo cual produce un divisor de tension, y del punto medio saco la variacion para las 4 entradas anlogicas de arduino, casi como un potenciometro.

la idea del ldr y el led es simular un flex sensor resistivo, yo los puse dentro de un tubo plaastico con un led en la punta y el ldr en la otra punta del tubo y al flxionar el tubo, pasa mas o menos luz y la resistencia varia.

esto esta funcionando sin problemas y via cable desde un guante al arduino. ahora he comenzado a eliminart los cables y pense poner 2 arduinos uno en la mano mecanica y otro sobre el guante comunicados por el modulo NRF24L01, HASTA AHI TODO PERFECTO.

utilizando estos codigos anteriores dos servos se mueven de maravilla pero al agrar el tercer servo en la programacion, todos se mueven juntos o erraticamente y ni contar cuando agrego el cuarto.
yo creo que mi codigo no esta correcto o tal vez sea un probelmas de librerias!! si necesitan un dato mas estoy aqui ... ya casi a punto de abandonar el proyecto escolar de este año.. muchas gracias por sus comentarios

este codigo no es mio lo baje de otro proyecto, para dos servos y funciona perfecto yo luego voy variando los angulos de giro de los servos y lo ajusto.
pero al agregar 2 servos mas y dos entradas analogicas mas todos funcionan juntos y no independientes.
les dejo el codigo para los dos servos, aclaro que estan como los baje, y no entiendo muy bien la parte del RX donde muestra los map pero funciona....gracias

Paso 3: Receiver sketch
#include <Servo.h>
#include <SPI.h>
#include "RF24.h"
Servo servo1;
Servo servo2;
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int data;
int pos;
void setup()
{
servo1.attach(3);
servo2.attach(7);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available())radio.read(msg, 1);
if (msg[0] <128 && msg[0] >-1)data = msg[0], pos = map(data, 0, 127, 7, 177),servo1.write(pos);
if (msg[0] >127 && msg[0] <255)data = msg[0], pos = map(data, 128, 254, 9, 177),servo2.write(pos);
}

Paso 4: Transmitter sketch
#include <SPI.h>
#include "RF24.h"
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int potpin_1 = A0;
int val_1;
int potpin_2 = A1;
int val_2;
void setup(void){
radio.begin();
radio.openWritingPipe(pipe);
}
void loop() {
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);
}

He simplificado un poco tu primer código y corregida la forma de recibir los datos,a demás renombré unas varaibles para la legibilidad.

TX

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

RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL; 

void setup(void){
  radio.begin();
  radio.openWritingPipe(pipe); 
  Serial.begin(9600);
}

void loop(){
  sendData(0);
  delay(2000);

  sendData(1);
  delay(2000);
  
  sendData(2);
  delay(2000);

  sendData(3);
  delay(2000);
}

void sendData(int analog_pin){
  bool send_status = false;
  int buffer;
  buffer = analogRead(analog_pin);
  buffer  = map(buffer, 600, 800, 20, 180);

  send_status   = radio.write(&buffer,sizeof(int));

  if(send_status)
    Serial.print("Valor enviado:");
    Serial.println(buffer);
  
}

RX

#include <Servo.h>
#include <SPI.h>
#include "RF24.h"

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL; 

int buffer; 
int pos1;
int pos2;
int pos3;
int pos4;

void setup(){
  Serial.begin(9600);
  servo1.attach(3); 
  servo2.attach(7);
  servo3.attach(5);
  servo4.attach(6);
  radio.begin();
  radio.openReadingPipe(1,pipe); 
  radio.startListening();
}

void loop(){
  if (radio.available()){
    radio.read(&buffer, radio.getDynamicPayloadSize());

    Serial.print("Recibido: "),
    Serial.println(buffer);

    if (buffer <128 && buffer >-1)   pos1 = map(buffer, 10, 254, 7, 177), servo1.write(pos1);
    if (buffer >127 && buffer <255)  pos2 = map(buffer, 10, 254, 9, 177), servo2.write(pos2);
    if (buffer >127 && buffer <255)  pos3 = map(buffer, 10, 254, 9, 177), servo3.write(pos3);
    if (buffer >127 && buffer <255)  pos4 = map(buffer, 10, 254, 9, 177), servo4.write(pos4);
  }
}

Por ahora seguiremos usando delays, he agregado un Serial.print para saber los datos que recibes y si estos son los que corresponden. Sería bueno ver esos datos.

haz las pruebas y me dices como te va

EDIT: He vuelto a modificar el código para eliminar el array del buffer

Perfecto que gran ayuda me dieron, lo voy a probar hoy mismo y pondre los datos que veo, realmente en estos momentos es cuando uno se da cuenta el valor que tienen las personas en ayudar... todos tenemos poco tiempo en esta vida pero estoy agradecido, por dedicarme tiempo en este problema que para mi es muy importante...gracias de verdad, gracias..... este es un gran foro....

bueno realizadas la pruebas con el TX Y EL MONITOR, puedo ver valores que van de 60 a 300 cada 2 segundos, pero el tx no produce movimientos en los servos, el proceso que hice fue caragar el TX en un ARDUINO y el RX en el otro, y observe el visor de puerto serial.

espero que esa sea la prueba o me falto algo?

Me confundí un poco con tu explicación, está el RX (Recive) y el TX(Transmite)

En el TX, puedes ver la información que va de 60 a 300 cada 2 segundos, pero el otro arduino no recibe nada, es eso?

Los parámetros de 60 a 300, están bien?

Perdon yo puse el TX para transmitir y el RX recive... el RX hace movimientos cada 2 segundos solo en un servo...lo que veo en el monitor serial lo estoy haciendo en el TX no en RX....
Los valores que veo son en el TX no en RX----- Y SON DE 60 A 300
supongo que esos valores son la variacion de los potenciometros...no?
como hago para subir unas fotos!!!?

Debajo del recuadro para escribir hay un texto que dice "Attachments and other options" ahí puedes adjuntar las imágenes y/o archivos.

Lo que serviría mucho es que subas el sketch en donde estaba funcionando todo alámbricamente, así se puede comprar más fácilmente.