Não consigo visualizar o numero da etiqueta

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.

#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.

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...

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

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:

#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?