{[(Solucionado)]} Problemas al integrar 2 circuitos

Estoy haciéndome un pequeño teledirigido, que de momento, lo “controlo” con un joystick parecido al de ps2, tengo echos los circuitos del X (giro) y del Y (delante-atrás)
uso un servomotor como timon y 2 motores (de momento solo poseo uno) para hacer el movimiento
si en el sketch tengo puesto por separado, funcionan bien, pero luego al juntarlos… se me vuelven locos, y dejan de funcionar ambos el motor solo funciona hacia un lado y sin ningún tipo de control de velocidad, y el servo se mueve sin ton ni son:

Sketch Juntos:

#include <Servo.h>
Servo myServo; 

int pinP=12;  //Salida Del Pulsador
int pinE=13;  //Entrada Enable del L293D
int pin2=9;   //Entrada 2 del L293D
int pin7=10;  //Entrada 7 del L293D
int joyy=A0;   //Joystick X
int joyx=A1;   //Joystick X
 
int estado = HIGH;      // el estado del pin de salida
int lectura;            // la lectura del pin de entrada
int previo = LOW;       // la lectura anterior al pin de entrada
 
int valorjoyx;     //Variable que recoge el valor del Joystick X
int valorjoyy;     //Variable que recoge el valor del Joystick y
int pwm1;          //Variable del PWM 1
int pwm2;          //Variable del PWM 2
int pwm3;          //Variable del PWM 3
 
void setup()
{
  //Inicializamos los pins de salida y entrada
  pinMode(pin2,OUTPUT);
  pinMode(pin7,OUTPUT);
  pinMode(pinE,OUTPUT);
  pinMode(pinP,INPUT);
  myServo.attach(3);
}
 
void loop()
{//comando del boton de encendido y apagado de los motores
 lectura = digitalRead(pinP);
  if (lectura == HIGH && previo == LOW) {
    if (estado == HIGH)
      estado = LOW;
    else
      estado = HIGH;   
  }
  digitalWrite(pinE, estado);
  previo = lectura;
  
  //Almacenamos el valor del potenciómetro en la variable
  valorjoyx=analogRead(joyx);
  valorjoyy=analogRead(joyy);
  //Como la entrada analógica del Arduino es de 10 bits, el rango va de 0 a 1023.
  //En cambio, la salidas del Arduio son de 8 bits, quiere decir, rango entre 0 a 255.
  //Por esta razón tenemos que mapear el número de un rango a otro usando este código.
  pwm1 = map(valorjoyy, 0, 1023, 0, 255);
  pwm2 = map(valorjoyy, 0, 1023, 255, 0); //El PWM 2 esta invertido respecto al PWM 1
  pwm3 = map(valorjoyx, 0, 1023, 0, 179);
  //Sacamos el PWM de las salidas usando analogWrite(pin,valor)
  analogWrite(pin2,pwm1);
  analogWrite(pin7,pwm2);
  myServo.write(pwm3);
}

Sketch X:

#include <Servo.h>
Servo myServo; 

int joyx=A1;   //Joystick X
 
int valorjoyx;     //Variable que recoge el valor del Joystick X
int pwm3;          //Variable del PWM 3
 
void setup()
{
 myServo.attach(3);
}
 
void loop()
{//comando del boton de encendido y apagado de los motores
  
  //Almacenamos el valor del potenciómetro en la variable
  valorjoyx=analogRead(joyx);
  pwm3 = map(valorjoyx, 0, 1023, 0, 179);
  //Sacamos el PWM de las salidas usando analogWrite(pin,valor)
  myServo.write(pwm3);
}

Sketch Y:

int pinP=12;  //Salida Del Pulsador
int pinE=13;  //Entrada Enable del L293D
int pin2=9;   //Entrada 2 del L293D
int pin7=10;  //Entrada 7 del L293D
int joyy=A0;   //Joystick X
 
int estado = HIGH;      // el estado del pin de salida
int lectura;            // la lectura del pin de entrada
int previo = LOW;       // la lectura anterior al pin de entrada
 
int valorjoyy;     //Variable que recoge el valor del Joystick y
int pwm1;          //Variable del PWM 1
int pwm2;          //Variable del PWM 2
 
void setup()
{
  //Inicializamos los pins de salida y entrada
  pinMode(pin2,OUTPUT);
  pinMode(pin7,OUTPUT);
  pinMode(pinE,OUTPUT);
  pinMode(pinP,INPUT);
}
 
void loop()
{//comando del boton de encendido y apagado de los motores
 lectura = digitalRead(pinP);
  if (lectura == HIGH && previo == LOW) {
    if (estado == HIGH)
      estado = LOW;
    else
      estado = HIGH;   
  }
  digitalWrite(pinE, estado);
  previo = lectura;
  
  //Almacenamos el valor del potenciómetro en la variable
  valorjoyy=analogRead(joyy);
  //Como la entrada analógica del Arduino es de 10 bits, el rango va de 0 a 1023.
  //En cambio, la salidas del Arduio son de 8 bits, quiere decir, rango entre 0 a 255.
  //Por esta razón tenemos que mapear el número de un rango a otro usando este código.
  pwm1 = map(valorjoyy, 0, 1023, 0, 255);
  pwm2 = map(valorjoyy, 0, 1023, 255, 0); //El PWM 2 esta invertido respecto al PWM 1
  //Sacamos el PWM de las salidas usando analogWrite(pin,valor)
  analogWrite(pin2,pwm1);
  analogWrite(pin7,pwm2);
 
}

Alguien sabe el problema?, muchas gracias por las respuestas ^^

En el esquema, no se ve cómo alimentas los potenciometros de las entradas analógicas. Recuerda unir las masas de estos a la del arduino.

Otra cosa que veo y que no tiene mucho sentido, es que en el puente h, conectas los pins 9 y 10 alas salidas y los motores a las entradas. Está al revés de como debería ser.

Creo que tengo todos los elementos para montar el mismo circuito. Lo monto, lo pruebo y te comento.

Otra cosa, es que no estaría de más u cable que una las masas de la alimentación externa, con la del arduino. Ya se unen a través del GND del puente H, pero bueno, por un cable más, por seguridad, no pasa nada.

El servo, lo alimentas con la salida de 5v del arduino. No es buena idea, ya que si el servo consume mucho, puede llegar a resetear el arduino. Menor una fuente externa de 5V para el servo.

El pin de enable, lo programas en el 13, pero lo conectas en en 11.

Corrige todo esto y seguimos...

carmeloco:
En el esquema, no se ve cómo alimentas los potenciometros de las entradas analógicas. Recuerda unir las masas de estos a la del arduino.
Están todas las masas unidas, olvide ponerlas en la imagen -.-
Otra cosa que veo y que no tiene mucho sentido, es que en el puente h, conectas los pins 9 y 10 alas salidas y los motores a las entradas. Está al revés de como debería ser.
En el proyecto, estaba puesto como dices, con las prisas, no remire si estaba todo puesto, ya lo puse en el esquema
Creo que tengo todos los elementos para montar el mismo circuito. Lo monto, lo pruebo y te comento.
ok gracias
Otra cosa, es que no estaría de más u cable que una las masas de la alimentación externa, con la del arduino. Ya se unen a través del GND del puente H, pero bueno, por un cable más, por seguridad, no pasa nada.
Como siempre uno masas, olvide ponerlo en el esquema XD ya lo puse
El servo, lo alimentas con la salida de 5v del arduino. No es buena idea, ya que si el servo consume mucho, puede llegar a resetear el arduino. Menor una fuente externa de 5V para el servo.
No hay problema con ello, ya lo tengo provado en mas circuitos y sin problemas, a demás, que olvide poner el condensador que tenia en el circuito jajajaj
El pin de enable, lo programas en el 13, pero lo conectas en en 11.
Sip, otro descuido en el esquema, tenia prisa por irme, se nota verdad? XD
Corrige todo esto y seguimos...
Corregido, gracias ^^

Vale, encontrado el problema. Te explico. He probado tus códigos, y he podido reproducir perfectamente el problema. Si te miras la documentación de la librería “servo”

http://arduino.cc/en/Reference/Servo

Podrás ver que dice que en placas diferentes a la mega, la librería servo, deshabilita el PWM en los pins 9 y 10, que son justo los que tú usas para controlar los motores con el puente H. Cambia estos pins por el 5 y el 6 y problema solucionado.

Te pongo el código corregido:

#include <Servo.h>
Servo myServo; 

int pinP=12;  //Salida Del Pulsador
int pinE=13;  //Entrada Enable del L293D
int pin2=5;   //Entrada 2 del L293D
int pin7=6;  //Entrada 7 del L293D
int joyy=A0;   //Joystick X
int joyx=A1;   //Joystick X
 
int estado = HIGH;      // el estado del pin de salida
int lectura;            // la lectura del pin de entrada
int previo = LOW;       // la lectura anterior al pin de entrada
 
int valorjoyx;     //Variable que recoge el valor del Joystick X
int valorjoyy;     //Variable que recoge el valor del Joystick y
int pwm1;          //Variable del PWM 1
int pwm2;          //Variable del PWM 2
int pwm3;          //Variable del PWM 3
 
void setup()
{
  //Inicializamos los pins de salida y entrada
  pinMode(pin2,OUTPUT);
  pinMode(pin7,OUTPUT);
  pinMode(pinE,OUTPUT);
  pinMode(pinP,INPUT);
  myServo.attach(3);
}
 
void loop()
{//comando del boton de encendido y apagado de los motores
 lectura = digitalRead(pinP);
  if (lectura == HIGH && previo == LOW) {
    if (estado == HIGH)
      estado = LOW;
    else
      estado = HIGH;   
  }
  digitalWrite(pinE, estado);
  previo = lectura;
  
  //Almacenamos el valor del potenciómetro en la variable
  valorjoyx=analogRead(joyx);
  valorjoyy=analogRead(joyy);
  //Como la entrada analógica del Arduino es de 10 bits, el rango va de 0 a 1023.
  //En cambio, la salidas del Arduio son de 8 bits, quiere decir, rango entre 0 a 255.
  //Por esta razón tenemos que mapear el número de un rango a otro usando este código.
  pwm1 = map(valorjoyy, 0, 1023, 0, 255);
  pwm2 = map(valorjoyy, 0, 1023, 255, 0); //El PWM 2 esta invertido respecto al PWM 1
  pwm3 = map(valorjoyx, 0, 1023, 0, 179);
  //Sacamos el PWM de las salidas usando analogWrite(pin,valor)
  analogWrite(pin2,pwm1);
  analogWrite(pin7,pwm2);
  myServo.write(pwm3);
}

Por cierto, que se me olvidaba. Recuerda poner una resistencia pull down en el pulsador, para que funcione bien, y algún código antirebote tampoco le iría mal.

aun no lo probé, pero gracias por solucionarlo ^^