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

LiquidCrystal_I2C lcd(0x27,20,4);

#define echoPin 7
#define trigPin 6

const int loadCellPin = A0;
const int VCC = A1;
const float calibration_factor = 2280.0; // Calibration factor obtained from load cell calibration
float weight = 0.0;
float height = 0.0;
float BMI = 0.0;

Ultrasonic ultrasonic(trigPin, echoPin);

void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
}

void loop() {
  weight = (analogRead(loadCellPin) - analogRead(VCC)) / calibration_factor; // Calculate weight in kg
  height = ultrasonic.read() / 100.0; // Convert height to meters

  BMI = weight / (height * height); // Calculate BMI

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Weight: ");
  lcd.print(weight, 2);
  lcd.print(" kg");

  lcd.setCursor(0,1);
  lcd.print("Height: ");
  lcd.print(height, 2);
  lcd.print(" m");

  delay(1000);

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("BMI: ");
  lcd.print(BMI, 2);
  lcd.print(" kg/m2");

  delay(1000);
}