Problemi con array byte su libreria MFRC522 [RISOLTO]

Ciao a tutti, vi prego di perdonarmi se scrivo qualche castroneria.

sto affrontando la libreria MFRC522, dalla quale ho caricato l'esempio ReadNUID.

a un certo punto, dopo che ha verificato che sia tutto ok, tramite un ciclo for, scrive su un array chiamato "rfid.uid.uidByte[i]" il valore comunicato dalla scheda.

io dichiaro un altro array, chiamato byte a[4], che dovrebbe essere identico a quello che ha letto lui.
Stampando su seriale, sia il mio che il suo array sono apparentemente identici. Eppure, successivamente ho messo un if, che dovrebbe verificare se i due array sono uguali e, se lo sono, dovrebbe stampare su seriale "OK".

Tuttavia non accade e non so dove sto errando.

Grazie a chiunque abbia voglia di aiutarmi.

 if (rfid.uid.uidByte[0] != nuidPICC[0] || 
    rfid.uid.uidByte[1] != nuidPICC[1] || 
    rfid.uid.uidByte[2] != nuidPICC[2] || 
    rfid.uid.uidByte[3] != nuidPICC[3] ) {
    Serial.println(F("A new card has been detected."));
    
    // Store NUID into nuidPICC array
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
      
    }
  byte a[4] = {99,101,138,145};
  
   printDec(a, rfid.uid.size);
   Serial.println();
   
   
   
    Serial.println(F("The NUID tag is:"));
    Serial.print(F("In hex: "));
    printHex(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    Serial.print(F("In dec: "));
    printDec(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();

if (rfid.uid.uidByte == a){  
      Serial.print("OK");
      Serial.println();
      }

Ciao. Non puoi confrontare 2 array in quel modo. Devi confrontare i singoli elementi.
Puoi usare un if con 4 condizioni oppure un ciclo.

1 Like

(Snippets R Us!)

NON si possono comparare gli array così ... in questo modo stai comparando l'indirizzo di memoria dove inizia il primo array con quello del secondo array e ... ovviamente sono diversi.

Il sistema più semplice è comparare, magari in un ciclo for, elemento per elemento, oppure usare una funzione (memcmp())che mette a disposizione <string.h> che fa parte di AVR libc (libreria sempre inclusa automaticamente).

Guglielmo

1 Like

Ottimo, ho risolto mettendo a confronto i singoli elementi. Perdonatemi, avevo davvero perso la testa.. Basta mettere "Risolto" per chiudere?

Si, è sufficiente ... la discussione rimane comunque ancora aperta per alcuni mesi ... magari qualche altro utente prende spunto per fare altre domande :wink:

Guglielmo

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.