Giro motor con nrf24l01

Hola, tengo un proyecto que funciona bien pero lo estoy ampliando con un motor (micro DC 6v y el micro L293d) y no hay forma de que funcione, el resto funciona.
Cuando lo conecto empieza a girar dando saltos y no responde ni a derecha ni a izquierda.
Aquí pongo los Sketch TX y RX

//transmisor intermitentes,freno,rampa strobo,marcha atras, motor
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
                 // Define las entradas digitales.
#define pin1 2     // Boton 1
#define pin2 3     // Boton 2
#define pin3 4     // Boton 3
#define pin4 5     // Boton 4
#define pin5 6     // Boton 5
#define pin6 7     // Boton 6
#define pin7 8     // Boton 7

RF24 radio(9,10);  // nRF24L01 (CE 53/9 Verde, CSN 48/10 Azul) 
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,j2PotY;    
  byte button1,button2,button3,button4,button5,button6,button7;                 // Botones 1,2,3,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(pin1, INPUT_PULLUP);     // Boton 1
  pinMode(pin2, INPUT_PULLUP);     // Boton 2
  pinMode(pin3, INPUT_PULLUP);     // Boton 3
  pinMode(pin4, INPUT_PULLUP);     // Boton 4
  pinMode(pin5, INPUT_PULLUP);     // Boton 5
  pinMode(pin6, INPUT_PULLUP);     // Boton 6                              
  pinMode(pin7, INPUT_PULLUP);     // Boton 7
                                 // Establecer valores iniciales predeterminados  
  data.j1PotX  = 127;            // Valores de 0 a 255. Cuando el Joystick está en posición de reposo,                        
  data.j2PotY  = 127;            // El valor está en el medio, o 127.
                                 // En realidad mapeamos el valor del pozo de 0 a 1023 a 0 a 255 porque ese es un valor BYTE  
  data.button1   = 1;
  data.button2   = 1;
  data.button3   = 1;
  data.button4   = 1;
  data.button5   = 1;
  data.button6   = 1; 
  data.button7   = 1;  
}
void loop() {
                                        // Lee todas las entradas analógicas y asignelas a un valor de byte
  data.j2PotY = map(analogRead(A0), 0, 1023, 0, 255);     // Convierta el valor de lectura analógica de 0 a 1023 
  data.j1PotX = map(analogRead(A1), 0, 1023, 0, 255);     // en un valor BYTE de 0 a 255                                                     
                                        // Lee todas las entradas digitales  
  data.button1  = digitalRead(pin1);      // Boton 1
  data.button2  = digitalRead(pin2);      // Boton 2
  data.button3  = digitalRead(pin3);      // Boton 3
  data.button4  = digitalRead(pin4);      // Boton 4
  data.button5  = digitalRead(pin5);      // Boton 5
  data.button6  = digitalRead(pin6);      // Boton 6
  data.button7  = digitalRead(pin7);      // Boton 7 

  /*Serial.print("; button1: ");
  Serial.print(data.button1);
  delay(600);
  Serial.print("; button2: ");
  Serial.print(data.button2);
  delay(600);
  Serial.print("; button3: ");
  Serial.print(data.button3);
  delay(600);  
  Serial.print("; button4: ");
  Serial.print(data.button4);
  delay(600);  
  Serial.print("; button5: ");
  Serial.print(data.button5);
  delay(600);
  Serial.print("; button6: ");
  Serial.print(data.button6);
  delay(600);  
  Serial.print("; button7: ");
  Serial.println(data.button7);
  delay(600); */ 
 
                                                       
  radio.write(&data, sizeof(data));     // Envia todos los datos de la estructura al receptor.            
}

// RX direccion y acelerador con intermitentes,freno,marcha atras,buzzer y posicion,cortas,largas,aux1,aux,2
 // Este codigo es para ir en el camion (Arduino Nano)
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

#define pin1 2     //intermitente D2
#define pin2 3     //intermitente D3
#define pin3 4     //freno        D4
#define pin4 5     //marcha atras D5
#define pin5 6     //posicion     D6
#define pin6 7     //cortas       D7
#define pin7 8     //largas       D8
#define pin18 18   //aux1         D18 (A4)
#define pin19 19   //aux2         D19 (A5)
#define buzzer1 17 //buzzer1      D17  (A3)

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

