#include <Servo.h> // Librería estándar para Arduino Uno
Servo sRadar;
const int Trig = 4; // Pin que dispara el pulso
const int Echo = 5; // Pin que recibe el rebote[cite: 7]
const int IN1 = 8, IN2 = 9, IN3 = 10, IN4 = 11; // Músculos L298N
void setup() {
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
sRadar.attach(12); // Vincular el pin físico al cable de señal
sRadar.write(90); // Mirar al frente
}
int medirDistancia() {
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
long duracion = pulseIn(Echo, HIGH);
return duracion * 0.034 / 2; // Convertir a centímetros
}
void loop() {
sRadar.write(90);
delay(100);
int distancia = medirDistancia();
if (distancia > 0 && distancia < 20) { // Obstáculo a menos de 20 cm
// Freno Total
digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
sRadar.write(0); // Escanear derecha
delay(500); // Pausa obligatoria para que el motor alcance la posición
int distDer = medirDistancia();
sRadar.write(180); // Escanear izquierda
delay(500);
int distIzq = medirDistancia();
if (distDer > distIzq) {
// Girar Derecha (Motor A retrocede, Motor B avanza)
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
} else {
// Girar Izquierda (Motor A avanza, Motor B retrocede)
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
delay(1000); // 1000 milisegundos = 1 segundo humano
} else {
// Motor A y B Avanzan
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}
}
