confirmando o sinal na entrada digital por 3 segundos e enao executar a funcao

Boa noite caros amigos. Montei um sistema em que quando alguem ligar para um celular que esta conctado a um foto acoplador que quando acionado ligar os 5v do arduino na porta A0 e executa um sistema que montei que pisca uma luz, dispara um rele e toca dois buzzers fazendo um barulho. O sistema esta fucionando quase que perfeitamente, o problema está no celular. O Que acontece é que eu quero que o sistema só funcione quando tocar o celular. O problema é que quando chega alguma mensagem da operadora ele está disparando também. O que eu queria era que assim que o celular tocasse ele confirmafa essa informacao por 3 segundos antes de ativar o sistema. Vou postar o code aqui.

int porta_rele1 = 7; //Porta ligada ao pino IN1 do modulo
int buzzer = 10; //buzzer1
int buzzer2 = 11; //buzzer2
int porta_botao1 = A0; //Porta ligada ao botao 1
int estadorele1 = 0; //Armazena o estado do rele - 0 (LOW) ou 1 (HIGH)
int leitura1 = 0; //Armazena o valor lido dos botoes
int led = 13; //Pino onde esta o led

void setup()
{

pinMode(porta_rele1, OUTPUT); //Define pinos para o rele como saida
pinMode(porta_botao1, INPUT); //Define pinos dos botoes como entrada
pinMode(led, OUTPUT); // saida para leds
pinMode(buzzer, OUTPUT); // saida para buzzer
pinMode(buzzer2, OUTPUT); //saída para buzzer2
digitalWrite(porta_rele1, LOW); //Estado inicial dos reles - desligados
digitalWrite(led, LOW); //Led apagado

}

void loop()
{

int estado = digitalRead(porta_botao1); // le valor da porta A0


if (estado == 1) //se o estado do botao mudar, aciona o sistema

{

digitalWrite(led, HIGH);
estadorele1 = !estadorele1; //Inverte o estado da porta

digitalWrite(porta_rele1, estadorele1 = 1); //disparo sirene 1
tone(buzzer, 1900);            //inicia buzzer
digitalWrite(buzzer2, HIGH);
digitalWrite(led, HIGH);     //acende o led
delay(200);
tone(buzzer, 1000);
digitalWrite(buzzer2, LOW);
digitalWrite(led, LOW);     //apaga o led
delay(200);
tone(buzzer, 1900);
digitalWrite(buzzer2, HIGH);
digitalWrite(led, HIGH);     //acende o led
delay(200);
digitalWrite(porta_rele1, estadorele1 = 0); //desliga sirene 

Exibições: 236

Responder esta

Respostas a este tópico

Vc poderia em vez de considerar o estado=1 para disparar usar ele como condição para incrementar um contador.

Se estado=1 incrementa

Se estado=0 zera.

Assim vc dispara se estado>100 por ex. Veja que numero convém.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço