#include <LiquidCrystal.h>
LiquidCrystal lcd(PA6, PA5, PA4, PA3, PA2, PA1);
const int trigP = PB8;
const int echoP = PB9;
const int ledPin = PC13; // STM32 internal LED
long duration;
int distanceCm;
float distanceM;
void setup() {
lcd.begin(16, 2);
lcd.print(" US Range Meter ");
lcd.setCursor(0, 1);
lcd.print("Cm: "); // Reserve space for both units
pinMode(trigP, OUTPUT);
pinMode(echoP, INPUT);
pinMode(ledPin, OUTPUT);
delay(1000);
}
void loop() {
digitalWrite(trigP, LOW);
delayMicroseconds(2);
digitalWrite(trigP, HIGH);
delayMicroseconds(10);
digitalWrite(trigP, LOW);
duration = pulseIn(echoP, HIGH);
distanceCm = duration * 0.034 / 2;
distanceM = distanceCm / 100.0; // Convert to meters
// Check if distance is below 10 cm
if (distanceCm < 10) {
digitalWrite(ledPin, HIGH); // Turn on LED
lcd.setCursor(0, 1);
lcd.print("WARNING! <10cm ");
} else {
digitalWrite(ledPin, LOW); // Turn off LED
// Clear and display distance
lcd.setCursor(0, 1);
lcd.print("Cm:");
lcd.setCursor(3, 1);
lcd.print(" "); // Clear old data
lcd.setCursor(3, 1);
lcd.print(distanceCm);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print("M:");
lcd.print(distanceM, 2); // 2 decimal places
}
delay(1000);
}