Go Down

Topic: Rfid RDM6300 (Read 14483 times) previous topic - next topic

nid69ita

#60
Jan 17, 2014, 05:04 pm Last Edit: Jan 17, 2014, 05:07 pm by nid69ita Reason: 1
Aggiungiamo il pezzo di controllo suggerito da @Guglielmo e scartiamo il valore 3:
Code: [Select]

#include <SoftwareSerial.h>

const byte pinRX=2;
const byte pinTX=3;

SoftwareSerial RfidData=SoftwareSerial(pinRX, pinTX);   //creo una nuova porta seriale via software
String TagRicevuto;
String TagValido="030030A278E9";

void setup()  
{ pinMode(pinRX, INPUT);     //definisco il pin2(RX) come ingresso
 pinMode(pinTX, OUTPUT);    //definisco il pin3(TX) come uscita
 RfidData.begin(9600);      //setto la velocita delle seriali  (software e hardware)
 Serial.begin(9600);
}

void loop()
{ if( RfidData.available()>0 )
 { if ( RfidData.read() == 2 )     // se inizia con valore 2 allora ci son da leggere 13 char + valore 3
   { while( RfidData.available()>0 )
     { for(int i=0; i<14 ;i++)                   // 14 char, c'e' a fine valore 3 da scartare
       { int c=RfidData.read();
         if(c != 3) TagRicevuto = TagRicevuto +  (char)c;
       }
     }
     Serial.print(">"); Serial.print(TagRicevuto); Serial.println("<");
     if(TagRicevuto==TagValido)     // oppure if( TagRicevuto.startWith(TagValido) )
     { Serial.println("Tag valido.");
     }
     else
     { Serial.println("Tag NON valido.");
     }
     TagRicevuto="";         // azzeriamo la String altrimenti cresce a dismisura
   }
 }
}

my name is IGOR, not AIGOR

PaoloP

Ciao Nid
Perche metti
Code: [Select]
{ int c=RfidData.read();
e non
Code: [Select]
{ char c=RfidData.read();
?

pres961

Ma per quale strano motivo continua a darmi tag non valido?

nid69ita


Ciao Nid
Perche metti
Code: [Select]
{ int c=RfidData.read();
e non
Code: [Select]
{ char c=RfidData.read();
?


No notato che read() almeno della Serial ritorna un int e non un char.
my name is IGOR, not AIGOR

PaoloP


Ma per quale strano motivo continua a darmi tag non valido?


Perchè le 2 stringe sono diverse.
Forse serve il carattere terminatore /0 ma non ne sono sicuro.

nid69ita


Ma per quale strano motivo continua a darmi tag non valido?


Hai provato con nuova versione e usando startWith() ?
Code: [Select]
if( TagRicevuto.startWith(TagValido) ) // oppure if(TagRicevuto==TagValido)     
my name is IGOR, not AIGOR

gpb01

#66
Jan 17, 2014, 06:42 pm Last Edit: Jan 17, 2014, 06:44 pm by gpb01 Reason: 1

Ho notato che read() almeno della Serial ritorna un int e non un char.


L' int è sbagliato (... anche se erroneamente indicato), in realtà è chiaramente scritto che :

Quote
Returns the first byte of incoming serial data available (or -1 if no data is available)


e quindi, visto che è signed, usa char ;)

Guglielmo

P.S. : Il codice di Arduino, se lo vai a vedere, è scritto con i piedi ... è vero che la read() è definita ritornare un int, peccato che poi nel codice leggano i dati in un "unsigned char c" e fanno il "return c", o -1 se non ci sono dati ... mah ...  :smiley-roll:
Search is Your friend ... or I am Your enemy !

PaoloP

Se fosse dichiarata unsigned char non potrebbe restituire -1  :smiley-mr-green:
Se la metti char non prende il 128° carattere e sucessivi... ergo la dichiari int e tagli la testa al torello.

nid69ita


Se fosse dichiarata unsigned char non potrebbe restituire -1  :smiley-mr-green:
Se la metti char non prende il 128° carattere e sucessivi... ergo la dichiari int e tagli la testa al torello.


Bastardissima sta cosa. Non ci avevo pensato, tutto per poter sputare il -1     :smiley-mr-green:
my name is IGOR, not AIGOR

gpb01


Se la metti char non prende il 128° carattere e sucessivi... ergo la dichiari int e tagli la testa al torello.


Ribadendo che il codice è scritto con il cuxo ... normalmente trasmetti caratteri ASCII standard che vanno da 00 (NUL) a 127 (DEL) ... quindi la char basta e avanza ;)

Nei casi invece debba trasmettere valori binari ... usi Serial.available() per sapere che ci sono dei dati e usi unsigned char per la Serial.read() ... e la cosa è formalmente più corretta !!!

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up