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 ^^