Ir ao conteúdo
  • Cadastre-se

Arduino Contador regressivo para desativar alarme


Posts recomendados

Bem, estou desenvolvendo um alarme para minha casa, o que preciso fazer é o seguinte:

 

Coloquei um sensor de abertura do portão para quando eu chegar de carro, e gostaria de colocar um tempo de 30 segundos para desarme do alarme sem que o mesmo disparasse...

Algo como "Invasão detectada" digite a senha... 30...29..28......

 

Para acionar eu consegui fazer, para acionar o alarme ele me da X segundos para que seja ativado, mas o inverso disso não consegui fazer pois fica travado dentro do "WHILE" e trava o teclado (claro....🙃)

Spoiler

void ativar_alarme(){
				  lcd.setCursor(0,0);
                  lcd.print(">ATIVAR ALARME      ");

                  teclaPressionada = meuTeclado.getKey();
                  if (teclaPressionada =='A'){        
                  lcd.clear();
                  sub_alarme++;}

            switch(sub_alarme){
                 case 1:
                  lcd.clear();
                  lcd.setCursor(0,0);
                  lcd.print("O alarme sera");
                  lcd.setCursor(0,1);
                  lcd.print("ativado em");
                 
                  int countdown = 10;        //CONTAGEM REGRESSIVA DE 10 SEGUNDOS ANTES DE ATIVAR O ALARME
                  while (countdown != 0) {
                    lcd.setCursor(13,1);
                    lcd.print(countdown);
                    countdown--;
                    tone(buzzer, 700, 100);
                    delay(1000);
                  }
                  lcd.clear();
                  lcd.setCursor(3,3);
                  lcd.print("Alarme Ativado!");
                  break;
            }           
}

 

 

porém o que fiz ele já dispara e já entra na função de senha , apos digitar a senha ele desliga, tentei usar o  millis() o timerOne, mas sem sucesso , alguma sugestão de como eu executo esses "30" segundos sem o teclado travar no delay ou while ??

 

 

Estou na pesquisa ainda.... se eu usar um for dessa maneira:

for (int i = 0; i < 30; i++)

{

ativa_alarme()

}

 

Esta correto? 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
6 horas atrás, Bruno R Ruinho disse:

como eu executo esses "30" segundos sem o teclado travar no delay ou while

Use interrupt externa. A de mudança de nível nos pinos serve. (não explico como programá-la)
 

interrupt tecla() //teclado destrava sempre
{
tecla=PORTB;
if (tecla=a) faça_isso();
if (tecla=b) faça aquilo();
}

for (;;) //loop eterno trava tudo
{
ativa_alarme();
seus_30_segundos();// e...
//...etc
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!