#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <SD.h>
#include "uRTCLib.h"
//#include <TinyGPS.h>
//Load Cell
#define DOUT A0
#define CLK A1
//HX711 scale(DOUT, CLK);
HX711 scale;
float calibration_factor = 420; //420=X 43241=X 432.41=1 KG 864.8=V 2062.5 = 5 KG(timbangan) 3156.593 = 7.3 KG (TBS)
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
//RTC;
uRTCLib rtc(0x68);
char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
String tanggal, bulan, tahun, jam, menit, detik;
//GPS
//float lat = 0;
//float lon = 0;
//TinyGPS gps;
//String latitude, longitude;
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(sd_pin)) {
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 OK ");
delay(3000);
lcd.clear();
//RTC
URTCLIB_WIRE.begin();
//GPS
// Serial1.begin(9600);
}
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();
// bacaGPS();
String berat = String(GRAM);
myFile = SD.open("save.txt", FILE_WRITE);
if(myFile){
Serial.println("Simpan data");
myFile.print(tanggal);
myFile.print("/");
myFile.print(bulan);
myFile.print("/");
myFile.print(tahun);
myFile.print(",");
myFile.print(jam);
myFile.print(":");
myFile.print(menit);
myFile.print(":");
myFile.print(detik);
myFile.print(",");
myFile.print(berat);
myFile.print(",");
// myFile.print(latitude);
myFile.print(",");
// myFile.println(longitude);
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);
lcd.print(scale.get_value());
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(){
bacaWaktu();
scale.set_scale(calibration_factor);
GRAM = scale.get_units(), 4;
lcd.setCursor(0,1);
lcd.print("Berat ");
lcd.setCursor(7,1);
lcd.print(GRAM);
Serial.print(" | ");
Serial.print("Berat : ");
Serial.println(GRAM);
delay(1000);
lcd.clear();
delay(100);
}
void bacaWaktu(){
rtc.refresh();
tanggal = rtc.day();
bulan = rtc.month();
tahun = rtc.year();
jam = rtc.hour();
menit = rtc.minute();
detik = rtc.second();
lcd.setCursor(0,0);
lcd.print(tanggal);
lcd.print("/");
lcd.print(bulan);
lcd.print("/");
lcd.print(tahun);
lcd.print(" ");
lcd.print(jam);
lcd.print(":");
lcd.print(menit);
Serial.print("Current Date & Time: ");
Serial.print(rtc.year());
Serial.print('/');
Serial.print(rtc.month());
Serial.print('/');
Serial.print(rtc.day());
Serial.print(" (");
Serial.print(daysOfTheWeek[rtc.dayOfWeek()-1]);
Serial.print(") ");
Serial.print(rtc.hour());
Serial.print(':');
Serial.print(rtc.minute());
Serial.print(':');
Serial.print(rtc.second());
// delay(1000);
}
//void bacaGPS(){
// while(Serial1.available()){
// if(gps.encode(Serial1.read())){
// gps.f_get_position(&lat,&lon);
// Serial.print("Position: ");
// Serial.print("Latitude: ");
// Serial.print(lat,6);
// Serial.print(",");
// Serial.print("Longitude: ");
// Serial.println(lon,6);
// latitude = lat;
// longitude = lon;
// }
// }
//}