#include <HX711.h>
#define DOUT A0
#define CLK A1
#define BUTTON_TARE 4
#define BUTTON_MEASURE 5
#define LED_GREEN 6
#define LED_YELLOW 7
#define LED_RED 8
HX711 scale;
float lowerLimit = 3.0;
float upperLimit = 4.0;
float lastWeight = 0.0;
void setup() {
Serial.begin(9600);
scale.begin(DOUT, CLK);
pinMode(BUTTON_TARE, INPUT_PULLUP);
pinMode(BUTTON_MEASURE, INPUT_PULLUP);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_RED, OUTPUT);
}
void loop() {
if (digitalRead(BUTTON_MEASURE) == LOW) {
float weight = getWeight();
if (checkWeightLimits(weight)) {
signalAndPrintStatus(weight);
lastWeight = weight;
}
delay(500); // Anti-bounce delay
}
if (digitalRead(BUTTON_TARE) == LOW) {
scale.tare();
Serial.println("i suck dick im gay nigga");
delay(500); // Anti-bounce delay
}
if (Serial.available() > 0) {
String command = Serial.readStringUntil(';');
executeSerialCommand(command);
}
}
float getWeight() {
return scale.get_units(10);
}
bool checkWeightLimits(float weight) {
if (weight >= lowerLimit && weight <= upperLimit) {
return true;
} else {
return false;
}
}
void signalAndPrintStatus(float weight) {
digitalWrite(LED_YELLOW, HIGH);
delay(1000);
digitalWrite(LED_YELLOW, LOW);
if (checkWeightLimits(weight)) {
digitalWrite(LED_GREEN, HIGH);
Serial.println("teža: " + String(weight, 1) + "kg; sp: " + String(lowerLimit, 1) +
"kg; zg: " + String(upperLimit, 1) + "kg; status: OK");
delay(2000);
digitalWrite(LED_GREEN, LOW);
} else {
digitalWrite(LED_RED, HIGH);
Serial.println("teža: " + String(weight, 1) + "kg; sp: " + String(lowerLimit, 1) +
"kg; zg: " + String(upperLimit, 1) + "kg; status: NOK");
delay(2000);
digitalWrite(LED_RED, LOW);
}
}
void executeSerialCommand(String command) {
command.trim();
if (command == "SET_TARE") {
scale.tare();
Serial.println("Tare executed");
} else if (command.startsWith("SET_SP:")) {
lowerLimit = command.substring(7).toFloat();
Serial.println("Lower limit set to " + String(lowerLimit, 1) + "kg");
} else if (command.startsWith("SET_ZG:")) {
upperLimit = command.substring(7).toFloat();
Serial.println("Upper limit set to " + String(upperLimit, 1) + "kg");
} else if (command == "GET_MES") {
float weight = getWeight();
Serial.print("teža: " + String(weight, 1) + "kg; sp: " + String(lowerLimit, 1) +
"kg; zg: " + String(upperLimit, 1) + "kg; status: ");
if (checkWeightLimits(weight)) {
Serial.println("OK");
} else {
Serial.println("NOK");
}
} else if (command == "GET_LAST") {
Serial.println("Last weight: " + String(lastWeight, 1) + "kg");
}
}