#include <Wire.h>
#include <RTClib.h>
#include <SPI.h>
#include <SD.h>
#include <HX711.h>
// Inisialisasi pin data dan clock untuk HX711
const int LoadCellDoutPin = 2;
const int LoadCellSckPin = 3;
HX711 scale;
// Inisialisasi pin untuk modul RTC DS3231
RTC_DS3231 rtc;
// Inisialisasi pin untuk modul microSD
const int csPin = 10;
void setup() {
Serial.begin(9600);
// Inisialisasi RTC
if (!rtc.begin()) {
Serial.println("RTC Tidak Terbaca");
while (1);
}
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
Serial.println("Inisialisasi RTC Sukses");
// Inisialisasi microSD
pinMode(csPin, OUTPUT);
if (!SD.begin(csPin)) {
Serial.println("MicroSD Error atau Hilang");
while (1);
}
Serial.println("Inisialisasi MicroSD Sukses");
// Inisialisasi modul load cell
scale.begin(LoadCellDoutPin, LoadCellSckPin);
}
void loop() {
if (scale.is_ready()) {
// Baca berat dari sensor load cell dalam gram
float weightGram = scale.get_units(10); // 10 kali pembacaan untuk mengambil rata-rata
// Ubah berat ke kilogram
float weightKg = weightGram / 1000.0; // 1 kilogram = 1000 gram
// Baca waktu dari RTC
DateTime now = rtc.now();
// Tampilkan berat dan waktu di Serial Monitor
Serial.print("Waktu: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(" - Berat: ");
Serial.print(weightKg, 2); // Menampilkan berat dalam dua desimal
Serial.println(" kg");
// Simpan data ke file CSV di microSD
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) {
dataFile.print(now.year(), DEC);
dataFile.print('/');
dataFile.print(now.month(), DEC);
dataFile.print('/');
dataFile.print(now.day(), DEC);
dataFile.print(' ');
dataFile.print(now.hour(), DEC);
dataFile.print(':');
dataFile.print(now.minute(), DEC);
dataFile.print(':');
dataFile.print(now.second(), DEC);
dataFile.print(",");
dataFile.print(weightKg, 2); // Menyimpan berat dalam dua desimal
dataFile.close();
} else {
Serial.println("Gagal membuka file datalog.csv!");
}
} else {
Serial.println("Error: Tidak dapat menghubungi sensor load cell. Pastikan koneksi benar.");
}
delay(1000); // Tunggu satu detik sebelum membaca kembali
}