problema con el attach de un servo y control de un l293d

Hola, felices fiestas a todos.

Tengo un problema que me trae de cabeza todo el día y no doy con el problema, a ver si me aportais un poco de luz.

El tema es sencillo y con mil ejemplos por toda la red, pero nada. Estoy haciendo el típico robot que detecta obstaculos con un sensor ultrasonico. He utilizado el chasis de un coche teleridigido de juguete, y el motor lo controlo con un l293D mediante un analogwrite en el pin 9 y hasta aquí todo bien, funcionando correctamente.

El problema me lo encuentro al utilizar un servo , para mover las ruedas de dirección, que intento controlar con la librería Servo.h , conectado al pin D3, y en cuento descomento la linea que asigna el pin d3 al objeto servo llamado 'direccion'

direccion.attach(pin_direccion);

el control del motor con el l293D deja de funcionar

¿hay incompatibilidad al usar un analogWrite en D9 con el atach del servo en D3?

Lo primero que he pensado era en una caida de tensión o algo por el estilo, pero si desconecto el servo, el problema persiste.El codigo si está haciendo los bcles, porque puedo comprobar el valor de lectura del treclado analódigo que tengo conectado en el pin2.

Os copio el código que estoy utilizando, no está depurado ni mucho menos, simplemente es para comprobar que cada cosa que voy montando funciona correctamente.
El código es este:

//robot controlado por sersor ultrasonico
#include <Servo.h>

//definimos variables y parametros control dirección
Servo direccion;// crea object servo para controlar servo dirección
int dir_derecha = 80; // definimos giro servo dirección a derecha como 80º de angulo
int dir_izquierda= 108; // definimos giro servo dirección a izquierda como 108º de angulo
int dir_neutra= 94; // definimos giro servo dirección neutra como 94ª, posición centrada servo
int pin_direccion= 3; // definimos el pin D3 para control del servo de dirección
int pin_vcc_direccion= 12; //definimos el pin A0 para alimentar el servo de dirección y no sobrecargar el pin 5v
int ledPin = 13; // LED conectado al pin digital 13

int pinA1 = 7; // entrada Motor A 1
int pinB1 = 8; // entrada Motor B 1
int pinEN1 = 9; // entrada EN 1
int pinPot = 2; // Lectura analógica del Potenciometro
int valorPot= 0;
int valorVeloc = 0;

void setup() { // Inicializa los pines de salida
pinMode(pin_direccion, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode( pinA1, OUTPUT);
pinMode( pinB1, OUTPUT);
pinMode(pinEN1, OUTPUT);
pinMode(pinPot, INPUT);
digitalWrite(pinEN1, HIGH); // linea es la clave, RPA
Serial.begin(9600);

// El LED parpadea 3 veces. Esto debería ocurrir sólo una vez.
// Si usted ve el parpadeo del LED tres veces, significa que
// se restablecio (reset) el propio módulo. Probablemente porque
// el motor provocó una bajada de voltaje o un corto.
blink(ledPin, 3, 100);

//asignamos al servo su correspondiente pin
//direccion.attach(pin_direccion);
}

void loop() {

valorPot = analogRead(pinPot); // Lee el valor del TECLADO
Serial.println(valorPot);
if (valorPot>670) {
valorVeloc =40;
digitalWrite( pinA1, HIGH); // Valores ALTO en A y BAJO en B simulaneamente
digitalWrite( pinB1, LOW);
direccion.write(dir_neutra);
}
else if (valorPot>500) {
valorVeloc =40;
digitalWrite( pinA1, LOW); // Valores ALTO en A y BAJO en B simulaneamente
digitalWrite( pinB1, HIGH);
direccion.write(dir_izquierda);
}

else if (valorPot>150) {
digitalWrite( pinA1, LOW); // Valores ALTO en A y BAJO en B simulaneamente
digitalWrite( pinB1, LOW);
direccion.write(dir_izquierda);
// valorVeloc =0;
}

analogWrite(pinEN1, valorVeloc);// y establece la velocidad del motor con ese valor
delay(500);
}

/* blinks an LED */
void blink(int whatPin, int cuantoTiempo, int milliSecs) {
for (int i = 0; i < cuantoTiempo; i++) {
digitalWrite(whatPin, HIGH);
delay(milliSecs/2);
digitalWrite(whatPin, LOW);
delay(milliSecs/2);
}
}
saludos

ha sido poner el post y dar con el problema

"he Servo library disables PWM use on pins 9 and 10"

pues eso, que la libreria servo.h deshabilita el pwd en los pin 9 y 10 y yo no lo sabía.

gracias

De NADA :slight_smile: