#include <LiquidCrystal_I2C.h> // LCD
#include "HX711.h" // Sensor วัด นน. kg.
LiquidCrystal_I2C lcd(0x27,20,4); // Set ค่า ตำแหน่ง X , Y LCD
HX711 scale;
#define LOADCELL_DOUT_PIN 19
#define LOADCELL_SCK_PIN 18
uint32_t ulTimer_hx711; // ขนาดที่ใช้ 24bit ต้องตั้ง มากกว่า(32bit)
int32_t lRew_value; //
float fScale = 420; //
uint32_t ulTimer_display;
float fWeight; // เพิ่มตัวแปร น้ำหนัก ไว้ใช้คำนวณ BMI
float fhight =150 ; // เพิ่มตัวแปร ความสูง ไว้ใช้คำนวณ BMI
float BMI ; // เพิ่มตัวแปร BMI ไว้ใช้คำนวณ BMI
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.clear();
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(420.f);
ulTimer_hx711 = millis();
ulTimer_display = millis();
}
void loop() {
read_hx711();
display();
}
void read_hx711() {
uint32_t currentMillis = millis();
if(currentMillis-ulTimer_hx711 > 1000) {
ulTimer_hx711 = currentMillis;
lRew_value = scale.read();
lRew_value = (lRew_value<<8) / 256;
fWeight = lRew_value / fScale;
}
}
void display() {
uint32_t currentMillis = millis();
if(currentMillis-ulTimer_display > 1000) {
ulTimer_display = currentMillis;
// lcd.setCursor(0, 1);
// 01234567890123456789
//lcd.print("read: "); //ไม่ต้องแสดง lRew_value บน LCD
//lcd.print(lRew_value); //ไม่ต้องแสดง lRew_value บน LCD
// lcd.setCursor(0, 10); //ไม่ต้องแสดง กำหนดตำแหน่ง Scale บน LCD
// 01234567890123456789 //ไม่ต้องแสดง กำหนดตำแหน่ง Scale บน LCD
// lcd.print("Scale: "); //ไม่ต้องแสดง Scale บน LCD
// lcd.print(fScale); //ไม่ต้องแสดง Scale บน LCD
//-----------------เพิ่ม คำนวณ BMI และ แสดงผล ใน LCD-------------------------
lcd.setCursor(0,0);
lcd.print("Women Hight="); //เพิ่มข้อความ--Women hight=
lcd.setCursor(12, 0); // กำหนดตำแหน่ง Scale บน LCD
lcd.print(fhight);
lcd.setCursor(0, 1);
// 01234567890123456789
lcd.print("Weight= kg");
lcd.setCursor(9, 1);
lcd.print(fWeight+15); //วิธีแก้ hx711f รับได้ เพียง 50 kg *ต้องนำ Weight+15 = 50+15 = 65 kg ตามโจทย์
lcd.setCursor(0, 3); // กำหนดตำแหน่ง Scale บน LCD
// 01234567890123456789 // กำหนดตำแหน่ง Scale บน LCD
lcd.print("By..Pipat "); //ไม่ต้องแสดง ชื่อ.. บน LCD
//-----------------เพิ่ม คำนวณ BMI และ แสดงผล ใน LCD-------------------------
//ค่าดัชนีมวลกาย = น้ำหนักตัว [กิโลกรัม] ÷ ส่วนสูง [เมตร] ยกกำลังสอง
// ผู้หญิง น้ำหนัก 65 กิโลกรัม ส่วนสูง 155 เซนติเมตร
BMI = fWeight / ((fhight/100) * (fhight/100));
if(BMI >100) {
lcd.setCursor(0, 2); // กำหนดตำแหน่ง Scale บน LCD
// 01234567890123456789 // กำหนดตำแหน่ง Scale บน LCD
lcd.print("BMI Over"); //ไม่ต้องแสดง ชื่อ.. บน LCD
}else if(BMI >35) {
lcd.setCursor(0, 2); // กำหนดตำแหน่ง Scale บน LCD
// 01234567890123456789 // กำหนดตำแหน่ง Scale บน LCD
lcd.print("You = EXTREMELY "); //ไม่ต้องแสดง ชื่อ.. บน LCD
}else if(BMI <=34.9) {
lcd.setCursor(0, 2); // กำหนดตำแหน่ง Scale บน LCD
// 01234567890123456789 // กำหนดตำแหน่ง Scale บน LCD
lcd.print("You = OBESE"); //ไม่ต้องแสดง ชื่อ.. บน LCD
}else if(BMI <=29.9) {
lcd.setCursor(0, 2); // กำหนดตำแหน่ง Scale บน LCD
// 01234567890123456789 // กำหนดตำแหน่ง Scale บน LCD
lcd.print("You = OVERWEIGHT"); //ไม่ต้องแสดง ชื่อ.. บน LCD
}else if(BMI <=24.9) {
lcd.setCursor(0, 2); // กำหนดตำแหน่ง Scale บน LCD
// 01234567890123456789 // กำหนดตำแหน่ง Scale บน LCD
lcd.print("You = NORMAL"); //ไม่ต้องแสดง ชื่อ.. บน LCD
}else if(BMI < 18) {
lcd.setCursor(0, 2); // กำหนดตำแหน่ง Scale บน LCD
// 01234567890123456789 // กำหนดตำแหน่ง Scale บน LCD
lcd.print("You = UNDERWEIGHT"); //ไม่ต้องแสดง ชื่อ.. บน LCD
}else {
lcd.setCursor(0, 2); // กำหนดตำแหน่ง Scale บน LCD
// 01234567890123456789 // กำหนดตำแหน่ง Scale บน LCD
lcd.print("Recheck!!"); //ไม่ต้องแสดง ชื่อ.. บน LCD
}
delay(10); // this speeds up the simulation
}
//---------------------------------------------------------*/
}