#include "HX711.h"
HX711 scale;
HX711 scale1;
HX711 scale2;
//define pinos led
#define VD 13 //Define variavel VD associado a Sala Vazia e a Trabalhadores no Local
#define AM 6 //Define variavel AM
#define VM 12 //Define variavel VM associado a Emergencia
//define pino sirene e frequencia para sirene
#define Buzzer 11 //Define variavel Buzzer associado ao pino 11
#define mi 330 //Define variavel mi como frequência de 330 Hz
#define fa 900 //define variavel fa como frequência de 900 HZ
//define botoes
#define button_reset 10 //Define button como botão de reset associado ao pino 10
#define button_start 9 //define a entrada 9 como botão de inicio
#define button_em 8 //define reset emergencia
//variaveis
int cont; //Declara variavel inteira como cont
int cont2; //Declara variavel inteira como cont2
int ciclo; //Declara variavel inteira como ciclo
void setup() {
Serial.begin(115200); //inicializa porta serial
//saidas
pinMode(VD, OUTPUT); //Define modo de opereção do pino 13 como saida
pinMode(AM, OUTPUT); //Define o modo de operação do pino 6 como saida
pinMode(VM, OUTPUT); //Define o modo de operação do pino 12 como saida
//entradas
pinMode(9, INPUT_PULLUP); //define o modo de operação do pino 9 como entrada
pinMode(10, INPUT_PULLUP); //define o modo de operação do pino 9 como entrada
pinMode(8, INPUT_PULLUP); //define o modo de operação do pino 8 como entrada
//celula de carga
scale.begin(A1, A0); //inicia a porta da celula de carga1
scale1.begin(A2, A3); //inicia a porta da celula de carga2
scale2.begin(A5, A4); //inicia a porta da celula de carga3
}
void loop()
{
inicio:
int peso = scale.get_value();
int kg = peso/420;
int peso1 = scale1.get_value();
int kg1 = peso1/420;
int peso2 = scale2.get_value();
int kg2 = peso2/420;
int peso3 = kg + kg1 + kg2;
int peso_total = peso3/3;
Serial.println("pressione start para inicializar o sistema ");
delay(1000);
if (digitalRead(button_start) == LOW)
{
for(ciclo = 5000; ciclo > 0; ciclo --)
{
int peso = scale.get_value();
int kg = peso/420;
int peso1 = scale1.get_value();
int kg1 = peso1/420;
int peso2 = scale2.get_value();
int kg2 = peso2/420;
int peso3 = kg + kg1 + kg2;
int peso_total = peso3/3;
if (peso_total <= 10 ) //Serial faz a varredura continua, valor zero "Sala vazia"
{
digitalWrite(VD, HIGH); //Coloca a variável digital VD em nível lógico alto
digitalWrite(VM, LOW); //Coloca a variável digital VM em nível lógico baixo
Serial.print("Sala vazia: "); //Imprime no monitor serial o texto entre aspas duplas
Serial.print(peso_total); //Imprime no monitor serial o texto entre aspas duplas
Serial.println(" KG");
delay(500);
}
if (peso_total > 10 && peso_total <= 48 ) //serial detecta alguma alteração, valor diferente de zero mas ainda não atingiu o pico "Trabalhadores no local"
{
digitalWrite(VM, LOW); //Coloca a variável digital VM em nível lógico baixo
digitalWrite(VD, HIGH); //Coloca a variável digital VD em nível lógico alto
delay(300);
digitalWrite(VD, LOW);
delay(300);
Serial.print("Trabalhador No Local: "); //Imprime no monitor serial o texto entre aspas duplas
Serial.print(peso_total); //Imprime no monitor serial o texto entre parênteses
Serial.println(" KG");
delay(2000);
}
if (peso_total > 48 ) //Compara se a condição A0 e maior que o valor e se o botão está desligado
{ //Abertura da estrutura if (condicional)
digitalWrite(VD, LOW); //Coloca a variável digital VD em nível lógico baixo
digitalWrite(VM, HIGH); //Coloca a variável digital VD em nível lógico alto
delay(1000);
digitalWrite(VM, LOW); //Coloca a variável digital VD em nível lógico baixo
delay(1000);
Serial.println("CONTAGEM REGRESSIVA 15S: "); //Imprime no monitor serial o texto entre aspas duplas
Serial.print(peso_total); //Imprime no monitor serial o texto entre parênteses
Serial.println(" KG");
for (cont = 15; cont >= 0; cont--) //Inicia estrutura de repetição for (inicio, condição, incremento)
{
Serial.print(cont);
Serial.println("s");
delay(500);
digitalWrite(VM, HIGH); //Coloca a variável digital VM em nível lógico alto
delay(300);
digitalWrite(VM, LOW); //Coloca a variável digital VM em nível lógico baixo
delay(300);
tone(11, mi); //Executa a função tone no pino 13 utilizando o vetor melodia
delay(200);
if (digitalRead(button_reset) == LOW ) // Compara se a condição BOT e nivel logico alto
{
noTone(11);
delay(10);
goto inicio;
}
if(cont == 0)
{
for (cont2 = 1000; cont2 >=0; cont2 --)
{
delay(1000);
tone(11, fa);
digitalWrite(VM, HIGH); //Coloca a variável digital VM em nível lógico alto
delay(100);
digitalWrite(VM, LOW); //Coloca a variável digital VM em nível lógico baixo
delay(100);
if(digitalRead(button_em) == LOW)
{
noTone(11);
delay(10);
goto inicio;
}
} } } }
} }
}