1#include <LiquidCrystal.h>
2
3// --- Pin Definitions ---
4// LCD Pins: RS=7, EN=8, D4=9, D5=10, D6=11, D7=12
5LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
6
7// Ultrasonic Sensor Pins
8const int trigPin = 3;
9const int echoPin = 2;
10
11// LCD Contrast Pin
12const int contrastPin = 5;
13
14// Contrast value (0-255). 60 to 100 is usually a sweet spot.
15const int contrastValue = 60;
16
17void setup() {
18 // 1. Initialize Serial Communication (Baud rate: 9600)
19 Serial.begin(9600);
20
21 // 2. Initialize Sensor Pins
22 pinMode(trigPin, OUTPUT);
23 pinMode(echoPin, INPUT);
24
25 // 3. Set up LCD Contrast using PWM
26 pinMode(contrastPin, OUTPUT);
27 analogWrite(contrastPin, contrastValue);
28
29 // 4. Initialize the LCD (16 columns, 2 rows)
30 lcd.begin(16, 2);
31
32 // --- Professional Startup Text ---
33 lcd.setCursor(0, 0);
34 lcd.print("Distance Measure");
35 lcd.setCursor(0, 1);
36 lcd.print(" System ");
37
38 // Print a startup message to the Serial Monitor as well
39 Serial.println("Distance Measure System Initialized...");
40 Serial.println("------------------------------------");
41
42 delay(3000); // Display the welcome message for 3 seconds
43 lcd.clear(); // Clear the screen for the main loop
44}
45
46void loop() {
47 long duration;
48 int distanceCm;
49
50 // --- Trigger the Ultrasonic Sensor ---
51 digitalWrite(trigPin, LOW);
52 delayMicroseconds(2);
53 digitalWrite(trigPin, HIGH);
54 delayMicroseconds(10);
55 digitalWrite(trigPin, LOW);
56
57 // --- Read and Calculate ---
58 duration = pulseIn(echoPin, HIGH);
59 distanceCm = duration * 0.034 / 2;
60
61 // --- 1. Display on LCD ---
62 lcd.setCursor(0, 0);
63 lcd.print("Target Distance:");
64
65 lcd.setCursor(0, 1);
66 lcd.print(distanceCm);
67 lcd.print(" cm "); // Extra spaces to clear old digits
68
69 // --- 2. Display on Serial Monitor ---
70 Serial.print("Target Distance: ");
71 Serial.print(distanceCm);
72 Serial.println(" cm");
73
74 // Wait a short moment before taking the next reading
75 delay(250);
76}