#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define TRIGGER 2
#define ECHO 3
#define BUTTON 4
LiquidCrystal_I2C lcd(0x27, 16, 2);
long previousDistance = 0;
long length = 0;
long width = 0;
int measurementState = 0; // 0: No measurement, 1: Measure length, 2: Measure width
void setup() {
Serial.begin(9600);
pinMode(TRIGGER, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(BUTTON, INPUT_PULLUP);
lcd.init();
lcd.backlight();
}
void loop() {
long distance = measureDistance();
if (distance != previousDistance) {
Serial.println(distance);
previousDistance = distance;
}
if (digitalRead(BUTTON) == LOW) {
if (measurementState == 0) {
measurementState = 1; // Start measuring length
} else if (measurementState == 1) {
length = distance;
measurementState = 2; // Switch to measuring width
} else if (measurementState == 2) {
width = distance;
measurementState = 0; // Reset measurement state
}
}
long area = length * width;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Length: ");
lcd.print(length);
lcd.print(" cm");
lcd.setCursor(8, 1);
lcd.print("Width: ");
lcd.print(width);
lcd.print(" cm");
lcd.setCursor(16, 1);
lcd.print("Area: ");
lcd.print(area);
lcd.print(" cm^2");
delay(1000);
}
long measureDistance() {
digitalWrite(TRIGGER, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER, LOW);
long duration = pulseIn(ECHO, HIGH);
return duration / 29.1 / 2;
}