Go Down

Topic: Ajuda com codigo rfid (Read 2059 times) previous topic - next topic

luisandrade

Olá pessoal!
Sou novo no fórum e iniciante no arduino, estou lendo bastante e aprendendo a respeito, estou tentando criar um código para controlar uma saída do arduino usando o RFID, crieu um código básico porém não está funcionando, a saída não aciona.
Segue o código:
Se alguém puder me ajudar agradeço muito.
/* RFID ID12
*/
char val = 0; // variable to store the data from the serial port
char tag1[14] = "1EOOD9AAA1CC";
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}

void loop () {
// read the serial port

if(Serial.available() > 0) {
val = Serial.read();
Serial.print(val);
if(val == tag1[14]){
digitalWrite(13, HIGH);
}
}
}

ViniciusPolo

Olá.
Poderia dizer se está sendo impresso na serial o valor correto antes de ele ser comparado?
Coloca um Serial.print("SAIDA HIGH"); ao inves do digitalwrite para ver se está funcionando normal nesse caso.
Tente usar outra saida.
O que está usando nessa saida? teste com um LED para ter certeza que ela nao está sendo acionada.
Depois posta a resposta.
Precisa de produtos para seu Arduino?
Não deixe de ver meus produtos no Mercado Livre!
http://lista.mercadolivre.com.br/_CustId_76934379

Kotch

Que tipo de leitor de rfid esta usando, ele ja entrega o valor lido direto na serial? Não tem que "tratar" a leitura?
:smiley-roll:
????????????????????

luisandrade

Então eu uso outro código pra ler a serial com o código do cartão rfid, no serial monitor aparece o código normal, estou usando RFID ID12 innovations.
Estou usando saida 13 que tem um led na placa. Vou fazer os testes e posto os resultados.

Kotch

é este hardware?

http://www.sparkfun.com/products/8419

8)
????????????????????

Kotch

Ajuda em algo?

http://arduino.cc/playground/Code/ID12

8)
????????????????????

luisandrade

Usei o Serial.print("SAIDA HIGH"); esse é o codigo do cartão 1E00D9AAA1CC.


luisandrade

Sim esse é o hardware que estou usando.

tomasi

Opa,
tente este sketch:

Code: [Select]
/* RFID ID12
*/
char val = 0; // variable to store the data from the serial port
char tag1[] = {"1EOOD9AAA1CC"};
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}

void loop () {
// read the serial port

if(Serial.available() > 0) {
val = Serial.read();
Serial.print(val);
if(val == tag1[]){
digitalWrite(13, HIGH);
}
}
}

luisandrade

Obrigado pelo reply, então o sketch gera erro durante a compilação segue a imagem.

luisandrade

#10
Feb 20, 2012, 05:13 pm Last Edit: Feb 20, 2012, 05:17 pm by luisandrade Reason: 1
Pessoal estou quase certo que o meu problema está no código lido, o código tem uns caracteres que não pertence ao cartão, segue: Como elimino esses caracteres?

luisandrade

Pessoal encontrei esse sketch deveria funcionar mas não funciona,deem uma olhada por favor, obrigado!
Como dito anteriormente acredito que meu problema seja no código lido do cartão, porém não sei como resolver.
#include <Servo.h>
#include <NewSoftSerial.h>
#define MY_TAG_CODE "3200A0346D5D"
Servo myservo; 
NewSoftSerial RFID(2, 3);
String msg;
int locked = 180;
int unlocked = 0;
int trigger = 0;

void setup()
{
  myservo.attach(9); 

  Serial.begin(9600);
  Serial.println("Serial Ready");

  RFID.begin(9600);
  Serial.println("RFID Ready");

}
char c;

void loop()
{
  while(RFID.available()>0)
  {
    c=RFID.read();
    msg += c;
    delay(1);
   //Serial.println(msg); 
   //Serial.println(msg.length());
  }
  msg=msg.substring(1,13);

  if(msg.indexOf(MY_TAG_CODE)>=0)
  {
  (trigger = 1);
   Serial.println("Card Accepted");
  digitalWrite(13, HIGH);   // set the LED on
  delay(200);              // wait
  digitalWrite(13, LOW);    // set the LED off
  }

  if (trigger == 1)
  {
Serial.println("Door unlocked");
  myservo.write(unlocked);
  delay(10000);                                     
myservo.write(locked);

  digitalWrite(13, HIGH); 
  delay(200);             
  digitalWrite(13, LOW);   
  Serial.println("Door locked");
(trigger = 0);
  }
}

tomasi

Ih , foi mal...

tenta esse: faltou um 0 no array... :(

Code: [Select]
/* RFID ID12
*/
char val = 0; // variable to store the data from the serial port
char tag1[] = {"1EOOD9AAA1CC"};
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}

void loop () {
// read the serial port

if(Serial.available() > 0) {
val = Serial.read();
Serial.print(val);
if(val == tag1[0]){
digitalWrite(13, HIGH);
}
}
}

luisandrade

Obrigado pelo reply, seguinte não deu certo, a saida 13 é acionada com qualquer cartão.

luisandrade

Pessoal finalmente o Skectch funcionou, segue o código:
Só tenho uma dúvida como esta função funciona?
if(msg.indexOf(MY_TAG_CODE)>=0)


#define MY_TAG_CODE "1E00D9AAA1CC"
String msg;
int trigger = 0;
int out = 13;
void setup()

{
 
  pinMode(out,OUTPUT);
  Serial.begin(9600);
  Serial.println("Serial Ready");
  Serial.begin(9600);
  Serial.println("RFID Ready");

}
  char c;

  void loop()
{
  while(out == HIGH);
  while(Serial.available()>0)
{
  c=Serial.read();
  msg += c;
  delay(1);
  Serial.println(msg); 
   
  }
  msg=msg.substring(1,13);

  if(msg.indexOf(MY_TAG_CODE)>=0)
  {
   (trigger = 1);
    Serial.println("Card Accepted");
    digitalWrite(out, HIGH);   // set the LED on
    Serial.println("Acesso Liberado");
    delay(2000);              // wait
    digitalWrite(out, LOW);    // set the LED off
  }
  }

Go Up