Pessoal, 

Preciso de uma ajuda...

Montei um leitor de RFID usando arduino uno+ RC522 que ao passar o cartão, pesquisa num db e recebe uma variável, via SoftwareSerial, para "falar" qual rele acionar. Variável A,B,C

Agora estou migrando para os leitores Wiegand (EM4100 WG26), mas o sistema não aceita ou recebe a variável pelo Serial.Read() , Já tentei incluir o SoftwareSerial, mas também não recupera a variável e consequentemente não acionam os reles. 

Alguém tem uma ideia de como posso receber esta variável pelo SoftwareSerial ? 

Estou enviando o código sem o SoftwareSerial. A ideia é fazer a "char leitura" receber a string via serial.

Obrigado !  

#include <Wiegand.h>
WIEGAND wg;


int ledPin1 = 7;
int ledPin2 = 6;
int ledPin3 = 5;
int ledPin4 = 4;
char leitura;

void setup() {
Serial.begin(9600); // CONECTA A PORTA SERIAL E DIFINE A VELOCIDADE DE LEITURA
pinMode(ledPin1, OUTPUT); // DEFINE A PINAGEM REFERENTE A VARIAVEL COMO PINO DE SÁIDA
pinMode(ledPin2, OUTPUT); // DEFINE A PINAGEM REFERENTE A VARIAVEL COMO PINO DE SÁIDA
pinMode(ledPin3, OUTPUT); // DEFINE A PINAGEM REFERENTE A VARIAVEL COMO PINO DE SÁIDA
pinMode(ledPin4, OUTPUT); // DEFINE A PINAGEM REFERENTE A VARIAVEL COMO PINO DE SÁIDA
wg.begin();
}

void loop () {


// RECEBE DO SISTEMA A STRING 'a' E ACIONA O LED


if(wg.available() > 0) {
Serial.println(wg.getCode());
char b = wg.getCode();
if(b == 'M'){
digitalWrite(ledPin1, HIGH);
delay(1000);
digitalWrite(ledPin1, LOW);
}
if(b == 'V'){
digitalWrite(ledPin2, HIGH);
delay(1000);
digitalWrite(ledPin2, LOW);
}
if(b == 'E'){
digitalWrite(ledPin3, HIGH);
delay(1000);
digitalWrite(ledPin3, LOW);
}
if(b == 'P'){
digitalWrite(ledPin4, HIGH);
delay(1000);
digitalWrite(ledPin4, LOW);
} }
}

Exibições: 1306

As respostas para este tópico estão encerradas.

Respostas a este tópico

Será que alguém consegue decifrar este problema? Estou apanhando nisso. Abs.

Cara acredito que você vai ter que modificar a biblioteca para trabalhar de acordo com suas necessidades

poste elas para agente como funciona, você diz que esse seu código trabalha com software serial mais não vi a declaração nele. a declaração fica na biblioteca ?

Eu tenho um software em .net que dispara uma variável "leitora" via serial para RX. Infelizmente funcionava quando era:
1a. versão: Leitor Sparkfun recebia a variável utilizando o SoftwareSerial via RX
2a. versão: o RC522  recebia a variável utilizando o SoftwareSerial via RX com a biblioteca RFID. 
3a. versão: mudei para o wiegand e não recebe, pois acredito que o SoftwareSerial não funcione com o wiegand .

A biblioteca do wiegand é a comum. somente esta. a que eu utilizava antes é era somente o SoftwareSerial 

A parte do SoftwareSerial é a básica...

#include <SoftwareSerial.h>

SoftwareSerial mySerial(4, 5);

void setup() {
Serial.begin(9600); // CONECTA A PORTA SERIAL E DIFINE A VELOCIDADE DE LEITURA
mySerial.begin(9600); // CONECTA A PORTA SERIAL E DIFINE A VELOCIDADE DE LEITURA
pinMode(ledPin, OUTPUT); // DEFINE A PINAGEM REFERENTE A VARIAVEL COMO PINO DE SÁIDA
}


void loop () {

// ENQUANTO A PORTA SERIAL ESTIVER DISPONÍVEL, FAZ LEITURA E ENVIA AS INFORMAÇÕES PARA O SISTEMA
if(mySerial.available() > 0) {
leitura = mySerial.read();
Serial.print(leitura);
}

?

Estou ficando louco com este SoftwareSerial. Alguem conhece sobre arduino+wiegand 26+softwareserial ?

 

Segue o arquivo com o codigo do arduino.

 

 

Anexos

O erro evidente no seu codigo é que se você esta esperando 'a' ,não existe nenhuma IF pelo qual alguma ação será ativada referente ao 'a'.

Na verdade o "A" vinha via serial, mas na verdade ele vem M,V,P,E. Via variável leitura da serial .

Esta descrição era da primeira versão, com o RC522 e Sparkfun. 

No novo arquivo incluir o código do softwareserial , mas não funfa . 

Será que o Wiegand.h corta ou interfere neste SoftwareSerial ? 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço