Ir ao conteúdo

Posts recomendados

Postado

Galera, boa tarde. 

Sendo bem direto e reto: Possuo um programa onde faço leitura de 2 sinais e caso esses sinais sejam verdadeiros, após 1 minutos (para teste) aciona um alarme (para teste, leds). Pelo fato da função delay travar o programa na linha, usei a função millis, pois dentro desse 1 minuto se algum dos sensores for para nível lógico baixo, não ocorrerá o disparo do alarme. O meu problema é que não estou conseguindo fazer disparar o alarme. Caso possua algum erro ou esqueci de colocar algo, segue o código até o momento:

 

void loop() {
 
  if (digitalRead(pos_chave) == HIGH) {
    digitalWrite(dispara_alarme, LOW);
    alarme = 0;
    disparo_tempo = 0;
  } else {
    if (digitalRead(sinal_trava) == HIGH) {
      alarme = 1;
      disparo_tempo = 0;
    }
 
    if (digitalRead(sinal_destrava) == HIGH) {
      alarme = 0;
      disparo_tempo = 0;
      cadeira = 0;
    }
    if (digitalRead(sinal_cadeirinha) == HIGH) {
      delay(5000);
      if (digitalRead(sinal_cadeirinha) == HIGH) {
        cadeira = 1;
      }
    }
 
    if ((alarme == 1) && (cadeira == 1)) {
      if (disparo_tempo == 0) {
        disparo_tempo = millis();
      } else {
        if ((millis() - disparo_tempo) >= 1000) {
          digitalWrite(dispara_alarme, HIGH);
        } else {
          digitalWrite(dispara_alarme, LOW);
        }
      }
      digitalWrite(dispara_alarme, LOW);
      alarme = 0;
      disparo_tempo = 0;
    }
  }
}
Postado
Se alarme = 1 e cadeira = 1 independente do resto dispara alarme será LOW (alarme desativado eu imagino), alarme será zero e disparo_tempo também.
 
Repare o trecho abaixo.
if ((alarme == 1) && (cadeira == 1)) {  if (disparo_tempo == 0) {    disparo_tempo = millis();  }     else {      if ((millis() - disparo_tempo) >= 1000) {        digitalWrite(dispara_alarme, HIGH);      }         else {          digitalWrite(dispara_alarme, LOW);        }    }  digitalWrite(dispara_alarme, LOW); // AQUI <----  alarme = 0;                        // AQUI <----  disparo_tempo = 0;                 // AQUI <----}

Outra coisa, isto:

if ((millis() - disparo_tempo) >= 1000)
nunca será verdadeiro, pois disparo_tempo é atualizado e logo após zerado... Ai é atualizado novamente e então zerado...
Entendeu?
Visitante
Este tópico está impedido de receber novas respostas.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!