23-04-2018, 05:17 PM
hola a todos .Tengo este programa con dos motores y un servo .Para mover los motores utilizo L238D Los motores funcionan bien pero el servo no responde ,hace como el intento de moverse pero nada mas.He echo este programa sin librerias por que prefiero hacerlo si .¿Alagien save decirme donde meto la pata.soy nuevo en el tema
int vel1=0;
int vel=250;
int velservo=250;
int servoPin=9;
int angulo;
int izq=170;
int cen=100;
int der=0;
int i=0;
float pausa;
void setup()
{
pinMode (2,OUTPUT);
pinMode (4,OUTPUT);
pinMode (12,OUTPUT);
pinMode (13,OUTPUT);
pinMode (5,OUTPUT);
pinMode (3,OUTPUT);
pinMode(servoPin, OUTPUT); // Declaramos el pin digital 9 como salida
digitalWrite(servoPin, LOW); // Ponemos el pin digital 9 en LOW
}
void loop()
{
moverServo(servoPin,cen);
delay(velservo);
recto();
paro_motores();
moverServo(servoPin,der);
delay(velservo);
giro_derecha();
paro_motores();
moverServo(servoPin,cen);
delay(velservo);
atras();
paro_motores();
moverServo(servoPin,izq);
delay(velservo);
giro_izqui();
}
void moverServo(int pin, int angulo)
// Recogemos las variables PIN y ANGULO en cada llamada
{
pausa = cen*2000.0/180.0 + 460; // Calculamos el ancho del pulso aplicando la regla de tres
digitalWrite(servoPin, HIGH); // Ponemos el pin en HIGH
delayMicroseconds(pausa); // Esperamos con el pin en HIGH durante el resultado de la regla de tres
digitalWrite(servoPin, LOW); // Y ponemos de nuevo el pin en LOW
delayMicroseconds(2460-pausa);
}
void giro_derecha()
{
digitalWrite(12,LOW);//giro derecha paro solo motor a
digitalWrite(13,LOW);
analogWrite(11,vel1);//enable motor a patilla
digitalWrite(2,HIGH);
digitalWrite(4,LOW);
analogWrite(3,vel);//enable motor dos
delay(5000);
}
void atras()
{
digitalWrite(12,HIGH);//Marcha adelante
digitalWrite(13,LOW);
analogWrite(11,vel);
digitalWrite(2,HIGH);
digitalWrite(4,LOW);
analogWrite(3,vel);
delay(5000);
}
void recto()
{
digitalWrite(12,LOW);//Marcha atras
digitalWrite(13,HIGH);
analogWrite(11,vel);
digitalWrite(2,LOW);
digitalWrite(4,HIGH);
analogWrite(3,vel);
delay(5000);
}
void giro_izqui()
{
digitalWrite(12,HIGH);//giro izquierda paro motor b
digitalWrite(13,LOW);
analogWrite(11,vel);
digitalWrite(2,LOW);
digitalWrite(4,LOW);
analogWrite(3,vel1);
delay(5000);
}
void paro_motores()
{
digitalWrite(12,LOW);//paro motores
digitalWrite(13,LOW);
analogWrite(11,vel1);
digitalWrite(2,LOW);
digitalWrite(4,LOW);
analogWrite(3,vel1);
delay(5000);
}
int vel1=0;
int vel=250;
int velservo=250;
int servoPin=9;
int angulo;
int izq=170;
int cen=100;
int der=0;
int i=0;
float pausa;
void setup()
{
pinMode (2,OUTPUT);
pinMode (4,OUTPUT);
pinMode (12,OUTPUT);
pinMode (13,OUTPUT);
pinMode (5,OUTPUT);
pinMode (3,OUTPUT);
pinMode(servoPin, OUTPUT); // Declaramos el pin digital 9 como salida
digitalWrite(servoPin, LOW); // Ponemos el pin digital 9 en LOW
}
void loop()
{
moverServo(servoPin,cen);
delay(velservo);
recto();
paro_motores();
moverServo(servoPin,der);
delay(velservo);
giro_derecha();
paro_motores();
moverServo(servoPin,cen);
delay(velservo);
atras();
paro_motores();
moverServo(servoPin,izq);
delay(velservo);
giro_izqui();
}
void moverServo(int pin, int angulo)
// Recogemos las variables PIN y ANGULO en cada llamada
{
pausa = cen*2000.0/180.0 + 460; // Calculamos el ancho del pulso aplicando la regla de tres
digitalWrite(servoPin, HIGH); // Ponemos el pin en HIGH
delayMicroseconds(pausa); // Esperamos con el pin en HIGH durante el resultado de la regla de tres
digitalWrite(servoPin, LOW); // Y ponemos de nuevo el pin en LOW
delayMicroseconds(2460-pausa);
}
void giro_derecha()
{
digitalWrite(12,LOW);//giro derecha paro solo motor a
digitalWrite(13,LOW);
analogWrite(11,vel1);//enable motor a patilla
digitalWrite(2,HIGH);
digitalWrite(4,LOW);
analogWrite(3,vel);//enable motor dos
delay(5000);
}
void atras()
{
digitalWrite(12,HIGH);//Marcha adelante
digitalWrite(13,LOW);
analogWrite(11,vel);
digitalWrite(2,HIGH);
digitalWrite(4,LOW);
analogWrite(3,vel);
delay(5000);
}
void recto()
{
digitalWrite(12,LOW);//Marcha atras
digitalWrite(13,HIGH);
analogWrite(11,vel);
digitalWrite(2,LOW);
digitalWrite(4,HIGH);
analogWrite(3,vel);
delay(5000);
}
void giro_izqui()
{
digitalWrite(12,HIGH);//giro izquierda paro motor b
digitalWrite(13,LOW);
analogWrite(11,vel);
digitalWrite(2,LOW);
digitalWrite(4,LOW);
analogWrite(3,vel1);
delay(5000);
}
void paro_motores()
{
digitalWrite(12,LOW);//paro motores
digitalWrite(13,LOW);
analogWrite(11,vel1);
digitalWrite(2,LOW);
digitalWrite(4,LOW);
analogWrite(3,vel1);
delay(5000);
}