#include "HX711.h"
#include <Wire.h>
#include "RTClib.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// OLED setup
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// RTC
RTC_DS1307 rtc;
// HX711
HX711 scale1, scale2, scale3, scale4;
// Pins
#define DT1 4
#define SCK1 5
#define DT2 18
#define SCK2 19
#define DT3 32
#define SCK3 33
#define DT4 25
#define SCK4 26
#define BUZZER 27
void setup() {
Serial.begin(115200);
// HX711
scale1.begin(DT1, SCK1);
scale2.begin(DT2, SCK2);
scale3.begin(DT3, SCK3);
scale4.begin(DT4, SCK4);
// RTC
Wire.begin(21, 22);
if (!rtc.begin()) {
Serial.println("RTC not found!");
}
// OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED not found!");
while (true);
}
display.clearDisplay();
pinMode(BUZZER, OUTPUT);
Serial.println("System Test Start...");
}
void loop() {
// Read time
DateTime now = rtc.now();
// Read sensors
long w1 = scale1.is_ready() ? scale1.read() : 0;
long w2 = scale2.is_ready() ? scale2.read() : 0;
long w3 = scale3.is_ready() ? scale3.read() : 0;
long w4 = scale4.is_ready() ? scale4.read() : 0;
// Serial output
Serial.print("Time: ");
Serial.print(now.hour()); Serial.print(":");
Serial.print(now.minute()); Serial.print(":");
Serial.println(now.second());
Serial.print("T1: "); Serial.print(w1);
Serial.print(" | T2: "); Serial.print(w2);
Serial.print(" | T3: "); Serial.print(w3);
Serial.print(" | T4: "); Serial.println(w4);
Serial.println("----------------------");
// OLED display
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,0);
display.print("Time: ");
display.print(now.hour());
display.print(":");
display.println(now.minute());
display.print("T1: "); display.println(w1);
display.print("T2: "); display.println(w2);
display.print("T3: "); display.println(w3);
display.print("T4: "); display.println(w4);
display.display();
// Buzzer test (beep every 5 sec)
digitalWrite(BUZZER, HIGH);
delay(200);
digitalWrite(BUZZER, LOW);
delay(3000);
}