Alarme para valvulas

Boas

estou a tentar com muita vontade mas não esta fácil .
primeiro tenho de vos dizer que sou muito novo nisto ;

Vou dizer o que quero fazer :

alarme para controlar 5 válvulas //ainda só tem duas ligadas
mas depois das duas é mais fácil

O alarme seria para funcionar desta maneira ;

primeiro se a válvula"s não arranca ele não liga
depois de obter o primeiro pulso de cada válvula vai armando válvula por válvula
isto para que possa ter válvulas paradas por opção e o alarme não estar a tocar

exp: o alarme esta nas duas válvulas mas a primeira não rodou ela só liga o alarme na segunda
se a segunda parar ele toca mas não toca por a primeira estar parada .

se todas as válvulas estão a trabalhar ele avisa quando alguma parar mesmo que volte a rodar ele fia armado ate desligar /reset do arduino

espero ter explicado de modo que poção entender

vou por o que já fiz para ver se podem dar uma ajuda .

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define sensor 7    // Sensor da valvula 
#define sensor1 9   // Sensor da valvula 1
#define ledVerde 6    // led verde 
#define ledVermelho 8 // led vermelho 
#define buzzer 10     // buzzer

unsigned long momento;  //tempo de espera para sensor valvula
unsigned long momento1; //tempo de espera para sensor valvula1

unsigned long delayPisca; //tempo de espera para piasca led valvula
unsigned long delayPisca1; //tempo de espera para pisca led valvula1

void controlValvula();
void controlValvola1();

void setup() {
                   // nota de ligado 
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print(" HELLO YOUCORK ");
  delay (2000);
  
  
  pinMode(buzzer,OUTPUT);
  pinMode(sensor , INPUT_PULLUP);
  pinMode(sensor1 , INPUT_PULLUP);
  pinMode(ledVermelho,OUTPUT);
  pinMode(ledVerde,OUTPUT);
     
}

void loop() {

 controlValvula();
 controlValvula1();
} 

 void controlValvula(){
 static unsigned long delayPisca;
   
  if (digitalRead(sensor)== LOW){ //espera pelo pulso do sensor 
    momento = millis(); 
      lcd.setCursor(0,0);
      lcd.print("  VALVULA OK    ");   
     }
     if
       ( momento == 0){
        digitalWrite(ledVerde,HIGH);  //espera pelo primeiro pulso do sensor
        lcd.setCursor(0,0);
        lcd.print("   EM ESPERA  "); 
     }else{
        digitalWrite(ledVerde,LOW);   // fim da espera pelo pulso do sensor
            
        }

       if 
          (momento >0 && (millis()) -  momento > 10000){ //disparo do alarme em 10 segundos 
       if ((millis () - delayPisca)< 500 ){
           digitalWrite(ledVermelho, HIGH); 
           digitalWrite(buzzer, HIGH);
       }else{
           digitalWrite(ledVermelho, LOW); 
           digitalWrite(buzzer, LOW);
           lcd.setCursor(0,1);
           lcd.print("ALARME VALVULA ");   
           }
       if ((millis() - delayPisca) >= 1000){
           delayPisca = millis ();
           }       
          }
 }
 
 void controlValvula1(){
 static unsigned long delayPisca1;
   
  if (digitalRead(sensor1)== LOW){ //espera pelo pulso do sensor1 
    momento1 = millis(); 
      lcd.setCursor(0,0);
      lcd.print("  VALVULA 1 OK   ");   
     }
     if
       ( momento1 == 0){              //espera pelo primeiro pulso do sensor1            
        digitalWrite(ledVerde,HIGH);
        lcd.setCursor(0,0);
        lcd.print("   EM ESPERA  "); 
     }else{
        digitalWrite(ledVerde,LOW);   // fim da espera pelo pulso do sensor1 
              
        }

       if 
          (momento1 >0 && (millis()) -  momento1 > 10000){ //disparo do alarme em 10 segundos
       if ((millis () - delayPisca1)< 500 ){
           digitalWrite(ledVermelho, HIGH); 
           digitalWrite(buzzer, HIGH);
       }else{
           digitalWrite(ledVermelho, LOW); 
           digitalWrite(buzzer, LOW);
           lcd.setCursor(0,1);
           lcd.print("ALARME VALVULA 1");   
           }
       if ((millis() - delayPisca1) >= 1000){
           delayPisca1 = millis ();
           }       
          }
 }

Espero que não vos faça rir muito mas foi a maneira que consegui de chegar perto do que queria fazer

já descobri

tenho o buzzer a desligar se volta a rodar
obrigado na mesma

else{
           digitalWrite(ledVermelho, LOW); 
           digitalWrite(buzzer, LOW);
           lcd.setCursor(0,1);
           lcd.print("ALARME VALVULA ");

Mas já agora fica a pergunta de como posso melhorar .

desde já agradeço .

:smiley: :smiley:

Porque é que tens duas funções exactamente iguais? Podes passar parametros para as funções de forma a que uses apenas uma variável.

Esse nome do projecto é um pouco assustador... mas eu não tive boas experiências no mundo da cortiça. :stuck_out_tongue:

Boas

O nome é mesmo porque isto vai ser para instalar numa fabrica de cortiça .

a lógica é mesmo para não continuar a ter experiências assustadoras cada vez que uma (válvula rotativa) parar sem que ninguém de por nada .

Quanto à tua ajuda vou ver se entendi :

não faz falta ter a controlValvula e controlValvula1 é isso ?

pensei que teria de ter as duas separadas para cada uma ter o seu void loop .

mas vou tentar .

e obrigado pela dica todas são úteis para quem está a aprender a gatinhar nestas andanças
já agora se poderes e quiseres dar uma ajuda de como podia ficar dava jeito .

Acho que se calhar deverias pensar em algo um pouco mais fiável que um Arduino se é para instalar num ambiente industrial...

Sim, podes ter apenas uma função e passares as variáveis que necessitas para correr o código.

tens toda a razão mas isto para já é para fazer um teste depois no ambiente industrial super adverso que é o mundo da cortiça será feito de outra maneira .

Ok... só por curiosidade, estás na zona de Sta. Maria da Feira?

não Lisboa