Go Down

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

nid69ita


Fare un array di char esattamente come si fa? Scusate ma ho una confusione in testa della madonna. Io so la sintassi del java ma è sbagliata in Arduino. Capitemi è il 4° progetto che faccio in una settimana e tutto per domani che ho l'open day della scuola

String in realtà è un oggetto di C++.
Dentro incapsula un array di caratteri. Cerca di nasconderti come è fatta una stringa (array di caratteri) in C/C++.
Sarebbe meglio usare un array di caratteri (stringa da non confondere con String).
Secondo me, visto che sei agli inizi, lo String ti semplifica. Ma sarebbe meglio passare alle stringhe. Soprattutto su programmi più grossi.  
Quella "somma" di caratteri:
Code: [Select]
confronto = confronto +  (char) Serial.read();ad esempio può mangiare la memoria
my name is IGOR, not AIGOR

pres961

No purtroppo no perchè non è un mio sensore. Io so la sigla del controller che è il rdm6300 e basta

gpb01

... e si fa fatica a fare una ricerca con Google ???  ]:D

Guarda QUI e ... vai a studiare l'ultima pagina ... vedrai che è come immaginavo io ;)

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

pres961

Ok visto che usa degli start bit e degli stop bit è impossibile sapere la sua struttura che invia?

gpb01

Ma hai letto tutta la pagina dall'INIZIO ???  :smiley-eek: :smiley-eek: :smiley-eek: Eppure è ben descritto :

STX (ASCII 0x02)

10 char che rappresentano, il numero di TAG

1 char che è il checksum calcolato facendo l'XOR di coppie di caratteri che rappresentano un valore HEX

ETX (ASCII 0x03)

... in tutto ... 13 char, ma solo i 10 in mezzo sono il TAG, gli altri sono codici di controllo del protocollo di trasmissione !

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

nid69ita

#35
Jan 17, 2014, 03:35 pm Last Edit: Jan 17, 2014, 03:38 pm by nid69ita Reason: 1

Code: [Select]
-1
-1
-1
2
48
51
48
48
51
48
65
50
55
56
69
57

Certo, -1 e -1 erano perché non aspettavi la Serial.available() e, se non c'è nulla, la Serial.read() ritorna -1
2, 48,51,48,48,51,48,65,50,55,56,69,57 altro non sono che i caratteri ricevuti, UNO alla volta, stampati in valore decimale, il cui equivalente ASCII è : STX  0 3 0 0 3 0 A 2 7 8 E 9


Come ti aveva detto @Guglielmo qui.  
Lo strano però è che secondo quella guida dopo 10 cifre+checksum dovrebbe esserci un valore 3 e non il carattere '9' ( valore 59)
STX(2)    poi  '0' '3' '0' '0' '3' '0' 'A' '2' '7' '8'   poi checksum 'E'   e poi doveva esserci un ETX(3)   
Non è che il tuo rfid sia un clonazzo non originale?
my name is IGOR, not AIGOR

gpb01

#36
Jan 17, 2014, 03:36 pm Last Edit: Jan 17, 2014, 03:38 pm by gpb01 Reason: 1
@nid : mi sa che quando ha fatto copia e incolla .. s'è mangiato un pezzo ;)

No, effettivamente sono 13 char ... c'è qualche cosa che non va in quei valori ...

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

nid69ita

#37
Jan 17, 2014, 03:43 pm Last Edit: Jan 17, 2014, 03:49 pm by nid69ita Reason: 1
Qui un esempio MA in inglese e per PIC
http://zjembedded.blogspot.it/2012/06/rdm6300-rfid-with-pic18-dev-board.html

Ma si vede dal codice che aspetta arrivi il valore STX (ovvero 2) ma poi conta 13 caratteri, non aspetta di ricevere un ETX.
Code: [Select]
if (tagComingFlag == 0 && rxByte == 0x02)           <--- QUI SI CHIEDE SE C'E' UN    STX  (valore 2)
{ tagRX[tagCounter] = rxByte;
  tagComingFlag = 1;
  tagCounter++;                                                        <-- CONTATORE DI QUANTI CARATTERI STIAMO LEGGENDO
}
else if (tagComingFlag == 1)
{ tagRX[tagCounter] = rxByte;
  tagCounter++;
  if (tagCounter == 14)                       <---- QUI QUANDO ARRIVA A 13 CARATTERI VERIFICA IL TAG
....
my name is IGOR, not AIGOR

gpb01

No, è giusto, manca un pezzo ...

Abbiamo STX (02)

Abbiamo i 10 char (48 51  48 48  51 48  65 50  55 56) = 03  00  30  A2  78 (li ho separati apposta per far vedere come vanno presi per il calcolo dell'XOR, ma ciascuno, di perse è un char ...

se facciamo : 03 XOR 00 XOR 30 XOR A2 XOR 78 ... otteniamo .. E9 ... che, non so perché, viene trasmesso come due char E e 9 ... mentre dal datasheet sembrava un solo char ...  :smiley-roll:

Manca quindi lo 03 finale ...

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

gpb01

@nid : Quindi ... stando al tuo esempio ... se ne fregano dello ETX ... tanto se quadra il checksum ... il dato è sicuramente buono ;)

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

nid69ita

Beh, leggendo bene la prima parte di quel link che ho messo, anche il tipo dichiara che il datasheet (o forse data-shit) dichiara un 3 finale ma lui con una decina di RFID non lo ricere mai. Sempre il 2 iniziale ma mai il 3 finale.
my name is IGOR, not AIGOR

pres961

L'ho letta si ma io le unico competenze che ho sono di programmazionie informatica e di sistemi e reti non di certo queste cose. Mi hanno dato da fare questo progettino in due giorni senza nessun riferimento e a questo punto credo sia più che normale non capirci davvero nada  :smiley-sad-blue:

gpb01


L'ho letta si ma io le unico competenze che ho sono di programmazionie informatica e di sistemi e reti non di certo queste cose.


Bé ... veramente qui si tratta solo di programmazione ...  :smiley-roll:

... c'è da fare un controllo sui caratteri che arrivano, quando arriva STX (02) si parte e si accumulano i successivi 12 car, si fa come ti ho spiegato per calcolare il checksum e, se quadra, il dato è buono ! Tutto qui ...

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

pres961

Si ma a me il primo dato che arriva è 03 non 02

gpb01

NON è vero ... lo hai scritto tu stesso quando hai riportato i caratteri che ricevevi (-1, -1, 2, ...) !!!

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

Go Up