Hola amigos, estoy empezando en el mundo de Arduino y requiero su ayuda.
el proyecto que intento desarrollar es un contador de personas por medio de una barrera infrarroja y pantalla led con I2c, el problema radica en que necesito que cuando una persona coloque en LOW la lectura proveniente de los infrarrojos, es decir que este entre el emisor y receptor por mas de 15 segundos encienda una alarma.
por ahora la alarma se enciende a los 15 segundos cuando pasa una persona sin esperar el tiempo de validación (que deberian ser esos 15 segundos).
les anexo el codigo
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3,POSITIVE);
const byte Pinsensor = A1; // Pin del Fototransistor
const byte Pinsensor2 = A2;
const byte ledPin = 9; // Pin para el led indicador
const byte salida = 11; //Pin que activa la alarma
int sensorValor = 0;// inicia y guarda el valor inicial del sensor como 0
int sensorValor2 = 0;
double contador = 0; // empieza el valor de las personas en 0
boolean estado = false; // Variable de estado (para la comparacion)
unsigned long Timer; // Variable para temporizador
const unsigned long Tiempo = 15000; // Tiempo para timer (15 segundo)
void setup() {
// Inicializamos la comunicacion serial a 9600 bps:
Timer = 0;
lcd.begin(16, 2);
Serial.begin(9600);
pinMode(ledPin, OUTPUT); // el led es salida
pinMode(Pinsensor, INPUT);// el led receptor o fototransistor es entrada
pinMode(Pinsensor2, INPUT);
pinMode(salida, OUTPUT);
}
void loop() {
sensorValor = digitalRead(Pinsensor) ; // el valor del sensorValor dependera de la lectura del fototransistor
sensorValor2 = digitalRead(Pinsensor2);
lcd.setCursor(0, 0);
lcd.print("personas:");
lcd.setCursor(0,1);
lcd.print(contador);
if(sensorValor == HIGH && sensorValor2 == HIGH && estado == false)
{
digitalWrite(ledPin, LOW);
estado = true;
}
else if (sensorValor == LOW && sensorValor2 == HIGH && estado == true){
digitalWrite(ledPin, HIGH);
contador = contador +0.5;
estado = false;
Timer=millis() + Tiempo;
}
if (Timer > 0 && millis() > Timer ) // Ha transcurrido el tiempo programado?
{
Timer=0;
digitalWrite(salida,HIGH);
delay(5000);
digitalWrite(salida,LOW);
}
else if (sensorValor == HIGH && sensorValor2 == LOW && estado == true){
digitalWrite(ledPin, HIGH);
contador = contador +0.5;
estado=false;
Timer=millis() + Tiempo;
}
if (Timer > 0 && millis() > Timer ) // Ha transcurrido el tiempo programado?
{
Timer=0;
digitalWrite(salida,HIGH);
delay(5000);
digitalWrite(salida,LOW);
}
else if (sensorValor == LOW && sensorValor2 == LOW && estado == true){
digitalWrite(ledPin, HIGH);
contador = contador +1;
estado = false;
Timer=millis() + Tiempo;
}
if (Timer > 0 && millis() > Timer ) // Ha transcurrido el tiempo programado?
{
Timer=0;
digitalWrite(salida,HIGH);
delay(5000);
digitalWrite(salida,LOW);
}
{ // Imprimimos el valor en el monitor.
Serial.print("contador = " );
Serial.println(contador);
delay(100);
}
}
Agradezco a quien me pueda ayudar.