hello, have "tb6612fng dual motor driver carrier", "qtr-8rc reflectance sensor" , 2 servos, problem when add servo.attach( ); code, 1 motor stops working...
if delete these 2 lines of code, motors work, ideas?
thanks!!
i've set loop adelante(); testing because adelante means forward and 2 motors supposed run "adelante" 1 works now...
code: [select]
//código 27/4/2015 ;
#include <servo.h>
#include <qtrsensors.h>
///////////////////////////////////
#define rightmotor1 6 // pin 1 de direccion del motor izquierdo
#define rightmotor2 5 // pin 2 de direccion del motor izquierdo
#define rightmotorpwm 9 // pin pwm del motor izquierdo9
#define leftmotor1 12 // pin 1 de direccion del motor derecho12
#define leftmotor2 11 // pin 2 de direccion del motor derecho11
#define leftmotorpwm 3 // pin pwm del motor derecho3
#define motorpower 10 // ??
#define num_sensors 4 // número de sensores usados
#define num_samples_per_sensor 4 // cantidad de lecturas analogicas que serán leidas por sensor
#define emitter_pin 2 // pin emisor del qtr
#define timeout 1000 // waits 2500 sensor outputs go low
#define ledpin 13 // número del pin de test
#define buttonpin 2 // boton externo
///////////////////////////////////
qtrsensorsanalog qtra((unsigned char[]) {1, 2, 3, 4}, num_sensors, num_samples_per_sensor, emitter_pin); //orden de pines en los que están conectados a1, a2, a3, a4
unsigned int sensorvalues[num_sensors];
int vel = 50;
int cny1 = a0;
int cny2 = a5;
int val1 = 0;
int val2 = 0;
float med = 0;
int color = 0;
int negro = 950;
int blanco = 100;
int sinbote = 985;
servo servoderecha;
servo servoizquierda;
///////////////////////////////////
void setup()
{
serial.begin(9600);
pinmode(cny1, input);
pinmode(cny2, input);
pinmode(ledpin ,output);
pinmode(motorpower, output);
pinmode(leftmotor1 ,output);
pinmode(leftmotor2 ,output);
pinmode(leftmotorpwm ,output);
pinmode(rightmotor1 ,output);
pinmode(rightmotor2 ,output);
pinmode(rightmotorpwm ,output);
pinmode(buttonpin ,input);
servoizquierda.attach(8);
servoderecha.attach(7);
while ( !digitalread(buttonpin) );
// presiona boton para activar calibracion
( int i=0; i<70; i++) // hace tomar la calibración unos segundos.
{
digitalwrite(ledpin, high); // enciende el led que parpadea durante la calibración
delay(20);
qtra.calibrate(); // reads sensors 10 times @ 2.5 ms per 6 sensors (i.e. ~25 ms per call)
digitalwrite(ledpin, low); // apaga led de calibración por cada ciclo
delay(20);
}
digitalwrite(ledpin, low); // apaga el led para indicar que está finalizada la calibración
// esperar 5 segundos
delay(2000);
}
void abrepinza()
{
serial.print("abriendo pinza");
servoderecha.write(0); //calibrar para que lo suelte
servoizquierda.write(180); //calibrar para que lo suelte
delay(500);
return;
}
void cierrapinza()
{
serial.print("cerrando pinza");
servoderecha.write(175); //calibrar para que lo coja
servoizquierda.write(15); //calibrar para que lo coja
delay (500);
return;
}
void adelante()
{
serial.println ("adelante");
digitalwrite(motorpower, high);
digitalwrite(rightmotor1, high);
digitalwrite(rightmotor2, low);
analogwrite(rightmotorpwm, vel);
digitalwrite(motorpower, high);
digitalwrite(leftmotor1, high);
digitalwrite(leftmotor2, low);
analogwrite(leftmotorpwm, vel);
return;
}
void atras()
{
serial.println ("atrás");
digitalwrite(motorpower, high);
digitalwrite(rightmotor1, low);
digitalwrite(rightmotor2, high);
analogwrite(rightmotorpwm, vel);
digitalwrite(leftmotor1, low);
digitalwrite(leftmotor2, high);
analogwrite(leftmotorpwm, vel);
return;
}
void parada()
{
serial.println("parada");
digitalwrite(motorpower, low);
return;
}
void giraderecha() //rueda izq adelante
{
serial.println("giro derecha");
digitalwrite(motorpower, high);
digitalwrite(rightmotor1, high);
digitalwrite(rightmotor2, low);
analogwrite(rightmotorpwm, vel);
digitalwrite(motorpower, high);
digitalwrite(leftmotor1, high);
digitalwrite(leftmotor2, low);
analogwrite(leftmotorpwm,0);
return;
}
void giraizquierda()
{
serial.println("giro izquierda");
digitalwrite(motorpower, high);
digitalwrite(rightmotor1, low);
digitalwrite(rightmotor2, high);
analogwrite(rightmotorpwm, 0);
digitalwrite(motorpower, high);
digitalwrite(leftmotor1, high);
digitalwrite(leftmotor2, low);
analogwrite(leftmotorpwm, vel);
return;
}
////////////////////////////////////////sli
int siguelineas ()
{
val1 = analogread(cny1);
val2 = analogread(cny2);
med = (val1 + val2)/2;
if (med <= blanco)
{
color = 1;
return color;
}
else if (med >= negro && med < sinbote)
{
color = 3;
return color;
}
else
{
color == 2;
}
serial.println("siguiendo linea...");
delay(1000);
unsigned int position = qtra.readline(sensorvalues);
if (sensorvalues[3] < 250 && sensorvalues[2] > 750 && sensorvalues[1] > 750 && sensorvalues[0] < 250)
{
adelante();
}
else if (sensorvalues[3] < 250 && sensorvalues[2] < 250 && sensorvalues[1] < 250 && sensorvalues[0] < 250)
{
parada();
serial.println("siguelineas interrumpido: fuera de linea");
}
else if (sensorvalues[3] < 250 && sensorvalues[2] < 250 && sensorvalues[1] < 250 && sensorvalues[0] > 750)
{
giraderecha();
}
else if (sensorvalues[3] > 750 && sensorvalues[2] < 250 && sensorvalues[1] < 250 && sensorvalues[0] < 250)
{
giraizquierda();
}
return color;
}
////////////////////////////////////////////////////////slf
void loop()
{
adelante();
} //cierre del loop
if delete these 2 lines of code, motors work, ideas?
code: [select]
servoizquierda.attach(8);
servoderecha.attach(7);
thanks!!
i've set loop adelante(); testing because adelante means forward and 2 motors supposed run "adelante" 1 works now...
does this help?
Arduino Forum > Using Arduino > Project Guidance > Servos cause motors to not work.
arduino
Comments
Post a Comment