#include "HX711.h"
#include <LiquidCrystal.h>
#include <ArduinoJson.h>
// HX711 circuit wiring for 4 load cells
const int LOADCELL_DOUT_PIN_1 = 2;
const int LOADCELL_SCK_PIN_1 = 3;
const int LOADCELL_DOUT_PIN_2 = 4;
const int LOADCELL_SCK_PIN_2 = 5;
const int LOADCELL_DOUT_PIN_3 = 6;
const int LOADCELL_SCK_PIN_3 = 7;
const int LOADCELL_DOUT_PIN_4 = 8;
const int LOADCELL_SCK_PIN_4 = 9;
HX711 scale1;
HX711 scale2;
HX711 scale3;
HX711 scale4;
// LCD pin configuration
const int rs = 10, en = 11, d4 = 12, d5 = 13, d6 = A0, d7 = A1;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2); // Initialize a 16x2 LCD
lcd.print("Initializing...");
scale1.begin(LOADCELL_DOUT_PIN_1, LOADCELL_SCK_PIN_1);
scale2.begin(LOADCELL_DOUT_PIN_2, LOADCELL_SCK_PIN_2);
scale3.begin(LOADCELL_DOUT_PIN_3, LOADCELL_SCK_PIN_3);
scale4.begin(LOADCELL_DOUT_PIN_4, LOADCELL_SCK_PIN_4);
lcd.clear();
lcd.print("Ready");
}
void loop() {
if (scale1.is_ready() && scale2.is_ready() && scale3.is_ready() && scale4.is_ready()) {
long reading1 = scale1.read() / 2100.0 * 5000.0;
long reading2 = scale2.read() / 2100.0 * 5000.0;
long reading3 = scale3.read() / 2100.0 * 5000.0;
long reading4 = scale4.read() / 2100.0 * 5000.0;
long totalWeight = reading1 + reading2 + reading3 + reading4;
float totalKg = totalWeight / 1000.0; // Convert to kilograms
// Create a JSON document
StaticJsonDocument<200> doc;
doc["Reading1"] = reading1;
doc["Reading2"] = reading2;
doc["Reading3"] = reading3;
doc["Reading4"] = reading4;
doc["TotalKg"] = totalKg;
// Serialize the JSON document to a string
String jsonString;
serializeJson(doc, jsonString);
// Print the JSON string to Serial Monitor
Serial.println(jsonString);
// Display the total weight on the LCD
lcd.clear();
lcd.print("Weight: ");
lcd.print(totalKg);
lcd.print(" kg");
} else {
Serial.println("One or more HX711 modules not found.");
lcd.clear();
lcd.print("Error: HX711");
}
delay(2000);
}