Control L293D con NRF24L01 (SOLUCIONADO)

Hola buenos días desde(España)

No consigo que funcione los motores del L293D con NRF24L01, esta sacado de Internet. el TX y RX funciona
sin problemas con luces y servos,pero cuando le introduzco el L293D ya no funciona. Alguien me puede orientar a solucionarlo.Gracias

Aquí pongo TX

//Transmisor todo funciona los led y servos, añadir 2 motores (dc o cc) con L293D
//Lo primero es mantener la estructura
//Que funcionen por separado con 4 botones pulsadores y poder usarlos al mismo tiempo, no con los mismos botones
//Poder pulsar boton A 1º arriba y pulsar B 2º abajo o B 1º arriba, independientemente
//Motor A 2 botones 1º arriba y 2º abajo = int 1, int 2
//Motor B 2 botones 1º arriba y 2º abajo = int 3, int 4
//Y poder añadirle 2 motores mas, hay pines de sobra a poder ser desde el pin 20
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>

                 // Define las entradas digitales.
#define b1 2     // Boton 1
#define b2 3     // Boton 2
#define b3 4     // Boton 3
#define b4 5     // Boton 4
#define b5 6     // Boton 5
#define b6 7     // Boton 6
#define b7 8     // Boton 7
#define b8 9     // Boton 8
#define b9 10    // Boton 9
#define b10 11   // Boton 10

                                  // Mega nRF24L01 (SCK 50 Marron, MOSI 51 Blanco, MISO 52 AMARILLO )
RF24 radio(53,48);                // Mega nRF24L01 (CE 53 Verde, CSN 48 Azul)  
const byte address[6] = "00001";  // Nano/Uno nRF24L01 (11,12,13,--9,10)

                         // El tamaño máximo de esta estructura es de 32 bytes - NRF24L01 límite de búfer
struct Data_Package {
  byte j1PotX,j1PotY;                                   //Joystic 1X,1Y     
  byte j2PotX,j2PotY;                                   //Joystic 2X,2Y 
 
  byte button1,button2,button3,button4,button5;         // Botones 1,2,3,4,5
  byte button6,button7,button8,button9,button10;        // Botones 6,7,8,9,10   
};

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(b1, INPUT_PULLUP);     // Boton 1
  pinMode(b2, INPUT_PULLUP);     // Boton 2
  pinMode(b3, INPUT_PULLUP);     // Boton 3
  pinMode(b4, INPUT_PULLUP);     // Boton 4
  pinMode(b5, INPUT_PULLUP);     // Boton 5
  pinMode(b6, INPUT_PULLUP);     // Boton 6 
  pinMode(b7, INPUT_PULLUP);     // Boton 7  
  pinMode(b8, INPUT_PULLUP);     // Boton 8
  pinMode(b9, INPUT_PULLUP);     // Boton 9
  pinMode(b10, INPUT_PULLUP);    // Boton 10                             
  
                                 // 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.button1   = 1;
  data.button2   = 1;
  data.button3   = 1;
  data.button4   = 1;
  data.button5   = 1;
  data.button6   = 1;
  data.button7   = 1;
  data.button8   = 1;
  data.button9   = 1;
  data.button10  = 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 
  data.j1PotY = map(analogRead(A1), 0, 1023, 0, 255);     // en un valor BYTE de 0 a 255
  data.j2PotX = map(analogRead(A2), 0, 1023, 0, 255);
  data.j2PotY = map(analogRead(A3), 0, 1023, 0, 255); 
                                                      
                                        // Lee todas las entradas digitales  
  data.button1  = digitalRead(b1);      // Boton 1
  data.button2  = digitalRead(b2);      // Boton 2
  data.button3  = digitalRead(b3);      // Boton 3
  data.button4  = digitalRead(b4);      // Boton 4
  data.button5  = digitalRead(b5);      // Boton 5
  data.button6  = digitalRead(b6);      // Boton 6
  data.button7  = digitalRead(b7);      // Boton 7 
  data.button8  = digitalRead(b8);      // Boton 8
  data.button9  = digitalRead(b9);      // Boton 9
  data.button10  = digitalRead(b10);    // Boton 10 
                                                        
  radio.write(&data, sizeof(data));     // Envia todos los (datos) de la estructura al receptor. Data_Package
            
}

Como sigo sin poder poner dos códigos seguidos.

Aquí pongo RX

//   Recive code 2 motore 4 servos con L293D
   
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

#define enA 5   
#define in1 3
#define in2 4
#define enB 6   
#define in3 7
#define in4 8
RF24 radio(9, 10);   // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
int  servo1Value,servo2Value,servo3Value,servo4Value;

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; 

int  xAxis, yAxis;
int motorSpeedA = 0;
int motorSpeedB = 0;

void setup() 
{
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_LOW);
  radio.startListening(); 
//  resetData();
  
  servo1.attach(14);
  servo2.attach(15);
  servo3.attach(16);
  servo4.attach(17);
  
}
void loop() {
  
  currentTime = millis();
  if ( currentTime - lastReceiveTime > 1000 ) { 
//    resetData(); 
  }
  
  if (radio.available()) {
    radio.read(&data, sizeof(Data_Package)); 
    lastReceiveTime = millis(); 
  }
  //-------------Principio 2 motores---------------------------
  xAxis = data.j1PotX;// X
  yAxis = data.j1PotY;// Y
  if (yAxis < 110) {
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    motorSpeedA = map(yAxis, 110, 0, 0, 255);   
  }
  else if (yAxis > 140) {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    motorSpeedA = map(yAxis, 140, 255, 0, 255);    
    }
  else {
    motorSpeedA = 0;
    motorSpeedB = 0;
    }
  if (xAxis < 110) {
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    motorSpeedB = map(xAxis, 110, 0, 0, 255);
    if (motorSpeedA < 0) {
      motorSpeedA = 0;
    }
    if (motorSpeedB > 255) {
      motorSpeedB = 255;
    }
    }
  if (xAxis > 140) {
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    motorSpeedB = map(xAxis, 140, 255, 0, 255);     
    if (motorSpeedA > 255) {
      motorSpeedA = 255;
    }
    if (motorSpeedB < 0) {
      motorSpeedB = 0;
    }
    }
    if (motorSpeedA < 70) {
      motorSpeedA = 0;
    }
    if (motorSpeedB < 70) {
      motorSpeedB = 0;
    }
  analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
  analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
  //----------------Fin 2 motores-----------------
  servo1Value = map(data.j2PotX, 0, 255, 0, 180);
  servo2Value = map(data.j2PotY, 0, 255, 0, 180);
  servo3Value = map(data.j3PotX, 0, 255, 0, 180);
  servo4Value = map(data.j3PotY, 0, 255, 0, 180);
  servo1.write(servo1Value);
  servo2.write(servo2Value);
  servo3.write(servo3Value);
  servo4.write(servo4Value);
  //---------------------------
}
/*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.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;
}*/

Que raro es lo que comentas.
El nRF24 solo hace comunicación.
El L293 controla motores y debe esperar instrucciones del Arduino para hacerlo. Si no funcionan juntos tal vez tengas algún problema de alimentación que no has explicado.
Normalmente un nrf24 se alimenta con los 3.3V del Arduino siempre y cuando no sea la versión que usa la antena. Si lo es Arduino no provee los 150mA que requiere el nRF24 con antena que necesita para RX/TX.

Dices que el nRF24 funciona. Así que de nuevo, tiendo a pensar que estas alimentando tu motor con el Arduino, lo que sería un error muy común en este foro.
No alimentes motores con el Arduino. Usa fuente externa y comparte GND con Arduino y el L293 para que todo funcione.

Ya nos comentarás si estuve o no acertado con mis consejos.

Hola. Surbyte

Tiene razón, he probado lo que me dices y funciona, he puesto el 2º L293D y cambiado los potenciometros
por 4 interruptores pulsadores, button1; = sube 1º L293D, button2; = baja, button3; = sube 2º L293D,
button4; = baja.

Ahora voy a aumentar los botones y cambiar los pines de salida , enA = 6 in1 = 20, in2 = 21, enB =7
in3 = 22 in4 = 23 (cambio del Nano a Mega Mini Pro embed) tanto en emisor como receptor.

Los interruptores son on off on que cuando los sueltas vuelven al centro.

Muchas gracias por su respuesta y solución. Saludos