Pessoal, segue um projeto em desenvolvimento para a abertura de uma porta com RFID do lado de fora e PIR Sensor do lado de dentro...
Os códigos individuais funcionam bem, mas quando eu monto com ambas funçoes no loop o PIR sobressai ao RFID...
Alguma dica de onde está o erro?
//Programa: Sistema de trava eletrica com RFID + PIR
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
int pinopir = 3; //Pino ligado ao sensor PIR
int acionamento; //Variavel para guardar valor do sensor
void setup()
{
Serial.begin(9600); // Inicia a serial
SPI.begin(); // Inicia SPI bus
mfrc522.PCD_Init(); // Inicia MFRC522
Serial.println("Aproxime o seu cartao do leitor ou toque na porta...");
Serial.println();
pinMode(2, OUTPUT);
pinMode(pinopir, INPUT); //Define pino sensor como entrada
pinMode(LED_BUILTIN, OUTPUT);
pinMode(2, OUTPUT);
}
void loop()
{
rfid();
presenca();
}
void presenca()
{
acionamento = digitalRead(pinopir); //Le o valor do sensor PIR
if (acionamento == 1)
{
Serial.println("Até Logo !");
digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
delay(4000); // espera 4 segundos
digitalWrite(2, LOW); // desativa rele, fecha a trava solenoide
}
}
void rfid()
{
// Procura por cartao RFID
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Seleciona o cartao RFID
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Mostra UID na serial
Serial.print("UID da tag :");
String conteudo= "";
byte letra;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Mensagem : ");
conteudo.toUpperCase();
if (conteudo.substring(1) == "74 A9 4E 43") //UID 1 - Cartao
{
Serial.println("Bem Vindo, Cartao 1");
Serial.println();
digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
delay(2000); // espera 2 segundos
digitalWrite(2, LOW); // desativa rele, fecha a trava solenoide
}
if (conteudo.substring(1) == "A7 BA 80 26") //UID 2 - Cartao
{
Serial.println("Bem Vindo, Cartao 2");
Serial.println();
digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
delay(2000); // espera 2 segundos
digitalWrite(2, LOW); // desativa rele, fecha a trava solenoide
}
if (conteudo.substring(1) == "4D 6C B5 63") //UID 3 - Cartao
{
Serial.println("Bem Vindo, Cartao 3");
Serial.println();
digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
delay(2000); // espera 2 segundos
digitalWrite(2, LOW); // desativa rele, fecha a trava solenoide
}
if (conteudo.substring(1) == "76 B5 64 1F") //UID 4 - Cartao
{
Serial.println("Bem Vindo, Cartao 4");
Serial.println();
digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
delay(2000); // espera 2 segundos
digitalWrite(2, LOW); // desativa rele, fecha a trava solenoide
}
}