alarme carro

boa tarde gente, estou desenvolvendo um alarme que funciona da seguinte maneira, estou utilizando um rfid, reles e um botao,

ao utilizar o rfid 3 reles serão acionados, porem, se o botao for acionado que no caso ao abrir e fechar da porta do carro um tempo de 4 minutos ira contar e desacionar os reles,

estou com dificuldades apos o acionamento do botao onde entra o tempo de 4 minutos, eu fiz usando o delay porem ele para todas outras funções e nao consigo utilizar o rfid antes do 4 minutos, eu tentei usar o millis mais nao tive sucesso, se alguem puder me ajudar ficarei grato.

segue o codigo…

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.

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…”);
Serial.println();
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(2, INPUT_PULLUP);

}

void loop()
{
if( 2 == 1){
delay (40000);
digitalWrite(13, LOW); // desativa rele
digitalWrite(12, LOW); // desativa rele
digitalWrite(11, LOW); // desativa rele
}
// 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 < 0x10 ? " 0" : " ");
_ Serial.print(mfrc522.uid.uidByte*, HEX);_
_ conteudo.concat(String(mfrc522.uid.uidByte < 0x10 ? " 0" : " "));
conteudo.concat(String(mfrc522.uid.uidByte, HEX));
}
Serial.println();
Serial.print("Mensagem : ");
conteudo.toUpperCase();*_

* if (conteudo.substring(1) == “F3 DE 90 55”) //UID 1 - Cartao*
* {*
* Serial.println(“Ola FILIPEFLOP !”);*
* Serial.println();*
* digitalWrite(13, HIGH); // ativa rele*
* digitalWrite(12, HIGH); // ativa rele*
* digitalWrite(11, HIGH); // ativa rele *
* } *
}

Ola..

Bom, não entendi muito bem esta parte...

"if (2 == 1){" ... acho que não vai funcionar... enfim...

Usar o milis() é relativante simples...

  if (conteudo.substring(1) == "F3 DE 90 55") //UID 1 - Cartao
  {
    Serial.println("Ola FILIPEFLOP !");
    Serial.println();
StartMillis = millis();  //salvo o tempo em ms no momento em que acionou os reles...
    digitalWrite(13, HIGH); // ativa rele
    digitalWrite(12, HIGH); // ativa rele
    digitalWrite(11, HIGH); // ativa rele  
  }  
}

Lembre-se de declarar a variável StartMillis..

unsigned long StartMillis= 0;

Então faça uma verificação no loop, para conferir quanto tempo passou.. algo do tipo...

unsigned long currentMillis = millis();    //Tempo atual em ms
if (currentMillis - StartMillis > 4000) { // verifica se passaram os 4s..
// Restante do codigo,,,

Acho que é isso...

Pode ver algo em

Boa sorte...

obrigado martlima vou testar hoje e depois informo se consegui