Olá pessoal! tudo bem? Encontrei o blog e estou publicando aqui afim de encontrar uma solução pro problema que esta dando no nosso projeto de TCC, espero que se possível consigam ajudar meu grupo..

O projeto:

Estamos fazendo um projeto de um semáforo inteligente para deficientes visuais. O semáforo funcionaria normalmente como conhecemos, mas no tempo de verde para pedestres ele notificaria atraves de um dispositivo sonoro, no caso o buzzer, que estamos utilizando. Usaremos também uma pulseira RFID para servir como a simulção de solicitação de travessia, ao invés do oush button o deficiente usaria a pulseira RFID para solicitar.

O problema:

Estamos com as duas programações praticamente finalizadas, a do semaforo e a do RFID e funcionando perfeitamente separadas... Todas funções e condicionais funcionam quando as funções são executadas individualmente, por exemplo: quando eu executo só a função do rfid ele faz tudo perfeitamente como programamos, mas quando tentamos executar a programação do rfid + semaforo elas nao funcionam... só funciona apenas o semaforo, e o rfid n faz a leitura da pulseira e não realiza as condicionais programadas.... O que voces acham que pode ser? poderiam nos ajudar, por favor?

Vou colar a programação logo abaixo pra analisarem

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

// Variaveis

int azul = 8;
#define SS_PIN 53
#define RST_PIN 5
#define BUZZER 9

int VMC = 4; //vermelho carro
int AMC = 3; //amarelo carro
int VDC = 2; //verde carro

int VMP = 7; //vermelho pedestres
int VDP = 6; //verde pedestres


String IDtag = ""; //Variável que armazenará o ID da Tag
bool Permitido = false; //Variável que verifica a permissão

//Vetor responsável por armazenar os ID's das Tag's cadastradas
String TagsCadastradas[] = {"70 73 C7 A6",
"ID_2",
"ID_3"};

MFRC522 LeitorRFID(SS_PIN, RST_PIN); // Cria uma nova instância para o leitor e passa os pinos como parâmetro


void setup() {
pinMode(BUZZER, OUTPUT);
pinMode(VMC, OUTPUT);
pinMode(AMC, OUTPUT);
pinMode(VDC, OUTPUT);
pinMode(VDP, OUTPUT);
pinMode(VMP, OUTPUT);
pinMode(azul, OUTPUT);


Serial.begin(9600); // Inicializa a comunicação Serial
SPI.begin(); // Inicializa comunicacao SPI
LeitorRFID.PCD_Init(); //
}

void loop() {
semaforo();
leitura();
}

//Função Semaforos

void semaforo(){
digitalWrite(VDC,HIGH);
digitalWrite(VDP,LOW);


delay(5000);

digitalWrite(VDC,LOW);
digitalWrite(AMC,HIGH);


delay(2000);


digitalWrite(AMC,LOW);
digitalWrite(VMC,HIGH);
digitalWrite(VDP,HIGH);
digitalWrite(VMP,LOW);


delay(3000);


digitalWrite(VDP,LOW);


//Alerta para o pedestre!
for(int j=0; j<=3; j++)
{

digitalWrite(VMP,LOW);
delay(500);
digitalWrite(VMP,HIGH);
delay(500);
}
digitalWrite(VMC,LOW);
}

// função responsável por fazer a leitura das Tag's

void leitura(){

IDtag = ""; //Inicialmente IDtag deve estar vazia.

if ( !LeitorRFID.PICC_IsNewCardPresent() || !LeitorRFID.PICC_ReadCardSerial() ) {
delay(50);
return;
}

// Estrutura de repetição padrão para coleta dos valores das tags pela função uid
for (byte i = 0; i < LeitorRFID.uid.size; i++) {
IDtag.concat(String(LeitorRFID.uid.uidByte[i], HEX));
}

// Estrutura de repetição para comparação com as tags que permitimos no vetor
for (int i = 0; i < (sizeof(TagsCadastradas)/sizeof(String)); i++) {
if( IDtag.equalsIgnoreCase(TagsCadastradas[i]) ){
Permitido = true; //Libera tag
}

if(Permitido == true) {
for(int q = 0; q<5; q++){
digitalWrite(azul, HIGH);
delay(100);
digitalWrite(azul, LOW);
delay(100);
}


}
else{
Serial.println("Tag NAO Cadastrada: " + IDtag);
digitalWrite(azul, HIGH);
delay(500);
digitalWrite (azul, LOW);
delay(500); //Se não será chamada a função acessoNegado()
}
//aguarda 2 segundos para efetuar uma nova leitura
}
}

bem, é esse a programação, ela ainda necessita de alguns ajustes finais, e como falei, executando as duas individualmente, elas funcionam perfeitamente, mas quando colocamos ambas em uma mesma execução ele não funciona..., temos duas partes de 50% funcionando, mas não conseguimos os 100% ao juntarmos elas

agradeço a compreensão e espero que possam me ajudas, por favor...

Exibições: 155

Anexos

Responder esta

Respostas a este tópico

Olá.

  Se entendi o que está acontecendo é que vc colocou delays enormes. Delay() é uma função que para o processamento. Enquanto ele acontece nada mais acontece... obviamente nem a leitura dos tags.

  A solução seria mudar isso.

  A ideia é fazer um loop unico, que atualize o semaforo e leia a tag (pode ser cada um em sua subfunção), mas nunca com delays() enormes.

  Existem ao menos 3 caminhos simples, diga qual mais agrada:

  1) use um contador e um delay pequeno. Acione o semaforo conforme o numero do contador.

Por ex, com delay de 100 = 0,1 s vc usa ifs para mudar o farol com 0, 300 (3s) e 400 (4segundos), depois disso zera novamente. Isso funciona, só não é ideal pq gera uma parada tb e gera uma forma imprecisa de contagem de tempo uma vez que o tempo fora do delay() não será computado.

  2) use mills(). mills() é uma função que retorna o tempo decorrido desde que o programa começou a rodar. Com ele vc pode anotar o momento em que algo aconteceu (por ex quando vc mudou para verde) e usando a anotação desse momento pode saber quando deve mudar para vermelho. 

Funciona super bem, eu (é pessoal) não gosto muito pq prefiro o metodo 3), mas veja mais sobre isso em:

   https://labdegaragem.com/profiles/blogs/tutorial-sobre-timer-no-ard...

  Tranquilamente esse (o do mills()) é o método mais amplamente usado.

  3) use uma interrupção de tempo para gerar uma variável que incrementa a cada 0,1s de forma precisa (por exemplo) e usa esse numero no if() para trocar a cor do leds.

  Como é um trabalho para apresentação (vai ser mais bem visto se for usado um método mais cientifico, imagino), sugiro o uso da opção 3.

   Veja se dá pra encarar:
https://labdegaragem.com/profiles/blogs/tutorial-executando-fun-es-...

Opa, certo entendi.. vou estudá-las aqui e aplicar no projeto! Muito obrigado mesmo, ja estava sem ideias mais do que fazer pra resolver essa situação, se der bom eu volto com feedback, agradeço demais.

tenha uma boa noite :)

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço