#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Pin tanimlari / Pin definitions
const int TRIG_PIN = 5;
const int ECHO_PIN = 18; // 1k+2k bolucu sart / Needs voltage divider
// LCD adresi 0x27, bazen 0x3F / LCD addr 0x27 or 0x3F
LiquidCrystal_I2C lcd(0x27, 16, 2);
const float SOUND_SPEED_CM_PER_US = 0.0343f;
const unsigned long PULSE_TIMEOUT_US = 30000UL;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
// V1 default I2C: SDA=21 SCL=22 / V1 I2C default
Wire.begin(21, 22);
lcd.init();
lcd.backlight();
// Acilis ekrani 3sn / Splash 3s
lcd.setCursor(3, 0);
lcd.print("BlueGrays");
lcd.setCursor(1, 1);
lcd.print("HC-SR04 v1.0");
delay(3000);
// Ana ekran / Main screen
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Mesafe:");
}
// Mesafe okur cm, hata -1 / Reads distance cm, -1 on error
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long duration = pulseIn(ECHO_PIN, HIGH, PULSE_TIMEOUT_US);
if (duration == 0) return -1.0f;
// Gidis-donus /2 / Round-trip /2
return (duration * SOUND_SPEED_CM_PER_US) / 2.0f;
}
void loop() {
float distance = readDistanceCm();
// Alt satiri temizle / Clear bottom row
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (distance < 0) {
lcd.print("Menzil disinda");
} else {
lcd.print(distance, 1);
lcd.print(" cm");
}
delay(200);
}