// Motor A
int IN1 = 9;
int IN2 = 8;
// Motor B
int IN3 = 7;
int IN4 = 6;
// Sensor Ultrassônico
int trigPin = 4;
int echoPin = 5;
void setup() {
// Configuração dos pinos
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(115200);
}
long medirDistancia() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duracao = pulseIn(echoPin, HIGH, 30000); // Timeout de 30ms
if (duracao == 0) return 999; // Erro na leitura
long distancia = duracao * 0.0343 / 2;
return distancia;
}
void loop() {
long distancia = medirDistancia();
Serial.print("Distância: ");
Serial.print(distancia);
Serial.println(" cm");
if (distancia < 20) {
parar();
Serial.println("Obstáculo detectado! Esperando...");
delay(3000);
distancia = medirDistancia();
if (distancia < 20) {
turnRight();
delay(2000);
}
} else {
moveForward();
}
delay(500);
}
void moveForward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void moveBackward() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void turnLeft() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void turnRight() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void parar() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}