//------------buzzer1--------------------
unsigned long beep;
const int duracion=300;                     //si quieres que el tono sea mas corto baja este valor
const int frecuencia=2450;                  //si quieres que se escuche mas agudo sube este valor
unsigned long impresion;

//--------Intermitentes------------------
unsigned long previousMillis = 0;           // almacenará la última vez que se actualizó el LED
const unsigned long interval = 400;         // intervalo de los intermitentes

//------------servos---------------------
Servo servo1;                               // servo direccion               (A0)
Servo servo2;                               // servo acelerador              (A1)
Servo rampa3;                               // servo rampa o puerta trasera  (A2)
int servo1Value,servo2Value;

int pos = 0;
unsigned long pausa;

struct Data_Package {                       // El tamaño máximo de esta estructura es de 32 bytes
  byte j1PotX,j2PotY;                       //joystick acelerador,direccion    
  byte button1,button2,button3;             //botones posicion,cortas,largas
  byte button5,button6;                     //botones de la rampa (subir/bajar)
  byte button7,button4;                     //motor IZ, DE
};

Data_Package data;                          // Crea una variable con la estructura anterior

int  xEje, yEje;
bool encender1_state = false;
bool encender2_state = false;
bool encender3_state = false;              
bool encender4_state = false;
bool encender5_state = false;

void setup() 
{
  pinMode(pin1, OUTPUT);      // Intermitente derecho led Ambar              D2       (resistencia de 220/330 ohmios)
  pinMode(pin2, OUTPUT);      // Intermitente izquierdo led Ambar            D3       (resistencia de 220/330 ohmios)
  pinMode(pin3, OUTPUT);      // Freno configura la salida led Rojo          D4       (resistencia de 220/330 ohmios)
  pinMode(pin4, OUTPUT);      // Marcha atras configura la salida led Blanco D5       (resistencia de 220/330 ohmios)
  pinMode(pin5, OUTPUT);      // Posicion configura la salida led Rojo fijo  D6       (resistencia de 750,parte baja)en alta 220/330ohmios
  pinMode(pin6, OUTPUT);      // Cortas   configura la salida led Blanco     D7       (resistencia de 220/330 ohmios)
  pinMode(pin7, OUTPUT);      // Largas   configura la salida led Blanco     D8       (resistencia de 220/330 ohmios)
  pinMode(pin18, OUTPUT);     // Aux1     configura la salida led COLOR ?    D10 (A4) (resistencia de 220/330 ohmios)
  pinMode(pin19, OUTPUT);     // Aux2     configura la salida led COLOR ?    D11 (A5) (resistencia de 220/330 ohmios)
  pinMode(buzzer1, OUTPUT);   // Buzzer1  configura la salida pin17          D9  (A3) (buzzer 5v)
  
  rampa3.write(0);            // Servo rampa arranca en posicion 0º (A2)
                              // P.D. la resitencia de 750 es porque la posicion va con el mismo led del freno 220/330
                              // solo en los pilotos de abajo, en la parte alta o(galibo)sera de 220/330 Rojo trasera/blanco delantera
  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

  //-------------------------------
  servo1.attach(14);              // servo acelerador (A0) 
  servo2.attach(15);              // servo direccion  (A1)
  rampa3.attach(16);              // servo rampa      (A2)
  //-------------------------------
}
void loop() {
  // Comprueba 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, 
  }                                             // eso significa que hemos perdido la conexión    
                                                // Comprueba si hay datos para recibir
  if (radio.available()) {
    radio.read(&data, sizeof(Data_Package));    // Lee todos los datos y guárdelos en la estructura de 'datos'
    lastReceiveTime = millis();                 // En este momento hemos recibido los datos.
  }
  xEje = data.j1PotX;
  yEje = data.j2PotY;   
  {
  servo1Value = map(data.j1PotX, 0, 255, 0, 180);
  servo2Value = map(data.j2PotY, 0, 255, 0, 180);  
  servo1.write(servo1Value);
  servo2.write(servo2Value);
    }   
  //--------------intermitentes----------------
    if (yEje >= 120 && yEje <= 130) {    
    digitalWrite(pin1, LOW);                   // derecho
    digitalWrite(pin2, LOW);                   // izquierdo 
  }   
   if (yEje < 110) {    
    if (millis() - previousMillis >= interval) 
    {    
      digitalWrite(pin1, !digitalRead(pin1));
        previousMillis = millis();    
    }
    digitalWrite(pin2, LOW);    
  } 
  if (yEje > 140) {    
    if (millis() - previousMillis >= interval)
    {
    digitalWrite(pin2, !digitalRead(pin2));    
    previousMillis = millis();
    }
    digitalWrite(pin1 , LOW);   
  }
  //--------------freno buzzer1---------------
  //------------------freno-------------------
  if (xEje >= 120 && xEje <= 140) {           // >=120-<=140
    digitalWrite(pin3, HIGH);                 // freno led Rojo
    digitalWrite(pin4, LOW);                  // marcha atras led Blanco
   } 
  if (xEje >= 150 && xEje <= 255) {           // >=0-<=110
    digitalWrite(pin3, LOW);                  // freno led Rojo
    digitalWrite(pin4, HIGH);                 // marcha atras led Blanco
      //----------------buzzer1-----------------   
  if(millis() - impresion >= 500UL){      
      impresion=millis();
      {
  if( millis()- beep >= duracion*2){          //multiplico duracion por 2 para que dure el mismo tiempo el tono encendido que apagado
      tone(buzzer1, frecuencia, duracion);    //buzzer1
      beep=millis();  } } }
            
   } 
  if (xEje <= 110 && xEje >= 0) {               //>=150-<=225
    digitalWrite(pin3, LOW);                    //freno led Rojo
    digitalWrite(pin4, LOW);                    //marcha atras led Blanco
   }
  //-----------------fin----------------------
  
  //--------enciende led Posicion-------------
  if(data.button1 == 1 &&  !encender1_state)
  {
  digitalWrite (pin5,HIGH);                     //posicion led Blanco
  encender1_state = true;
  digitalWrite (pin5, LOW);
  }
  if(data.button1 == 0)
  {
  digitalWrite (pin5,HIGH);
  encender1_state = false;
  }
  //-------enciende led cortas--------
  if(data.button2 == 1 && !encender2_state)
  {
  digitalWrite (pin6,HIGH);
  encender2_state = true;
  digitalWrite (pin6, LOW);
  }
  if(data.button2 == 0)
  {
  digitalWrite (pin6,HIGH);
  encender2_state = false;
  }
  //--------enciende led largas--------
  if(data.button3 == 1 &&  !encender3_state)
  {
  digitalWrite (pin7,HIGH);
  encender3_state = true;
  digitalWrite (pin7, LOW);
  }
  if(data.button3 == 0)
  {
  digitalWrite (pin7,HIGH);
  encender3_state = false;
  }
  
  
  //----------rampa sube---------------
    if(data.button5 == 0 && pos<=180)           //posicion 0º hasta 180º
{
    if(millis()-pausa >= 10UL)
{
    pos++;
    pausa=millis();
 }
    rampa3.write(pos);                          //arranca en posicion 0º  
 }
//------------rampa baja---------------
    if(data.button6 == 180 && pos >=0)            //posicion 180º hasta 0º
{
    if(millis()-pausa >= 10UL)
{
    pos--;
    pausa=millis();
 }
    rampa3.write(pos);                          //arranca en posicion 180º  
 }

 //----------------Giro motor---------------------
 {
  if(data.button4 ==1 &&  !encender4_state)
  {
  digitalWrite(pin18,HIGH);  // A4
  digitalWrite(pin19,LOW);   // A5
  }
  else{
    (digitalWrite(pin18,LOW));
    (digitalWrite(pin19,LOW));
    }
  }

  {
  if(data.button7 ==1 &&  !encender5_state){
  digitalWrite(pin19,HIGH);
  digitalWrite(pin18,LOW);
  }
  else{
    (digitalWrite(pin19,LOW));
    (digitalWrite(pin18,LOW));
    }
  }

}

La idea es que con (button4 gire a izquierda, button7 gire a derecha) para controlar el subir o bajar de un motor lineal actuador (simulación pistón hidráulico elevador) para la caja del volquete.
Gracias por vuestra ayuda y saludos a tod@s

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.