Servos cause motors to not work.

Hello, I have a “TB6612FNG dual motor driver carrier”, “QTR-8RC reflectance sensor” and two servos, the problem is when i add servo.attach( ); to the code, one motor stops working…

//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 for 2500 us for sensor outputs to 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
  for ( 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 all sensors 10 times at 2.5 ms per six 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 I delete these two lines of code, the motors work, any ideas?

 servoizquierda.attach(8);
servoderecha.attach(7);

Thanks!!
I’ve set loop to only adelante(); for testing because adelante means forward and two motors are supposed to run with “adelante” but only one works for now…

Does this help?

Specifically the servo libary stops two of the PWM pins from working because it uses that timer.

Thank you! And how do I fix that?

What do you mean by fix? You have six PWM pins on the Arduino, with two out of action then use the other four. This might mean requiring your motor drive to use the other pins.