#include "HX711.h"
// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;
HX711 scale;
long click_A = 0; // momento do último click do botão A (PD7)
long click_B = 0; // momento do último click do botão B
long click_C = 0; // momento do último click do botão C
long click_D = 0; // momento do último click do botão D
char last_A = (1 << PD7); // último estado do botão A (PD7)
char last_B = (1 << PD6); // último estado do botão B
char last_C = (1 << PD5); // último estado do botão C
char last_D = (1 << PD4); // último estado do botão D
long timer_scale = 0; // armazena o tempo do timer para debaunce do scale da lib HX711
// realiza a leitura dos botões
void read_buttons() {
// leitura dos pinos dos botões
char read_A = PIND & (1 << PD7);
char read_B = PIND & (1 << PD6);
char read_C = PIND & (1 << PD5);
char read_D = PIND & (1 << PD4);
// debounce do botão A (PD7)
if (read_A != last_A && (millis() - click_A) > 50)
{
click_A = millis();
// Inicia a calibração da célula de carga
if(read_A == 0) {
// Exibindo os valores brutos lidos
long reading = scale.read();
Serial.print("HX711 reading A: ");
Serial.println(reading);
// fazer as contas
// result = (float)reading - outro / (float)100;
// scale.set_scale(result);
}
last_A = read_A;
}
// debounce do botão B (PD6)
if (read_B != last_B && (millis() - click_B) > 50)
{
click_B = millis();
// Inicia a calibração da célula de carga
if(read_B == 0) {
// Exibindo os valores brutos lidos
long reading = scale.read();
Serial.print("HX711 reading B: ");
Serial.println(reading);
}
last_B = read_B;
}
// debounce do botão C (PD5)
if (read_C != last_C && (millis() - click_C) > 50)
{
click_C = millis();
// Inicia a calibração da célula de carga
if(read_C == 0) {
// Exibindo os valores brutos lidos
long reading = scale.read();
Serial.print("HX711 reading C: ");
Serial.println(reading);
}
last_C = read_C;
}
// debounce do botão D (PD4)
if (read_D != last_D && (millis() - click_D) > 50)
{
click_D = millis();
// Inicia a calibração da célula de carga
if(read_D == 0) {
// Exibindo os valores brutos lidos
long reading = scale.read();
Serial.print("HX711 reading D: ");
Serial.println(reading);
}
last_D = read_D;
}
}
void setup() {
Serial.begin(57600);
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
DDRD |= 0b00000011;
}
void loop() {
if ((millis() - timer_scale) > 1000) {
timer_scale = millis();
if (scale.is_ready()) {
// A cada 0.01 Kg (10g), reading = 4
// long reading = scale.read();
// Serial.print("HX711 reading: ");
// Serial.println(reading);
} else {
Serial.println("HX711 not found.");
}
}
read_buttons();
delay(1);
}