#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <HX711.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define TRIGGER_PIN  12
#define ECHO_PIN     14

#define DOUT_PIN     26
#define CLK_PIN      27

HX711 scale;

float weight;
float height;
float bmi;

void setup() {
  Serial.begin(9600);

  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  scale.set_scale();
  scale.tare();

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0, 0);
  display.println("BMI CALCULATOR");
  display.display();
  delay(2000);
}

void loop() {
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  float duration = pulseIn(ECHO_PIN, HIGH);
  height = duration / 58.2;
  Serial.print("Height: ");
  Serial.print(height);
  Serial.println(" cm");

  float val = scale.get_units();
  weight = val;
  Serial.print("Weight: ");
  Serial.print(weight);
  Serial.println(" kg");

  bmi = weight / ((height/100) * (height/100));
  Serial.print("BMI: ");
  Serial.println(bmi);

  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("BMI: ");
  display.println(bmi);
  display.display();

  delay(5000);
}