Pagina 1 di 2

codice uid esadecimale con zero iniziale

MessaggioInviato: 24 nov 2017, 13:44
da miomiomio
ciao a tutti,
Vi scrivo perché ho realizzato a livello molto amatoriale un lettore di card nfc grazie al vostro aiuto.
Ho notato però che quando una card ha il codice uid che inizia con 0 (zero in esadecimale) omette di trascrivere in seriale lo zero.
invece io avrei necessità che venga riportata ogni cifra anche se zero ma non so come intervenire.
Potreste darmi una mano?
Grazie.
questo è il mio codice relativo alla lettura dell'uid

Codice: Seleziona tutto
#include<SPI.h>
#include<MFRC522.h>
#include<SoftwareSerial.h>
#define SS_PIN 4
#define RST_PIN 9
#define No_Of_Card 3
SoftwareSerial mySerial(8,9);   
MFRC522 rfid(SS_PIN,RST_PIN);
MFRC522::MIFARE_Key key;


byte i;
byte id_temp[3][3];


String inStringHex;


void setup()
{


  Serial.begin(9600);
  mySerial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  for(byte i=0;i<6;i++)
  {
    key.keyByte[i]=0xFF;
  }
  }


void loop() {

inStringHex="";
  if(!rfid.PICC_IsNewCardPresent())
  return;
  if(!rfid.PICC_ReadCardSerial())
  return;
  for(i=0;i<4;i++)
    {
   id_temp[0][i]=rfid.uid.uidByte[i];
inStringHex += String(rfid.uid.uidByte[i], HEX);
Serial.print(rfid.uid.uidByte[i], HEX);
   }


      // Halt PICC
  rfid.PICC_HaltA();
  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();


}


Re: codice uid esadecimale con zero iniziale

MessaggioInviato: 24 nov 2017, 14:17
da luxinterior
Senza sapere nulla NFC io suggerisco questa soluzione
letto il codice quindi conoscendo la sua lunghezza se necessario lo fai precedere da zeri quanto basta.
Per farla ad occhi chiusi inizializzi una stringa della lunghezza che ti serve per l'UID con tutti zeri poi letto il codice, quindi conoscendo la lunghezza, copi a partire da un offset il codice nella stringa. In questo modo non hai sorprese se gli zeri iniziali sono due o più funziona lo stesso

Scusa ho parlato di stirnghe ma è analog per i vettori scegli tu il formato del dato che ti serve

Re: codice uid esadecimale con zero iniziale

MessaggioInviato: 24 nov 2017, 14:21
da biget
è normale dato che lo tratti come numero e non come stringa

se proprio vuoi farlo con for:

Codice: Seleziona tutto
for(i=0;i<4;i++)
{
   if ( rfid.uid.uidByte[i] < 16 )
              inStringHex += "0" + String(rfid.uid.uidByte[i], HEX);
   else inStringHex += String(rfid.uid.uidByte[i], HEX);
}//for

Serial.print(inStringHex);

Re: codice uid esadecimale con zero iniziale

MessaggioInviato: 24 nov 2017, 17:46
da miomiomio
grazie davvero!
Sembra funzionare!
egbit praticamente questo codice inserisce lo zero iniziale qualora sia presente giusto?
Il ciclo for lo uso per creare una stringa unica con le cifre della card.
Sbaglio? nel senso che se non ho capito male la lettura dell'uid avviene per blocchi di 2 cifre?
se lo zero fosse ad un blocco centrale verrebbe aggiunto?

Re: codice uid esadecimale con zero iniziale

MessaggioInviato: 24 nov 2017, 19:34
da biget
Print ... HEX prende il tuo byte e lo converte giustamente in esadecimale

in esadecimale i numeri da 0 a 15 hanno bisogno di una sola cifra per essere rappresentati

(0-F) e quindi se il byte contiene da 0 a 15 Print ... HEX da come risultato 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F non lo costringe nessuno a scrivere i numeri usando due cifre :mrgreen: per di piu' sprecare spazio per degli zeri co sta crisi

posizione: non importa inizio, centro, fine, estrema destra, estrema sinista , medio oriente funziona comunque :mrgreen:

Re: codice uid esadecimale con zero iniziale

MessaggioInviato: 27 nov 2017, 0:11
da miomiomio
egbit ha scritto:per di piu' sprecare spazio per degli zeri co sta crisi

posizione: non importa inizio, centro, fine, estrema destra, estrema sinista , medio oriente funziona comunque :mrgreen:
:D :D :D
=D> =D> =D>
grazie, ho capito!
Grazie ancora!

Re: codice uid esadecimale con zero iniziale

MessaggioInviato: 27 nov 2017, 1:35
da MassimoB
se fosse un tanto al chilo sarei d'accordo ma pensa se lavorassimo in conversione di dato con tanto di mantissa eccc.

e qui non è detto che il tuo esadecimale Byte sia così scontato... sai tipo per esempio complemento a due e compagnia cantante

la crisi portroppo colpisce tutti tranne la logica delle basi di conversione

Re: codice uid esadecimale con zero iniziale

MessaggioInviato: 27 nov 2017, 1:37
da MassimoB
se dovessi trattare gli 0 e 1 li tratterei come tali con le dovute maschere di conversione booleane

Re: codice uid esadecimale con zero iniziale

MessaggioInviato: 27 nov 2017, 1:45
da MassimoB
microsoft per esempio definisce nella certificazione 70-483 delle regole su come trattare le variabili

Re: codice uid esadecimale con zero iniziale

MessaggioInviato: 30 nov 2017, 19:21
da miomiomio
ho comprato questo
ALLARME 5V BUZZER ARDUINO cicalino oscillatore integrato 3,1KHz piezo circuiti
l'ho collegato al pin 6 + e al gnd -.
Emette un labile clac e basta e non un sonoro beep. Sbaglio qualcosa oppure dovevo prendere un piezobuzzer?
nel codice ho messo:
Codice: Seleziona tutto
pinMode(6, OUTPUT); //buzzer

grazie.