/*Programa:Piso Sensorial de Segurança, Sensor célula de carga (ultrasônico), Buzzer e Led 

  Autores: Evilyn Santos, Gabriela Rosa. 

  Entradas a conectar: ECHO-9| 

  Saídas a conectar: LEDs: VD-3|AM-6|VM-7|TRIGGER-10|SDA|SCL 

  Revisão: 18/10/2023*/ 
#include "HX711.h"
HX711 scale1;
HX711 scale2;
HX711 scale3;
HX711 scale4;
HX711 scale5;
HX711 scale6;
HX711 scale7;
HX711 scale8;

#define mi 330      //Define variavel mi como frequência de 330 Hz 
#define DO 262      //Define variavel do como frequência de 262 Hz 
#define re 294      //Define variavel ré como frequência de 294 Hz 
#define VD 13     //Define variavel VD associado a Sala Vazia e a Trabalhadores no Local 
#define VM 12       //Define variavel VM associado a Emergencia 
#define Buzzer 11   //Define variavel Buzzer associado ao pino 13 
#define button 10 	//Define button como botão associado ao pino 10
#define SCK1 A0
#define DT1 A1
#define SCK2 A2
#define DT2 A3
#define SCK3 A4
#define DT3 A5
#define SCK4 2
#define DT4 3
#define SCK5 4
#define DT5 5
#define SCK6 6
#define DT6 7
#define SCK7 8
#define DT7 9
#define SCK8 52
#define DT8 53
int tara;

void setup()                  //Inicia a função setup 
{ //Abertura da função setup

  Serial.begin(9600); 
  pinMode(VD, OUTPUT);        //Define o modo de operação do pino 6 como saida 
  pinMode(VM, OUTPUT);        //Define o modo de operação do pino 7 como saida 
  pinMode(Buzzer, OUTPUT);    //Define o modo de operação do pino 10 como saida 
  pinMode(10, INPUT_PULLUP);  //Define modo de operação do pino 12 como entrada com pull-up 

  scale1.begin(DT1,SCK1);
  scale2.begin(DT2, SCK2);
  scale3.begin(DT3, SCK3);
  scale4.begin(DT4, SCK4);
  scale5.begin(DT5, SCK5);
  scale6.begin(DT6, SCK6);
  scale7.begin(DT7, SCK7);
  scale8.begin(DT8, SCK8);

  scale1.set_scale();
  scale2.set_scale();
  scale3.set_scale();
  scale4.set_scale();
  scale5.set_scale();
  scale6.set_scale();
  scale7.set_scale();
  scale8.set_scale();

Serial.print("Leitura da Tara:  ");
//Serial.println(tara1.read());
Serial.println("Aguarde!");
Serial.println("Iniciando ...");
// Ajustar o valor adicionando o peso do sensor+ piso+ estrado de borracha.

Serial.println(scale1.read());   // Aguada até o dispositivo estar pronto
Serial.println(scale2.read());   // Aguada até o dispositivo estar pronto
Serial.println(scale3.read());   // Aguada até o dispositivo estar pronto
Serial.println(scale4.read());   // Aguada até o dispositivo estar pronto
Serial.println(scale5.read());   // Aguada até o dispositivo estar pronto
Serial.println(scale6.read());   // Aguada até o dispositivo estar pronto
Serial.println(scale7.read());   // Aguada até o dispositivo estar pronto
Serial.println(scale8.read());   // Aguada até o dispositivo estar pronto

/* Arrumar a tara*/
/*scale1.set_scale();     // Substituir o valor encontrado para escala
scale2.set_scale();     // Substituir o valor encontrado para escala
scale3.set_scale();     // Substituir o valor encontrado para escala
scale4.set_scale();     // Substituir o valor encontrado para escala
scale5.set_scale();     // Substituir o valor encontrado para escala
scale6.set_scale();     // Substituir o valor encontrado para escala
scale7.set_scale();     // Substituir o valor encontrado para escala
scale8.set_scale();     // Substituir o valor encontrado para escala

scale1.tare(5250);                // Fixa o peso como tara
scale2.tare(5250);                // Fixa o peso como tara
scale3.tare(5250);                // Fixa o peso como tara
scale4.tare(5250);                // Fixa o peso como tara
scale5.tare(5250);                // Fixa o peso como tara
scale6.tare(5250);                // Fixa o peso como tara
scale7.tare(5250);                // Fixa o peso como tara
scale8.tare(5250);                // Fixa o peso como tara*/
Serial.println("Posicione o piso e o estrado de borracha"); 
Serial.println("INICIALIZANDO PISO SENSORIAL");          //Imprime no monitor serial o texto entre aspas duplas 
delay(2000); 					            // Inicia comunicação na porta serial 

} 
			 					            //Fechamento da função setup 
void loop()
{    
  salto:

//Abertura da função loop 
/*
Serial.println(scale1.get_units(20), 3);
Serial.println(scale2.get_units(20), 3);
Serial.println(scale3.get_units(20), 3);
Serial.println(scale4.get_units(20), 3);
Serial.println(scale5.get_units(20), 3);
Serial.println(scale6.get_units(20), 3);
Serial.println(scale7.get_units(20), 3);
Serial.println(scale8.get_units(20), 3);
*/

 float peso1 = scale1.get_units();
 float peso2 = scale2.get_units();
 float peso3 = scale3.get_units();
 float peso4 = scale4.get_units();
 float peso5 = scale5.get_units();
 float peso6 = scale6.get_units();
 float peso7 = scale7.get_units();
 float peso8 = scale8.get_units();

 float pesoTotal = ( peso1 + peso2 + peso3 + peso4 + peso5 + peso6 + peso7 + peso8 ) /420;

if (pesoTotal <= 40 ) {    //Serial faz a varredura continua, valor zero "Sala vazia" 
    noTone(11);
    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 :" );
    Serial.print(pesoTotal);         //Imprime no monitor serial o texto entre aspas duplas 
    Serial.println("KG");
    delay(1000);

  }  								//Fechamento da estrutura if (condicional) 
  
  if (pesoTotal > 40 && pesoTotal <=80 )  //serial detecta alguma alteração, valor diferente de zero mas ainda não atingiu o pico "Trabalhadores no local" 
  {  //Abertura da estrutura if (condicional) 
    noTone(11);                        
    digitalWrite(VD, HIGH); 			//Coloca a variável digital VM em nível lógico baixo
    digitalWrite(VM, LOW);                  //Coloca a variável digital VD em nível lógico alto 
    Serial.print("Trabalhador No Local: ");  //Imprime no monitor serial o texto entre aspas duplas 
    Serial.print(pesoTotal);                    //Imprime no monitor serial o texto entre parênteses
    Serial.println(" KG");
    delay(1000); 
  } 

  

  if (pesoTotal >= 81)		//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);
    digitalWrite(VM, HIGH); 				//Coloca a variável digital VD em nível lógico alto
    delay(500); 
    digitalWrite(VD,LOW);
    digitalWrite(VM, HIGH); 					//Coloca a variável digital VD em nível lógico baixo
    delay(500); 
    digitalWrite(VD,LOW);
    digitalWrite(VM, HIGH); 				//Coloca a variável digital VD em nível lógico alto
    delay(500); 
    Serial.println("Trabalhador em perigo!!! ");  //Imprime no monitor serial o texto entre aspas duplas 
    Serial.println("CONTAGEM REGRESSIVA 15S: ");
    Serial.print(pesoTotal);                    //Imprime no monitor serial o texto entre parênteses
    Serial.println(" KG");
  
    
    int cont; 								//Declara variavel inteira como  cont
											//Inicio da contagem regressiva de 15 segundos
    for (cont = 15; cont >= 0; cont--) 		//Inicia estrutura de repetição for (inicio, condição, incremento)
    { 	
      				//Abertura da estrutura for (repetição)
      
      if(pesoTotal>=80 && digitalRead(button)==HIGH) 
      
      { 			
      Serial.println(cont); 

      delay(300); 
      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); 

      if(digitalRead(button)==LOW){
        Serial.println("Reiniciando!!!");
        goto salto;}

     }
    }

    if(cont==0 ){ //Compara a variavel cont é igual a 0 e se o botão esta ligado
      digitalWrite(VM, HIGH);
      digitalWrite(VD, LOW);
      while(digitalRead(button)==HIGH){
      tone(11, mi);  //Executa a função tone no pino 13 utilizando o vetor melodia 
      delay (100);
      }
    }

    }
    //Ajustar botao de resetar
    if(digitalRead(button)==HIGH){
      noTone(Buzzer);
      digitalWrite(VD, HIGH);
      digitalWrite(VM, LOW);
      Serial.println("Reiniciando!!!");
      delay(6000);
    }
  }



$abcdeabcde151015202530fghijfghij
$abcdeabcde151015202530fghijfghij