Access control rfid + sd

Ciao a tutti,
sto creando un sistema di controllo accessi che apre una porta in seguito al passaggio del badge.
I badge autorizzati sono tutti definiti in un file txt caricto su una sd, putroppo però sto avendo qualche difficoltà a confrontare i valori presenti sulla sd con quelli letti dal rfid.
Per leggere ogni riga del file txt ho usato il comando:

sdrigaString = myFile.readStringUntil('\n');

mentre per leggere il valore del badge ho usato la libreria rdm6300.h e il comando seguente:

rfidString = rdm6300.get_tag_id();

Stampando entrambe le variabili string sulla seriale, i valori vengono mostrati correttamente, ma anche se risultano identici, se li metto a confronto nel seguente if, non risulta mai vero:

if (rfidString == sdrigaString)

Non riesco a capire dove sta il problema.
Grazie in anticipo per il vostro aiuto.

Buonasera e benvenuto nella sezione Italiana del forum, :slight_smile:

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

// Dall'header della libreria che stai usando:
uint32_t get_tag_id(void);

Stai confrontando una String con un unsigned long ed è quindi normale che l'if non sia mai vero.
La strada più breve è sfruttare è probabilmente usare la funzione toInt() della classe String.

if ( rfidString == sdrigaString.toInt() )

Grazie per la risposta, ma purtroppo anche sostituendo l'if con quello che hai indicato, ho ancora lo stesso problema

Metti lo sketch completo ed eventualmente anche l'output del monitor seriale dove stampi sia il valore recuperato dalla SD che quello del lettore RFID.

Ho caricato lo sketch (ancora da ottimizzare), file di output e file txt presente sulla SD.
Per leggere la SD sto usando una Ethernet Shield in attesa del modulo SD dedicato.
Il riconoscimento della "card programmazione" avviene correttamente, mentre il confronto tra rfid e valore letto dalla sd avviene nel void checkCard()
Grazie

A me sembra strano anche che compili questo sketch...

Le variabili le dichiari tutte String, ma da quanto ho potuto vedere il metodo della libreria <rdm6300.h> restituisce un intero.

//Dichiarazione librerie
#include <SPI.h>
#include <SD.h>
#include <rdm6300.h>

//Dichiarazione pin digitali
#define RDM6300_RX_PIN 2
#define PIN_SD 4
#define RELE 5      // pin relè

//Dichiarazione variabili
String rfidString;
String new_rfidString;
String sdrigaString;
byte statoCheck;

//Inizializzazione RFID
Rdm6300 rdm6300;


Grazie per avermi indirizzato sulla strada giusta!
Ho dichiarato la variabile rfidString come unsigned long e ora utilizzando il tuo if, quando diventa vero, esegue le instruzuoni al suo interno.
Il problema è stato risolto!!
Grazie ancora

Morale ... quando si usa una libreria, come prima cosa studiarsi i metodi che si richiamano per capire COSA vogliono e COSA restituiscono :wink:

Guglielmo

P.S.: il comodo su Arduino è che le librerie vengono rilasciate in formato sorgete, quindi ... semplicemente esaminabili :slight_smile:

1 Like

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