#include <LiquidCrystal_I2C.h>
#include <SD.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int trg = 4;
const int eco = 3;
const int button = 5; // Add a button pin
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
pinMode(trg, OUTPUT);
pinMode(eco, INPUT);
pinMode(button, INPUT); // set button as input
// Initialize SD card
if (!SD.begin(4)) {
lcd.println("SD card initialization failed!");
delay(1000);
return;
}
lcd.println("SD card initialized.");
delay(1000);
}
void loop() {
digitalWrite(trg, HIGH);
delay(10);
digitalWrite(trg, LOW);
long duration = pulseIn(eco, HIGH);
long distance = duration / 58.2;
// Display distance on LCD
lcd.setCursor(0, 0);
lcd.println("Dist:");
lcd.setCursor(7, 0);
lcd.println(distance);
lcd.setCursor(14, 0);
lcd.println("cm");
float distanceInches = distance / 2.54;
lcd.setCursor(0, 1);
lcd.println("Dist:");
lcd.setCursor(7, 1);
lcd.println(distanceInches);
lcd.setCursor(14, 1);
lcd.println("in");
// Check if button is pressed
if (digitalRead(button) == HIGH) {
// Create a file on the SD card
File dataFile = SD.open("distance.txt", FILE_WRITE);
// Write the distance to the file
dataFile.print("Distance: ");
dataFile.print(distance);
dataFile.println(" cm");
// Close the file
dataFile.close();
lcd.setCursor(0, 0);
lcd.println("Distance saved!");
delay(1000);
}
delay(16);
}