#include<Keypad.h>
#include<LiquidCrystal_I2C.h>
const byte R = 4, C = 4;
char keys[R][C] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
int wait = 2500;
byte rpin[R] = {4, 3, 2, 1};
byte cpin[C] = {8, 7, 6, 5};
Keypad keypad = Keypad(makeKeymap(keys), rpin, cpin, R, C);
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
int W = 0, H = 0;
float BMI;
char state, ent = '#', rst = 'A', del = 'C';
String strw = "", strh = "";
void setup(){
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Kalkulator BMI");
delay(5000);
state = rst;
}
void loop(){
if(state == rst){
lcd.clear();
strw = ""; strh = "";
lcd.setCursor(0, 0);
lcd.print("Isi berat");
lcd.setCursor(0, 1);
lcd.print("Lalu tekan #");
delay(wait);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Berat (kg): ");
while((state = keypad.waitForKey()) != ent){
strw += state;
lcd.print(state);
}
if(state == ent){
W = toint(strw);
delay(wait);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Isi tinggi");
lcd.setCursor(0, 1);
lcd.print("Lalu tekan #");
delay(wait);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tinggi (cm): ");
while((state = keypad.waitForKey()) != ent){
strh += state;
lcd.print(state);
}
}
if(state == ent){
H = toint(strh);
delay(wait);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hasil:");
lcd.setCursor(7, 0);
BMI = cnt(W, H);
lcd.print(BMI);
lcd.setCursor(0, 1);
if(BMI >= 30) lcd.print("OBESITAS");
else if(BMI >= 25) lcd.print("BERAT BERLEBIH");
else if(BMI >= 18.5) lcd.print("BERAT IDEAL");
else lcd.print("BERAT RENDAH");
}
}
delay(7000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tekan A");
lcd.setCursor(0, 1);
lcd.print("Untuk ulang");
state = keypad.waitForKey();
lcd.clear();
}
int toint(String s){
int ret = 0;
for(int i = 0; i < s.length(); ++i){
if(i == 0) ret = s[i] - '0';
else ret = ret * 10 + (s[i] - '0');
}
return ret;
}
double cnt(int w, int h){
double ret = w;
ret *= 100;
ret /= h;
ret *= 100;
ret /= h;
return ret;
}