#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <SD.h>
//Load Cell
#define DOUT A0
#define CLK A1
//HX711 scale(DOUT, CLK);
HX711 scale;
float calibration_factor = 4324.1; //420 43241
float GRAM;
//LCD
LiquidCrystal_I2C lcd(0x27,16,2);
//TOMBOL
#define cal_pin 2
#define up_pin 3
#define down_pin 4
#define save_pin 5
#define exit_pin 6
#define tare_pin 7
//Mode
int cal_mode, save_mode = 0;
//Micro SD
File myFile;
#define sd_pin 53
void setup() {
Serial.begin(9600);
//Load Cell
scale.begin(DOUT, CLK);
scale.set_scale();
scale.tare();
//LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Angkong Digital");
lcd.setCursor(0,1);
lcd.print("INSTIPER");
delay(3000);
lcd.clear();
//TOMBOL
pinMode(cal_pin, INPUT_PULLUP);
pinMode(up_pin, INPUT_PULLUP);
pinMode(down_pin, INPUT_PULLUP);
pinMode(save_pin, INPUT_PULLUP);
pinMode(exit_pin, INPUT_PULLUP);
pinMode(tare_pin, INPUT_PULLUP);
//Micro SD
Serial.print("Initializing SD card...");
lcd.setCursor(0,0);
lcd.print("Cek SD Card");
if (!SD.begin(53)) {
Serial.println("initialization failed!");
lcd.setCursor(0,1);
lcd.print("SD card error");
while (1);
}
Serial.println("initialization done.");
lcd.setCursor(0,1);
lcd.print("SD card good ");
delay(3000);
lcd.clear();
}
void loop() {
if(digitalRead(cal_pin) == LOW){
cal_mode = 1;
}
if(digitalRead(tare_pin) == LOW){
scale.set_scale();
scale.tare();
cal_mode = 0;
lcd.clear();
}
if(digitalRead(save_pin) == LOW){
baca_load();
String berat = String(GRAM);
myFile = SD.open("save.txt", FILE_WRITE);
if(myFile){
Serial.println("Simpan data");
myFile.println(berat);
myFile.close();
Serial.println("Save Done");
lcd.setCursor(0,0);
lcd.print("Save done");
delay(3000);
lcd.clear();
cal_mode = 0;
}
else{
Serial.println("Gagal simpan");
lcd.setCursor(0,0);
lcd.print("Save error");
delay(3000);
lcd.clear();
cal_mode = 0;
}
}
if(cal_mode == 1){
cal_load();
}
else{
baca_load();
}
}
void cal_load(){
lcd.clear();
scale.set_scale(calibration_factor);
GRAM = scale.get_units(), 4;
lcd.print("Kalibrasi");
Serial.print("Kalibrasi ");
lcd.setCursor(0,1);
lcd.print(GRAM);
Serial.print(GRAM);
lcd.setCursor(7,1);
lcd.print(calibration_factor);
Serial.print(" ");
Serial.println(calibration_factor);
if(digitalRead(up_pin) == LOW){ //Jika tombol up ditekan maka akan naik 1 angka
calibration_factor += 1;
lcd.setCursor(0,1);
lcd.print(GRAM);
Serial.print(GRAM);
lcd.setCursor(7,1);
lcd.print(calibration_factor);
Serial.print(" ");
Serial.println(calibration_factor);
}
else if(digitalRead(down_pin) == LOW){ //Jika tombol down ditekan maka akan turun 1 angka
calibration_factor -= 1;
lcd.setCursor(0,1);
lcd.print(GRAM);
Serial.print(GRAM);
lcd.setCursor(7,1);
lcd.print(calibration_factor);
Serial.print(" ");
Serial.println(calibration_factor);
}
else if(digitalRead(save_pin) == LOW){ //Jika tombol save ditekan maka nilai akan di simpan
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Sukses");
cal_mode = 0;
}
else if(digitalRead(exit_pin) == LOW){ //Jika tombol exit ditekan maka akan kembali ke halaman awal
cal_mode = 0;
lcd.clear();
}
else if(digitalRead(tare_pin) == LOW){ //Jika tombil tare ditekan maka akan mengkalibrasi posisi nol
scale.set_scale();
scale.tare();
cal_mode = 0;
lcd.clear();
}
delay(500);
if (Serial.available()) {
char temp = Serial.read();
if (temp == '+' || temp == 'a'){
calibration_factor += 1;
lcd.setCursor(0,1);
lcd.print(GRAM);
Serial.print(GRAM);
lcd.setCursor(7,1);
lcd.print(calibration_factor);
Serial.print(" ");
Serial.println(calibration_factor);
}
else if (temp == '-' || temp == 'z'){
calibration_factor -= 1;
lcd.setCursor(0,1);
lcd.print(GRAM);
Serial.print(GRAM);
lcd.setCursor(7,1);
lcd.print(calibration_factor);
Serial.print(" ");
Serial.println(calibration_factor);
}
else if (temp == 't'){
scale.set_scale();
scale.tare();
cal_mode = 0;
lcd.clear();
}
}
}
void baca_load(){
scale.set_scale(calibration_factor);
GRAM = scale.get_units(), 4;
lcd.setCursor(0,0);
lcd.print(GRAM);
Serial.println(GRAM);
delay(1000);
lcd.clear();
delay(100);
}