#include <LedControl.h>
#include <Wire.h>
#include <RTClib.h>
// --- SETUP PIN MAX7219 ---
LedControl lc = LedControl(12, 11, 10, 1);
// --- SETUP MODUL JAM (RTC DS1307 khusus Wokwi) ---
RTC_DS1307 rtc;
float dataIn = 0.0;
String namaPemakai = "Operator 1";
const int buttonPrintPin = 6;
int buttonState = 0;
void setup() {
Serial.begin(9600);
lc.shutdown(0, false);
lc.setIntensity(0, 7);
lc.clearDisplay(0);
pinMode(buttonPrintPin, INPUT_PULLUP);
Wire.begin();
if (!rtc.begin()) {
Serial.println("Modul RTC tidak ditemukan!");
} else {
// Set waktu otomatis ke waktu kompilasi untuk simulasi
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
Serial.println("Simulasi Siap!");
Serial.println("Ketik angka berat (misal: 12.5) di Serial Monitor lalu tekan Enter.");
}
void loop() {
// --- A. BACA DATA DARI SERIAL MONITOR ---
if (Serial.available() > 0) {
dataIn = Serial.parseFloat();
// Bersihkan buffer serial dari karakter sisa (seperti enter)
while(Serial.available() > 0) {
Serial.read();
}
Serial.print("Data Timbangan Masuk: ");
Serial.println(dataIn);
// --- B. TAMPILKAN KE MAX7219 ---
tampilkanKeMAX7219(dataIn);
}
// --- C. LOGIKA TOMBOL PRINT ---
buttonState = digitalRead(buttonPrintPin);
if (buttonState == LOW) {
cetakStruk();
delay(1000); // Debounce
}
}
// --- FUNGSI KHUSUS MENCETAK ANGKA KE MAX7219 ---
void tampilkanKeMAX7219(float nilai) {
lc.clearDisplay(0);
String valStr = String(nilai, 2); // Ubah angka menjadi teks dengan 2 digit di belakang koma
int posisiLED = 0; // Posisi digit mulai dari paling kanan (0)
for (int i = valStr.length() - 1; i >= 0; i--) {
if (posisiLED > 7) break; // Layar MAX7219 hanya punya 8 digit
if (valStr[i] == '.') {
if (i > 0) {
lc.setChar(0, posisiLED, valStr[i-1], true);
i--;
posisiLED++;
}
} else {
lc.setChar(0, posisiLED, valStr[i], false);
posisiLED++;
}
}
}
// --- FUNGSI UNTUK MENCETAK STRUK ---
void cetakStruk() {
DateTime now = rtc.now();
Serial.println("\n=============================");
Serial.println(" BUKTI TIMBANGAN ");
Serial.println("=============================");
Serial.print("Tanggal : ");
Serial.print(now.year(), DEC); Serial.print('/');
Serial.print(now.month(), DEC); Serial.print('/');
Serial.println(now.day(), DEC);
Serial.print("Waktu : ");
Serial.print(now.hour(), DEC); Serial.print(':');
Serial.print(now.minute(), DEC); Serial.print(':');
Serial.println(now.second(), DEC);
Serial.print("Pemakai : ");
Serial.println(namaPemakai);
Serial.println("-----------------------------");
Serial.print("BERAT : ");
Serial.print(dataIn);
Serial.println(" KG");
Serial.println("=============================\n");
}