Go Down

Topic: Sensor presença PIR  (Read 124 times) previous topic - next topic

moisprobike

Ola Galera estou tendo dificuldade com o seguinte codigo:

A intençao era que depois de 10 minutos em estado LOW ou seja sem dectar movimento ele envie esse sinal por IR. mas acho que a forma como faço o TIMER esta errada.

int inputPin = 31;
unsigned long desligatv = 0 ;
byte desarme = false;
pinMode(inputPin, INPUT);

valpir = digitalRead(inputPin);
  if (valpir == LOW) {

    desligatv = millis();
    desarme = true;

  }

     if  (((millis() - desligatv) == 600000) and desarme)
  {
    desarme = true;
    irsend.sendNEC(0xFF7887, 32);
    delay(2000);
    irsend.sendNEC(0xFF38C7, 32);
    delay(2000);
    irsend.sendNEC(0xFF38C7, 32);
    irrecv.enableIRIn();
    irrecv.resume();
  }


bubulindo

Isto:
Code: [Select]
     if  (((millis() - desligatv) == 600000) and desarme)

Não compila.

Mete aqui o código todo. Outro problema é que a variável desarme tem de ser global (definida fora de qualquer função) ou o teu código não funciona.
This... is a hobby.

CheLL

Fiz aqui rapidão, não sei se esta funcionando 100% mas ja é um caminho a ser seguido:

Code: [Select]

// Porta PIR
const int pir = 5;
// Quantidade de Minutos para Disparar o Alarme
int minalarme = 10;
// Contador de Minutos
int minutos = 0;
// Contador de Segundos
int segundos = 0;
// Variavel Ativa Alarme
bool alarme = false;



void setup() {
  // Declara pir Como Entrada
  pinMode(pir, INPUT);

}

void loop() {
 
  // Verifica Se Deu a Quantidade De Minutos
  if(minalarme == minutos){
    // Ativa Alarme
    alarme = true;
  }
 
  // Se pir For Ativado
  if(pir){
    // Zera Variáveis Minutos e Segundos
    minutos = 0;
    segundos = 0;
  // Se pir Não Estiver Ativo
  }else{
    // Se segundos For Inferior a 60
    if(segundos < 60){
      // Segundos Recebe Ele Mesmo +1
      segundos++;
    // Se segundos For Superior a 60 Transforma-o Em Minuto
    }else{
      // Minutos Recebe Sua Propria Quantidade Mais 1
      minutos += 1;
      // Zera Variável Segundos
      segundos = 0;
    }
    // 1s de espera
    delay(1000);
  }

}


Talvez tenha que alterar alguma coisinha para funcionar do jeito q voce esteja esperando. Coloquei o delay de 1s, mas pode ser menos, ai você tem que compensar a comparação de segundos, apesar de eu nao achar muito necessário pois o pir tem configuração para durar mais de 1s na calibração manual.

Exemplo de como ficaria verificação a cada 500ms:

Code: [Select]

// Porta PIR
const int pir = 5;
// Quantidade de Minutos para Disparar o Alarme
int minalarme = 10;
// Contador de Minutos
int minutos = 0;
// Contador de Segundos
int segundos = 0;
// Variavel Ativa Alarme
bool alarme = false;



void setup() {
  // Declara pir Como Entrada
  pinMode(pir, INPUT);

}

void loop() {
 
  // Verifica Se Deu a Quantidade De Minutos
  if(minalarme == minutos){
    // Ativa Alarme
    alarme = true;
  }
 
  // Se pir For Ativado
  if(pir){
    // Zera Variáveis Minutos e Segundos
    minutos = 0;
    segundos = 0;
  // Se pir Não Estiver Ativo
  }else{
    // Se segundos For Inferior a 60
    if(segundos < 120){
      // Segundos Recebe Ele Mesmo +1
      segundos++;
    // Se segundos For Superior a 60 Transforma-o Em Minuto
    }else{
      // Minutos Recebe Sua Propria Quantidade Mais 1
      minutos += 1;
      // Zera Variável Segundos
      segundos = 0;
    }
    // 1s de espera
    delay(500);
  }

}


 :)

Go Up