Projeto - Cartão RFID acessando tempo maior para o verde do pedestre

Pessoal bom dia! Quem puder ajudar agradeceria muito!

Estou com um projeto onde o semáforo dos carros e pedestres estariam num looping, porém quando um chaveiro ou cartão RFID for detectado, a próxima programação do semáforo seria com um tempo maior para o verde do pedestre sendo que a pessoa que estaria utilizando poderia ser um cadeirante por exemplo.

Sendo assim, não estou conseguindo inserir um looping na programação e também não sei como interromper com um timer pois não podemos parar a qualquer momento o fluxo semafórico.

No programa abaixo em qualquer lugar que eu coloco o semaforo() só lê uma vez e fica esperando o cartão ou dependendo da onde coloco nem lê:

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

#define SS_PIN 53
#define RST_PIN 5
#define vermelho_pedestre 2
#define verde_pedestre 3
#define vermelho_carro 8
#define amarelo_carro 9
#define verde_carro 10

MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.

char st[20];

void setup()
{

Serial.begin(9600); // Inicia a serial
SPI.begin(); // Inicia SPI bus
mfrc522.PCD_Init(); // Inicia MFRC522
Serial.println("Aproxime o seu cartao ou chaveiro");
Serial.println();
pinMode(vermelho_pedestre, OUTPUT);
pinMode(verde_pedestre, OUTPUT);

pinMode(vermelho_carro,OUTPUT);
pinMode(amarelo_carro,OUTPUT);
pinMode(verde_carro,OUTPUT);

}

void loop()
{


// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
{
//return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}

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) == "7B 10 F0 21") //UID 1 - Cartão
{
Serial.println("Pessoa com mobilidade Reduzida !");
Serial.println();
digitalWrite(verde_pedestre,HIGH);
delay(500);
digitalWrite(verde_pedestre,LOW);
}
if (conteudo.substring(1) == "97 A1 7D 34") //UID 2 - Chaveiro
{
Serial.println("Pessoa com mobilidade Reduzida !");
Serial.println();
digitalWrite(verde_pedestre,HIGH);
delay(500);
digitalWrite(verde_pedestre,LOW);

}

}


void semaforo()
{
//Loop programação padrão

digitalWrite(verde_carro,HIGH);
digitalWrite(verde_pedestre,LOW);
delay(5000);

digitalWrite(verde_carro,LOW);
digitalWrite(amarelo_carro,HIGH);
delay(2000);
digitalWrite(amarelo_carro,LOW);
digitalWrite(vermelho_carro,HIGH);
digitalWrite(verde_pedestre,HIGH);
digitalWrite(vermelho_pedestre,LOW);
delay(3000);
digitalWrite(verde_pedestre,LOW);
//Alerta para o pedestre!
for(int j=0; j<=3; j++)
{

digitalWrite(vermelho_pedestre,LOW);
delay(500);
digitalWrite(vermelho_pedestre,HIGH);
delay(500);
}
digitalWrite(vermelho_carro,LOW);
}

Exibições: 26

Responder esta

Respostas a este tópico

Bom dia EJGS,

seja bem vindo à este grupo de amigos conhecido como forum.

Como você está começando agora, vou dar algumas sugestões:

1.a  Leia com atenção o tópicoSugestão;

2a. Se leu, vai entender que não é recomendável colar o código na área de texto do tópico.

    portanto, recomento que remova o código que postou na área de texto do seu tópico, 

    em seguida: click: 

e escolha o arquivo com seu código, e anexe.

Teremos maior boa vontade em tentar ajuda-lo.

RV

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço