Hola Amigos
Estoy haciendo un proyecto,para conectar una alarma con una tarjeta Rfid y que se conecten posteriormente los sensores Pir.
Mi problema es con respecto a dar un mayor tiempo de conexión a los sensores Pir,para que pueda salir de la casa y lo mismo al regresar.
Puse delay(30000) posteriormente que se permite el acceso con la tarjeta y funciona al salir ,pero no me al regresar a la casa ,no me da tiempo para desconectar ,ya que empieza a funcionar la alarma.
Ojala me puedan ayuda
Saludos
// sistema de alarma con Rfid y sensor de movimiento PIr (jmr)
#include <MFRC522.h>
#include <SPI.h>
//#include <Wire.h>
int posicion=0;
/*
Pins SPI UNO
1 (NSS) pin10 (SS) 10
2 SCK 13
3 MOSI 11
4 MISO 12
5 IRQ *
6 GND GND
7 reseteo 9
8 +3.3V (VCC) 3V3
* Not needed
1 on ICPS header
*/
#define pin10 10
#define reseteo 9
MFRC522 nfc(pin10, reseteo);
#define pin4 4
#define pin5 5
#define pin6 6
#define Buzzer 7
const int buzzer = 7;
int pirState = LOW; // de inicio no hay movimiento
/// SENSORES
const int PIRPin0 = 8; // pin1 de entrada (for PIR sensor)
const int PIRPin = 2; // pin2 de entrada (for PIR sensor)
const int PIRPin1 = 3; // pin3 de entrada (for PIR sensor)
int vat0 = 0; // estado del pin0
int vat = 0; // estado del pin1
int vat1 = 0; // estado del pin2
// TERMINA SENSORES
int val2 = 0;
int val3 = 0;
void setup() {
pinMode(buzzer, INPUT);
pinMode(PIRPin0 , INPUT); // PIN1
pinMode(PIRPin1 , INPUT); // PIN2
pinMode(PIRPin, INPUT); // PIN3
pinMode(pin4 , OUTPUT);
pinMode(pin5 , OUTPUT);
pinMode(pin6, OUTPUT);
SPI.begin();
Serial.begin(115200);
// Comprueba el lector RFID
nfc.begin();
byte version = nfc.getFirmwareVersion();
if (! version) {
Serial.print("Error al buscar lector MFRC522 ");
while(1); //halt
}
// Serial.print("BUSCANDO CHIP MFRC522 ");
Serial.print("RC522 Soft ");
Serial.println(version);
// Serial.println(".");
}
#define key1 1
#define key2 1
// Agregar aquí las tarjetas autorizadas
byte Autorizado[key1][4] = {{0x74, 0x5C, 0xD6, 0x5F, }};
byte Autorizado2[key2][6] = {{0xD3, 0x99, 0xE, 0xED, 0xFF, 0xFF, }};
void claveTarjeta(byte *serial);
boolean esIgual(byte *key, byte *serial);
boolean chekaKey(byte *serial);
void loop() {
;
vat0 = digitalRead(PIRPin0);
vat = digitalRead(PIRPin);
vat1 = digitalRead(PIRPin1);
byte status;
byte data[MAX_LEN];
byte serial[5];
boolean Abierto = false;
status = nfc.requestTag(MF1_REQIDL, data);
//////// sensor
if (val2==1)
{
if (vat or vat1 or vat0 == HIGH) //si está activado
{
pirState = HIGH;
digitalWrite(pin6, HIGH); //LED ON// color amarillo
delay(1000);
digitalWrite(pin6, LOW); //LED ON
if (pirState == LOW) //si previamente estaba apagado
{
Serial.println("Sensor activado");
pirState = HIGH;
}
}
else //si esta desactivado
{
digitalWrite(pin6, LOW); // LED OFF
if (pirState == HIGH) //si previamente estaba encendido
{
Serial.println("Sensor parado");
pirState = LOW;
}
}
}
/// termina
if (status == MI_OK) {
status = nfc.antiCollision(data);
memcpy(serial, data, 5);
if(chekaKey(serial)){
val2=1;
Serial.println("Acceso permitido");
claveTarjeta(serial);
Abierto = true;
digitalWrite(pin4, HIGH); //LED ON color rojo
tone(buzzer, 1000); // envia 1KHz de señal de sonido.
delay(1000);
noTone(buzzer); // para el sonido.
digitalWrite(pin4, LOW); //LED ON
delay(1000);
val3=val3+1;
if (val3 == 2)// si la tarjeta rfid pasa por segunda vez se desconecta la alarma
{
val2=0;
val3=0;
pirState = LOW;
digitalWrite(pin5, HIGH); //LED prendido color azul
delay(1000);
digitalWrite(pin5, LOW); //LED apagado
}
}else{
claveTarjeta(serial);
Serial.println("Tarjeta desconocida");
Abierto = false;
digitalWrite(pin5 , LOW);
digitalWrite(pin6, HIGH);
}
nfc.haltTag();
}
delay(500);
}
boolean esIgual(byte *key, byte *serial){
for (int i = 0; i < 4; i++){
if (key[i] != serial[i]){
return false;
}
}
return true;
}
//Chequea si la calve es la correcta si es asi devuelve un verdadero
boolean chekaKey(byte *serial)
{
for(int i = 0; i<key1; i++)
{
if(esIgual(serial, Autorizado[i]))
return true;
}
for(int i = 0; i<key2; i++)
{
if(esIgual(serial, Autorizado2[i]))
return true;
}
return false;
}
//Muestra la clave de la tarjeta en el puerto serie
void claveTarjeta(byte *serial)
{
for (int i = 0; i < 4; i++) {
Serial.print(serial[i], HEX);
Serial.print(" ");
}
}