#include <SPI.h>
//#include <SD.h>
#include "HX711.h"
#include <LiquidCrystal.h> // Incluindo a biblioteca LiquidCrystal
#define DOUT A0
#define CLK A1
#define BUTTON_PIN 3 // Pino do botão
HX711 balanca;
LiquidCrystal lcd (2,5,6,7,8,9);; // Pinos do LCD: RS, E, D4, D5, D6, D7
const float chipSelect = 4;
float calibration_factor = 43150;
bool tareRequested = false;
unsigned long tareStartTime = 0;
const unsigned long tareDuration = 2000; // Duração da mensagem de tara em milissegundos
bool showStartupMessage = true;
unsigned long startupMessageDuration = 4000; // Duração da mensagem inicial em milissegundos
void setup() {
Serial.begin(9600);
balanca.begin(DOUT, CLK);
lcd.begin(16, 2); // Inicializa o LCD com 16 colunas e 2 linhas
// Mostrar a mensagem inicial por um tempo definido
lcd.print(" Teste Estatico ");
lcd.setCursor(4, 1);
lcd.print("Caravana ");
delay(startupMessageDuration);
lcd.clear();
// Mostrar a segunda mensagem inicial
lcd.print("aperte 't' ou botao");
delay(startupMessageDuration);
lcd.clear();
balanca.set_scale(calibration_factor);
balanca.tare();
pinMode(BUTTON_PIN, INPUT_PULLUP); // Configura o pino do botão como entrada com pull-up interno
//while (!Serial) {
// ;
// }
// Serial.print("Initializing SD card...");
//if (!SD.begin(chipSelect)) {
// Serial.println("Card failed, or not present");
// while (1);
// }
// Serial.println("Card initialized.");
}
void loop() {
Serial.print("Peso: ");
float peso = balanca.get_units() * -1;
Serial.print(peso, 3);
Serial.println(" kg");
lcd.setCursor(0, 0); // Configura o cursor na primeira linha, primeira coluna
lcd.print("Peso: "); // Limpa a linha do LCD
lcd.setCursor(6, 0); // Configura o cursor na primeira linha, sétima coluna
lcd.print(peso, 3); // Exibe o peso com 3 casas decimais
lcd.print(" Kg ");
//lcd.setCursor(11, 1); // Configura o cursor na primeira linha, sétima coluna
delay(500);
// Verifica se o botão foi pressionado
if (digitalRead(BUTTON_PIN) == LOW) {
tareRequested = true;
}
// Verifica se 't' foi digitado no monitor serial
if (Serial.available()) {
char temp = Serial.read();
if (temp == 't' || temp == 'T') {
tareRequested = true;
}
}
// Se tara foi solicitada, realiza a tara e mostra um aviso no display
if (tareRequested) {
balanca.tare();
Serial.println("Balança tarada");
lcd.setCursor(0, 1);
lcd.print("Tara realizada ");
tareStartTime = millis();
tareRequested = false;
}
// Verifica se é hora de limpar a mensagem de tara no display
if (millis() - tareStartTime >= tareDuration) {
lcd.setCursor(0, 1);
lcd.print(" "); // Limpa a linha do display
}
// Salvar dados no cartão SD
// File dataFile = SD.open("datalog.txt", FILE_WRITE);
//if (dataFile) {
// String dataString = String(millis()) + "," + String(peso, 3);
// dataFile.println(dataString);
// dataFile.close();
// Serial.println("Data saved: " + dataString);
// } else {
//Serial.println("Error opening datalog.txt");
}
// Enviar dados para o Serial Plotter
Serial.println(peso);
}