#include <Wire.h>
#include <HX711.h>
#include <LiquidCrystal_I2C.h>
#define DOUT_PIN 32 // HX711 data pin
#define SCK_PIN 33 // HX711 clock pin
#define TRIGGER_PIN 14 // HC-SR04 trigger pin
#define ECHO_PIN 15 // HC-SR04 echo pin
#define I2C_ADDR 0x27 // I2C address of the LCD
LiquidCrystal_I2C lcd(I2C_ADDR, 16, 2);
HX711 scale;
void setup() {
Serial.begin(9600);
Wire.begin();
lcd.init();
lcd.backlight();
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
scale.begin(DOUT_PIN, SCK_PIN); // Initialize HX711 with pin numbers
scale.set_scale();
scale.tare();
}
float readDistance() {
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
return pulseIn(ECHO_PIN, HIGH) / 58.0;
}
float calculateBMI(float weight, float height) {
return weight / (height * height);
}
void loop() {
float weight = scale.get_units();
float height = readDistance();
float bmi = calculateBMI(weight, height);
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(" cm");
lcd.setCursor(0, 2);
lcd.print("BMI: ");
lcd.print(bmi, 2);
delay(1000);
}