#include <LiquidCrystal.h>
#include "HX711.h"
// HX711 pins
#define DT A0
#define SCK A1
// LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(PB0, PB1, PB10, PB11, PB12, PB13);
// Pins for input/output
const int tareButtonPin = PA2;
const int ledPin = PA3;
// HX711 object
HX711 scale;
// ✅ Updated calibration factor
float calibration_factor = 1.0;
void setup() {
Serial.begin(9600);
pinMode(tareButtonPin, INPUT_PULLUP); // Button uses pull-up
pinMode(ledPin, OUTPUT);
lcd.begin(16, 2);
lcd.print("Weighing Scale");
delay(1500);
lcd.clear();
// Start HX711 with calibration
scale.begin(DT, SCK);
scale.set_scale(calibration_factor);
scale.tare(); // Zero out the scale
lcd.setCursor(0, 0);
lcd.print("Taring...");
delay(1500);
lcd.clear();
Serial.println("Scale ready.");
Serial.print("Calibration factor: ");
Serial.println(calibration_factor);
}
void loop() {
// Tare on button press
if (digitalRead(tareButtonPin) == LOW) {
lcd.setCursor(0, 0);
lcd.print("Taring...");
scale.tare();
delay(1500);
lcd.clear();
}
// Get average weight reading
float weight = scale.get_units(5); // average of 5 readings
// Show weight on LCD
lcd.setCursor(0, 0);
lcd.print("Weight: ");
lcd.setCursor(8, 0);
lcd.print(weight, 1); // 1 decimal point
lcd.print(" g");
// LED: ON if weight present
if (abs(weight) < 1.0) {
digitalWrite(ledPin, LOW); // weight is near zero
} else {
digitalWrite(ledPin, HIGH); // weight detected
}
delay(500);
}
Loading
stm32-bluepill
stm32-bluepill