Go Down

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

nid69ita

Quando arriva il valore 2 allora vuol dire che inizia una trasmissione e puoi usare ReadBytes() e leggi 13 caratteri:
http://arduino.cc/en/Serial/ReadBytes
Poi puoi calcolare il checksum o fregartene, se devi solo controllare che il tag sia uguale a uno noto.
Cioè se per te 030030A278E9   questo è il tag da controllare, sapere che E9 è il checksum non è molto importante.

No, a te il primo dato che arriva è il valore 2 (che non puoi stampare come carattere a video)
poi ti arrivano i caratteri '0', '3' .... etc.
Quello 03 non è il valore 3 ma il carattere '0' e poi '3';  molto diverso.  Sono i valori 48 e 51
my name is IGOR, not AIGOR

nid69ita

#46
Jan 17, 2014, 04:18 pm Last Edit: Jan 17, 2014, 04:21 pm by nid69ita Reason: 1
Questo solo il pezzo modificato nella loop(), e togli per ora il confronto con tag. Ti funziona così, leggi il RFID ?
Code: [Select]

void loop()
{ if(Serial.available()>0)
 { while(Serial.available()>0)
   { for(int i=0; i<14 ;i++)                   // 14 char, c'e' a inizio valore 2 da scartare
     { int c=Serial.read();
       if(c != 2) confronto = confronto +  (char) c;
     }
   }
   Serial.print(">");Serial.print(confronto);Serial.println("<");
 }
}


Dovrebbe stampare           >030030A278E9<
my name is IGOR, not AIGOR

pres961

Ma quelli li ricevevo solo non inserendo serial.available()

nid69ita

beh, io mi son fidato del tuo codice.
Qui: http://forum.arduino.cc/index.php?topic=211192.msg1549567#msg1549567
vedo che @Babbuino ti fa leggere con SoftwareSerial  ma perchè poi hai cambiato il codice?
my name is IGOR, not AIGOR

nid69ita

#49
Jan 17, 2014, 04:33 pm Last Edit: Jan 17, 2014, 04:38 pm by nid69ita Reason: 1
Ripartiamo da quello:
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

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 )
 {  int c= RfidData.read();
    Serial.print( (char) c); Serial.print(" - " );Serial.println(c);
 }
}


Mi aspetto che ti stampi 14 righe, ogni riga uno dei valori ricevuti, stampando valore e carattere ascii corrispondente
my name is IGOR, not AIGOR

pres961

Usando il tuo ultimo sketc ottengo questa cosa:
Code: [Select]
 - 2
0 - 48
3 - 51
0 - 48
0 - 48
3 - 51
0 - 48
A - 65
2 - 50
7 - 55
8 - 56
E - 69
9 - 57
 - 3

nid69ita

#51
Jan 17, 2014, 04:42 pm Last Edit: Jan 17, 2014, 04:47 pm by nid69ita Reason: 1
Come vedi da quell'elenco alla fine anche il 3 arriva.

Aggiungiamo i pezzi. Occhio alle aggiunte anche nella prima parte:
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 )
 { while( RfidData.available()>0 )
   { for(int i=0; i<14 ;i++)                   // 14 char, c'e' a inizio valore 2 da scartare
     { int c=RfidData.read();
       if(c != 2) TagRicevuto= TagRicevuto+  (char) c;
     }
   }
   Serial.print(">"); Serial.print(TagRicevuto); Serial.println("<");
   TagRicevuto="";         // azzeriamo la String altrimenti cresce a dismisura
 }
}
my name is IGOR, not AIGOR

pres961

confronto non viene dichiarato lo metto di tipo string immagino?

nid69ita


confronto non viene dichiarato lo metto di tipo string immagino?

Sei troppo veloce, ho ricorretto il codice.  :smiley-mr-green:
my name is IGOR, not AIGOR

pres961

:) :) :)
In output ora ho una roba del genere.
Code: [Select]
>030030A278E9<

gpb01

@nid : è concettualmente sbagliato ...
... per fare una cosa fatta bene devi ciclare finche non ricevi il 2 e allora parti a leggere i dati  ...

Code: [Select]
if( RfidData.available()>0 ) {
 if ( RfidData.read() == 2) {
   while ....
   ...
 }
}


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

nid69ita

#56
Jan 17, 2014, 04:51 pm Last Edit: Jan 17, 2014, 04:54 pm by nid69ita Reason: 1
Che è il tag che ti aspetti e davanti e dietro non c'e' nulla di strano (importante).

Aggiungiamo il pezzo di controllo:
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 )
 { while( RfidData.available()>0 )
   { for(int i=0; i<14 ;i++)                   // 14 char, c'e' a inizio valore 2 da scartare
     { int c=RfidData.read();
       if(c != 2) TagRicevuto= TagRicevuto+  (char) c;
     }
   }
   Serial.print(">"); Serial.print(TagRicevuto); Serial.println("<");
   if(TagRicevuto==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

nid69ita


@nid : è concettualmente sbagliato ...


Ok. Ti spiace però correggere il mio codice solo dopo che abbiamo verificato che @pres riesca a verificare il tag?
Mi fa schifo verede un for la dentro e mi fan schifo le String. Ma vorrei prima arrivare alla conferma del tag.  :smiley-mr-green:
my name is IGOR, not AIGOR

pres961

Ora in output mi da il tag e la scritt tag non valido.
Code: [Select]

>030030A278E9<
Tag NON valido.

pres961

Ho riguardato la logica dell'if in teoria dovrebbe dare tag valido...

Go Up