#include <HX711.h>
#include <Servo.h>
HX711 scale;
Servo servo;
int dispense_button = 0;
void setup() {
servo.attach(9);
servo.write(90);
Serial.begin(9600);
scale.begin(A1, A0);
scale.wait_ready();
delay(500); // seems to give initial false reading otherwise
}
float map_float(
float x, float in_min, float in_max, float out_min, float out_max
) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
int SAMPLES = 10;
int MAX_READING = 1890;
float EMPTY_THRESHOLD = 0.5f;
float REFILL_THRESHOLD = 1.5f;
float read_weight(HX711 scale) {
return map_float(scale.get_units(SAMPLES), 0, MAX_READING, 0, 5);
}
void loop() {
if (read_weight(scale) < EMPTY_THRESHOLD) {
servo.write(0);
while (read_weight(scale) < REFILL_THRESHOLD) {
delay(100);
}
}
while (digitalRead(dispense_button) == LOW) {
servo.write(0);
delay(100);
}
servo.write(90);
delay(100);
}