#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Define pin constants
const int TRIGGER_PIN = 8;
const int ECHO_PIN = 7;
const int LED_PIN = 10;

// Initialize LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Initialize variables
int number = 0;
int distance = 0;

// Function to read ultrasonic distance
long readUltrasonicDistance(int triggerPin, int echoPin) {
  pinMode(triggerPin, OUTPUT);
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  pinMode(echoPin, INPUT);
  
  return pulseIn(echoPin, HIGH);
}

void setup() {
  Serial.begin(9600);
  randomSeed(analogRead(A0));
  // Initialize LCD and backlight
  lcd.init();
  lcd.backlight();


  // Set pin modes
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);

  // Generate random number and display on LCD
  number = random(1, 13);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Measure: ");
  lcd.print(number);
  lcd.print("in");
}

void loop() {
  // Read distance from ultrasonic sensor
  distance = round(0.034 * readUltrasonicDistance(TRIGGER_PIN, ECHO_PIN) / 2);

  // Print distance to Serial monitor
  Serial.println(distance);

  

  // Check if distance is within range of the random number
  if (distance >= number - 0.5 && distance <= number + 0.5) {
    digitalWrite(LED_PIN, HIGH); // Turn on output
  } else {
    digitalWrite(LED_PIN, LOW); // Turn off output
  }

  delay(100); // Adjust delay as needed
}
