//=========================================================================LCD #1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
//=========================================================================ULTRAOSNIC #2
#define echoPin 11 //echo Pin
#define trigPin 12 //Trig Pin
long duration;
int distance;
float cm;
//=========================================================================RTC #3
#include "Arduino.h"
#include "uRTCLib.h"
uRTCLib rtc(0x68);
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//CHECKED
//=========================================================================SDcard #4
#include<SPI.h>
#include<SD.h>
File myFile;
//=========================================================================Keypad #5
#include <Keypad.h>
const uint8_t ROWS = 4;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
uint8_t rowPins[ROWS] = {39,38,37,36};
uint8_t colPins[COLS] = {35,34,33,32};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String inputKey = "";
//=========================================================================Thermal Printer #6
#include<SoftwareSerial.h>
SoftwareSerial Printer(3,13); //RX TX
//=====================================================================Weight Scale #7
#include <HX711.h>
HX711 scale;
#define calibration_factor -23980
#define LOADCELL_DOUT_PIN A0
#define LOADCELL_SCK_PIN A1
float weight = 0;
void setup()
{
Serial.begin(9600);
Printer.begin(9600);
delay(500);
//WeightScale
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(calibration_factor);
scale.tare();
//RealTimeClock
URTCLIB_WIRE.begin();
// Comment out below line once you set the date & time.
rtc.set(0, 56, 12, 6, 13, 1, 23);
// rtc.set(second, minute, hour, dayOfWeek, dayOfMonth, month, year)
// set day of week (1=Sunday, 7=Saturday)
//Ultrasonic
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Liquid Crystal Disyplay
lcd.init();
lcd.init();
lcd.backlight();
//============================================================================SETUP======BOOTING
lcd.setCursor(3,1);
lcd.print("Portable BMI");
lcd.setCursor(6,2);
lcd.print("Machine");
delay(2000);
lcd.clear();
/*
if (!SD.begin(4))
{
lcd.setCursor(3,2);
lcd.print("--Not Found--");
lcd.setCursor(4,3);
lcd.print("Walk-In Mode");
while (1);
}
lcd.setCursor(2,2);
lcd.print("Good");
delay(2000);
lcd.clear();
*/
}
void loop() //===================================VOID LOOOP ================
{
//Ultrasonic
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
int maxheight = 194.9;
cm = maxheight - cm;
char keys = keypad.getKey();
switch(keys)
{
case 'A':
checkbmistatus();
keys= "";
break;
case 'B':
lcd.clear();
char key = keypad.getKey();
lcd.setCursor(0,0);
lcd.print("Enter ID#:");
lcd.setCursor(2,1);
lcd.print("02-");
lcd.setCursor(0,3);
lcd.print("D) Enter");
if (key != NO_KEY)
{
if(key!='D')
{
inputKey = inputKey + key; //append to input storage
lcd.setCursor(5,1);
lcd.print(inputKey);
}
else {
myFile = SD.open(inputKey);
if (myFile){
// Printer.print("ID#:")
// Printer.print(InputKey);
// Printer.print("");
while (myFile.available()) {
// Printer.write(myFile.read());
// Printer.print("");
// Printer.print("");
}
myFile.close();
}
else
{
// if the file didn't open, print an error:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ID# not Exist!");
lcd.setCursor(2,1);
lcd.print("02-");
lcd.setCursor(5,1);
lcd.print(inputKey);
inputKey="";
delay(3000);
lcd.clear();
}
}
}
break;
case'D':
lcd.setCursor(0,0);
lcd.print("Portable BMI");
lcd.setCursor(0,1);
lcd.print("A)Check BMI ");
lcd.setCursor(0,2);
lcd.print("B)Print Old Status");
keys="";
break;
}
}//===============================================================================EndLoop
//=============================================VOID RTC
void RTC()
{
rtc.refresh();
lcd.setCursor(0,3);
lcd.print(daysOfTheWeek[rtc.dayOfWeek()-1]);
delay(1000);
}//end
//==========================AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA===================CHECK BMI STATUS
void checkbmistatus()
{
//WeightScale
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(calibration_factor);
scale.tare();
float height = 0;
float calculateBMI = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Please Stand on ");
lcd.setCursor(0,1);
lcd.print(" the Platform");
int x = 6;
while (x !=0)
{
weight = (scale.get_units());
height = (cm/100)*(cm/100);
calculateBMI = weight/height;
x--;
lcd.setCursor(9,2);
lcd.print(x);
delay(1000);
}
//Calculation BMI
weight = (scale.get_units()) /42 *(0.1);
height = (cm/100)*(cm/100);
calculateBMI = weight/height;
char BMI = " ";
if (calculateBMI < 18.5)
{
BMI = "Underweight";
delay(1000);
}
else if (calculateBMI >= 18.5 && calculateBMI <=24.9)
{
BMI = "Normal";
delay(1000);
}
else if (calculateBMI >= 25 && calculateBMI <=29.9)
{
BMI = "Overweight";
delay(1000);
}
else if (calculateBMI >=30 && calculateBMI <=34.9)
{
BMI = "Obese I";
delay(1000);
}
else if (calculateBMI >=35 && calculateBMI <=39.9)
{
BMI = "Obese II";
delay(1000);
}
else if (calculateBMI >=40)
{
BMI = "Obese III";
delay(1000);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Calculation");
lcd.setCursor(0,1);
lcd.print("Complete!");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(BMI);
lcd.setCursor(0,1);
lcd.print("Complete!");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Want to save?");
lcd.setCursor(0,1);
lcd.print("A = Yes");
lcd.setCursor(0,2);
lcd.print("B = No");
char keys = keypad.getKey();
if(keys== 'C');
{
if (keys != NO_KEY) {
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Enter ID#");
lcd.setCursor(0,2);
inputKey = inputKey + keys;
lcd.setCursor(0,3);
lcd.print(keys);
if(keys !='D') {
lcd.clear();
lcd.setCursor(0,0);
lcd.println("input ID#");
myFile = SD.open(inputKey, FILE_WRITE);
if (myFile) {
myFile.print(daysOfTheWeek[rtc.dayOfWeek()-1]);
myFile.print("Height:");
myFile.print(height);
myFile.print("Weight:");
myFile.print(weight);
myFile.print("BMI:");
myFile.print(BMI);
// close the file:
myFile.close();
lcd.clear();
lcd.setCursor(0,0);
lcd.println("ID# created!");
}
}
}
}
}//endloop