#include
#include
#define TRIG_PIN 3
#define ECHO_PIN 2
#define ENA 8
#define IN1 9
#define IN2 10
LiquidCrystal_I2C lcd(0x27, 16, 2); // change to 0x3F if needed
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Distance:");
}
float getDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 25000); // timeout ~4m
if (duration == 0) return -1;
return duration * 0.0343 / 2;
}
void motorForward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 200); // speed (0–255)
}
void motorStop() {
analogWrite(ENA, 0);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
}
void loop() {
float distance = getDistanceCM();
lcd.setCursor(0, 1);
if (distance < 0) {
lcd.print("Out of range ");
motorStop();
} else {
lcd.print(distance, 1);
lcd.print(" cm ");
if (distance < 10.0) {
motorForward();
} else {
motorStop();
}
}
delay(300);
}