Pages: [1]   Go Down
Author Topic: Não consigo visualizar o numero da etiqueta  (Read 656 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Viva,
Tenho o seguinte código:

// RFID reader for Arduino
// Wiring version by BARRAGAN <http://people.interaction-ivrea.it/h.barragan>
// Modified for Arudino by djmatic
// And pieces from Arduino Playground <http://www.arduino.cc/playground/Learning/PRFID>
// And then modified again by thekidd
// 12.04.2008 – Added interrupt to ensure program does not hang on RFID reader.

//NOTA:
//com este não foi possível ver o número do cartão.

Code:
#include <avr/interrupt.h>
#include <SoftwareSerial.h>

#define rxPin 2
#define txPin 3
#define ledPin 13

// set up a soft serial port
SoftwareSerial mySerial(rxPin, txPin);

int  val = 0;
char code[10];
int bytesread = 0;

void setup() {
  // define pin modes for tx, rx, led pins:
  pinMode(rxPin, INPUT);    // Set rxPin as INPUT to accept SOUT from RFID pin
  pinMode(txPin, OUTPUT);   // Set txPin as OUTPUT to connect it to the RFID /ENABLE pin
  pinMode(ledPin, OUTPUT);  // Let the user know whats up

  // set the data rate for the serial ports
  mySerial.begin(2400);    // RFID reader SOUT pin connected to Serial RX pin at 2400bps
  Serial.begin(9600);      // Serial feedback for debugging in Wiring

  // say something
  Serial.println("Hello World!");
 
  attachInterrupt(0, readRFID, CHANGE); // Setup interrupt for SOUT on RFID reader
  digitalWrite(txPin, LOW);           // Activate the RFID reader
}

void loop() {
  // Do Something
}

void readRFID() {
  digitalWrite(ledPin, LOW);          // Turn off debug LED – Event triggered!
  if((val = mySerial.read()) == 10) { // check for header
   
    bytesread = 0;
   
    while(bytesread<10) {             // read 10 digit code
      val = mySerial.read();
     
      if((val == 10)||(val == 13)) {  // if header or stop bytes before the 10 digit reading
        break;                        // stop reading
      }
     
      code[bytesread] = val;          // add the digit           
      bytesread++;                    // ready to read next digit 
    }
   
    if(bytesread == 10) {             // If 10 digit read is complete
      digitalWrite(txPin, HIGH);      // deactivate RFID reader
      digitalWrite(ledPin, HIGH);     // activate LED to show an RFID card was read
      Serial.print("TAG code is: ");  // possibly a good TAG
      Serial.println(code);      // print the TAG code
      }
   
    bytesread = 0;
    digitalWrite(txPin, LOW);           // Activate the RFID reader
  }
}


O código acima lê um cartão/etiqueta e apresenta-o no monitor.
O meu problema é que aparece "YYYYYYYYYYY" no lugar de apresentar o número da etiqueta.
O que acham que está a correr mal?

Muito obrigado,
Qualquer dica será muito apreciada.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Já verifiquei se estava a ler na banda certa (que o fabricante indica). Se definir fora da banda 2400 não funciona. Logo não poderá ser por ai...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Viva, tudo o forum.
Ainda sem sucesso...
O que fiz: meti o osciloscópio e vi que o leitor parallax RFID estava a ler a etiqueta/cartão, verifiquei isso pondo a ponta do osciloscópio entre o leitor RFID e o arduino, verificando que a sequência de bis estava a chegar (ao arduino)... verifiquei ainda que a sequência era diferente consoante passava as diferentes etiquetas, sendo assim concluindo que os dados estavam a chegar ao arduino. Continuando, inicialmente estava a dar YYYYYYYYYY com 2 pontinhos por cima dos Y, isso devesse ao facto de não ser reconhecido, ou seja estava fora da tabela hex.
Escrevendo directamente com o código: Serial.println(mySerial.read());
Vi que estava a aparecer o -1
através do site: http://www.pjrc.com/teensy/td_libs_NewSoftSerial.html , quer dizer que não estava a receber nada depois da biblioteca...
É verdade que a minha biblioteca é SoftwareSerial, e a deles é NewSoftSerial ondem explicam que recebendo -1 corresponde a "receber nada".

Acredito que tenha a ver com a biblioteca, mas se não alterei a biblioteca como pode não dar?
Hardware danificado? -> se chega o código à entrada do arduino... Não me parece também que seja do arduino...
Apenas estou a ver um problema, software...

Qualquer dica será muito apreciada.
Cump.
Denfox
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 41
Posts: 3097
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu nunca usei essa softSerial... mas há aí algo de muito suspeito...

Senão repara...

O teu loop está vazio.
Tens imenso código na read_RFID().

A read_RFID  é uma interrupção.
A read_RFID está configurada para ser chamada sempre que o pino da recepção muda.

Agora à parte técnica...

Sempre que o pino do Rx mudar de estado tu vais correr essa read_RFID... e nessa altura tentas ler um caracter da porta série. Achas que faz sentido? Sempre que um bit aparecer na porta, tu leres um caracter?
Isso, digo eu, vai lixar-te o esquema todo.

Não será algo tipo:

Code:
#include <avr/interrupt.h>
#include <SoftwareSerial.h>

#define rxPin 2
#define txPin 3
#define ledPin 13

// set up a soft serial port
SoftwareSerial mySerial(rxPin, txPin);

int  val = 0;
char code[11];
int bytesread = 0;

void setup() {
  // define pin modes for tx, rx, led pins:
  pinMode(rxPin, INPUT);    // Set rxPin as INPUT to accept SOUT from RFID pin
  pinMode(txPin, OUTPUT);   // Set txPin as OUTPUT to connect it to the RFID /ENABLE pin
  pinMode(ledPin, OUTPUT);  // Let the user know whats up

  // set the data rate for the serial ports
  mySerial.begin(2400);    // RFID reader SOUT pin connected to Serial RX pin at 2400bps
  Serial.begin(9600);      // Serial feedback for debugging in Wiring

  // say something
  Serial.println("Hello World!");
 
  //attachInterrupt(0, readRFID, CHANGE); // É mesmo preciso?
  digitalWrite(txPin, LOW);           // Activate the RFID reader
}

void loop() {
  if (mySerial.available() >=10) { //tu queres ler 10.
     for (int i = 0; i < 10; i ++) {
         code[i] = mySerial.read();
     }
  digitalWrite(txPin, HIGH);      // deactivate RFID reader
  code[10] = '\0'; //end string
  Serial.print(code);
  }//end if

}
eu nunca usei nenhuma destas... mas a julgar pela documentação aqui:

http://www.arduino.cc/en/Reference/SoftwareSerialExample

Isto deve funcionar melhor do que o que tens.
De onde tiraste esse código?

Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pages: [1]   Go Up
Jump to: