Carro que desvia de obstaculo motores não gira! HELP!

Boa Noite!

Montei um carro que desvia de obstaculo, parece tudo certo, mas os motores dc não giram, alguém sabe pq. segue código:

// --- Bibliotecas Auxiliares ---
#include <Servo.h> // importando biblioteca de servo motor
#include <Ultrasonic.h> // importando biblioteca do ultrassonico

// --- Mapeamento de Hardware ---
#define IN1 10 //Driver L293D
#define IN2 11 //Driver L293D
#define EN1 5 //Enable driver
#define EN2 6 //Enable driver
#define IN3 9 //Driver L293D
#define IN4 3 //Driver L293D
#define trig 13 //Saída para o pino de trigger do sensor
#define echo 12 //Entrada para o pino de echo do sensor
#define serv 7 //Saída para o servo motor
#define pwm A0 //Entrada analógica para ajuste de velocidade
#define Buzzer 2
#define LedRed 4
#define LedBlue 8

const int velocidade = 255; // velocidade 0-255
const float velang = 16.7; // definindo velocidade angular media 16,7ms por grau

Servo servo; // cria um obejeto Servo
Ultrasonic ultra(trig, echo); // criando um objeto ultrassonico

// --- Configurações Iniciais ---
void setup()
{
pinMode(trig, OUTPUT); //Saída para o pulso de trigger
pinMode(serv, OUTPUT); //Saída para o servo motor
pinMode(echo, INPUT); //Entrada para o pulso de echo
pinMode(Buzzer, OUTPUT);
pinMode(LedRed, OUTPUT);
pinMode(LedBlue, OUTPUT);

digitalWrite(trig, LOW); //Pino de trigger inicia em low
digitalWrite(Buzzer, LOW);
digitalWrite(LedRed, LOW);
digitalWrite(LedBlue, HIGH);

servo.attach(7); // relacionando servo físico com virtual
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);

delay(3000); // delay p/ posicionar o robô
}

// --- Loop Infinito ---
void loop()
{
delay(200);
int distancia = ultra.Ranging(CM); // canculando distancia em cm
delayMicroseconds(10); // espera 5 microsegundos
Serial.println(distancia);

if (distancia >= 30 || distancia == 0) {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);

digitalWrite(Buzzer, LOW);
digitalWrite(LedRed, LOW);
digitalWrite(LedBlue, HIGH);

}
else if (distancia < 30 && distancia > 0) {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);

digitalWrite(Buzzer, HIGH);
digitalWrite(LedRed, HIGH);

Busca(); //chama funcao Busca
}
}

// função busca (vai procurar por um caminho sem obstáculos)
void Busca() {
servo.write(15); // servo vira para 15 graus
delay(2000);
int distancia = ultra.Ranging(CM);
if (distancia >= 40) {
servo.write(90);
viraresquerda(90); // vira 90 graus pra esquerda
digitalWrite(LedBlue, LOW);
delay(100);
}
else if (distancia < 40) {
servo.write(165); // servo vira para 165 graus
delay(2000);
distancia = ultra.Ranging(CM);
if (distancia >= 40) {
servo.write(90);
virardireita(70); //vira 90 graus pra direita
delay(100);
}
if (distancia < 40) {
servo.write(90);
meiavolta(); //chama função meiavolta
delay(100);
}
}
}

// função para virar a esquerda
void viraresquerda(int angulo) {
delay(100);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
//analogWrite(ENA, 50);
//analogWrite(ENB, 0);
delay(angulo * velang);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}

// função para virar a direita
void virardireita(int angulo) {
delay(100);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
//analogWrite(ENA, 0);
//analogWrite(ENB, 50);
delay(angulo * velang);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}

// função para dar meia volta
void meiavolta() {
delay(100);
int aux = round(random(0, 10)); // definir pra que lado virar na meia volta
if (aux <= 5) {
viraresquerda(170); // vira pela esquerda em 180 graus
}
else {
virardireita(160); // vira pela esquerda em 180 graus
}
}

imagem das conexões:

1 Like

Eles já funcionaram sem esse código todo?