#include "HX711.h"
#include "LiquidCrystal_I2C.h"
#define DT A1
#define SCK A2
#define analogpin A3
#define base_transistor A6
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
int DutyCycle = 0;
int valor_pot = 0;
const uint8_t buttonPins[] = { 2, 3 };
HX711 scale;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void tara(){
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
Serial.begin(9600);
Serial.print("Leitura do Valor ADC: ");
Serial.println(scale.read()); // Aguarda até o dispositivo estar pronto
lcd.setCursor(0, 0);
lcd.print("Iniciando. ");
delay(100);
lcd.setCursor(0, 0);
scale.set_scale(419.98);
lcd.setCursor(0, 0);
lcd.print("Iniciando.. ");
delay(100);
scale.tare(10);
lcd.setCursor(0, 0);
lcd.print("Iniciando... ");
delay(100);
lcd.setCursor(0, 0);
lcd.print("Iniciando. ");
lcd.setCursor(0, 0);
lcd.print("Efetuado Tara. ");
delay(100);
lcd.print(" ");
delay(1000);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
}
void le_botoes (){
if (digitalRead(buttonPins[0]) == HIGH){
lcd.print("Manual");
}
if (digitalRead(buttonPins[1]) == HIGH){
lcd.print("Movimento");
}
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
}
void setup() {
scale.begin (DT, SCK);
pinMode(A3, INPUT);
pinMode(2, INPUT_PULLUP); //Botão auto
pinMode(3, INPUT_PULLUP); //Botão manual
pinMode(base_transistor,OUTPUT); //Define pino como saida para chavear o transistor
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(base_transistor, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
lcd.init();
lcd.backlight();
tara();
}
void movimento(){
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(base_transistor, HIGH);
lcd.setCursor(0, 0);
lcd.print(" Powersys ");
lcd.setCursor(0, 1);
lcd.print("Movimentar -- ");
lcd.setCursor(0, 1);
lcd.print("Movimentar | ");
lcd.setCursor(0, 1);
lcd.print("Movimentar / ");
lcd.setCursor(0, 1);
lcd.print("Movimentar -- ");
lcd.setCursor(0, 1);
lcd.print("Movimentar \ ");
lcd.print("Movimentar | ");
lcd.setCursor(0, 1);
lcd.print("Movimentar / ");
lcd.setCursor(0, 1);
lcd.print("Movimentar -- ");
lcd.setCursor(0, 1);
lcd.print("Movimentar | ");
lcd.setCursor(0, 1);
lcd.print("Movimentar / ");
lcd.setCursor(0, 1);
lcd.print("Movimentar | ");
lcd.setCursor(0, 1);
lcd.print("Movimentar / ");
lcd.setCursor(0, 1);
lcd.print("Movimentar -- ");
lcd.setCursor(0, 1);
lcd.print("Movimentar \ ");
lcd.setCursor(0, 1);
lcd.print("Movimentar | ");
lcd.setCursor(0, 1);
lcd.print("Movimentar / ");
lcd.setCursor(0, 1);
lcd.print("Movimentar -- ");
lcd.setCursor(0, 1);
lcd.print("Movimentar | ");
lcd.setCursor(0, 1);
lcd.print("Movimentar / ");
lcd.setCursor(0, 1);
lcd.print("Movimentar -- ");
delay(100);
lcd.setCursor(0, 1);
lcd.print(" ");
valor_pot = analogRead(analogpin); //Lê o valor do potenciômetro
Serial.println(valor_pot); //Imprime no monitor serial o valor lido do potenciômetro
DutyCycle = map(valor_pot,0,1023,0,255); //faz o remapeamento do valor para escala correta
analogWrite(base_transistor,DutyCycle); //Liga e desliga o pino de acordo com o DutyCycle
delay(100);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(base_transistor, LOW);
}
void pesagem(){
digitalWrite(11, LOW);
digitalWrite(12, LOW);
lcd.setCursor(0, 0);
lcd.print(" Powersys ");
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
lcd.setCursor(0, 1);
lcd.print("Coloque Amostra");
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
delay(1000);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
le_botoes();
delay(1000);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
lcd.setCursor(0, 1);
delay(2000);
lcd.print("Peso: ");
lcd.print(scale.get_units(10), 3);
lcd.println(" kg ");
delay(1000);
scale.power_down();
delay(5000);
scale.power_up();
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
}
void envio(){
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
lcd.setCursor(0, 0);
lcd.print(" Powersys ");
lcd.setCursor(0, 1);
lcd.print("Enviar Leitura.");
delay(1000);
Serial.print("Leitura Peso: ");
Serial.println(scale.get_units(10), 3);
lcd.setCursor(0, 1);
lcd.print("Enviando Leitura.");
delay(2000);
lcd.setCursor(0, 1);
lcd.print("Leitura Enviada.");
delay(200);
lcd.setCursor(0, 1);
lcd.print(" ");
}
void foto(){
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
lcd.setCursor(0, 0);
lcd.print("Favor registrar ");
lcd.setCursor(0, 1);
lcd.print("Foto ... ");
delay(2000);
lcd.setCursor(0, 0);
lcd.print(" Powersys ");
lcd.setCursor(0, 1);
lcd.print(" ");
delay(1000);
}
void loop(){
pesagem();
movimento();
foto();
envio();
}