Come utilizzare il lettore rfid rdm6300 ed il Bluetooth hc-05

Ciao a tutti,

Stavo provando a far leggere tessere rfid a 125khz con il modulo rdm6300, fin qui tutto bene includendo la libreria rdm6300.

Setup corretto tutto esce sulla serial e leggo l’ID tramite Seria.print()

Quando includo la libreria softwareserial perinizializzare il bluetooth tutto smette di funzionare.

Come se fossero le librerie incompatibili oppure li due seriali non fattibili ma avevo provato lo stesso sketch con il modulo mfrc522 includendo quella libreria e funzionava alla grande.

Sapete indicarmi cosa controllare oppure come risolvere ve ne sarei grato

Grazie a tutti per le risposte

Buonasera e benvenuto nella sezione Italiana del forum,

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 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:

Buongionro Guglielmo,

presentazione fatta, dato che avrei necessità di risolvere il prima possibile non è che potrebbe aprirmi il post?

Grazie mille.

incollo per chiarezza il codice:

#include <rdm6300.h>
#include <SoftwareSerial.h>

#define RDM6300_RX_PIN 6
//define pin for Bluetooth
SoftwareSerial BTSerial(2, 3);      //TX -> 2 RX -> 3
                        
Rdm6300 rdm6300;

void setup() {
  Serial.begin(9600);
  rdm6300.begin(RDM6300_RX_PIN);
  Serial.println("Approximate your card to the reader...");
 BTSerial.begin(9600);
}

void loop() {
  if (rdm6300.get_tag_id())
    Serial.println(rdm6300.get_tag_id(), DEC);
    BTSerial.print(rdm6300.get_tag_id(), DEC);
  delay(1000);
}

Che scheda Arduino stai usando?

Ciao, Ale.

ATmega328p clone (arduino nano)

Il problema è che anche la libreria rdm6300 usa la software serial. Prova ad aggiungere rdm6300.listen() all'inizio del loop(), perchè se si usano più istanze della software serial solo una alla volta può ricevere dati, e va selezionata appunto con listen(). Se poi devi anche ricevere dati via bluetooth devi fare lo stesso con la BTSerial.

Ciao, Ale.

Scusami, se sono proprio base base ma quindi invece che rdm6300.get_tag_id() devo mettere .listen()?
l'obiettivo è quello di riuscire a leggere l'id dal reader ed inviarlo tramite bluetooth.
Il problema è che non posso fare debug in questo modo. perchè non posso utilizzare la Serial e la BTSerial insieme a quanto ho capito?

Perdonami ancora ma non ci capisco quasi nulla.... :slight_smile:

il discorso è che dalla rdm6300 ok il listen perchè devo recepire l'id della tessera ma poi con il bluetooth e quindi la BTSerial devo trasmettere non riscevere è uguale?

No, lo devi aggiungere prima:

void loop() {
rdm6300.listen();
if (rdm6300.get_tag_id()){
    Serial.println(rdm6300.get_tag_id(), DEC);
    BTSerial.print(rdm6300.get_tag_id(), DEC);
}
delay(1000);
}

Non è detto che funzioni, ma provare ti costa poco.

P.S. : mi accorgo ora che nel codice mancano anche delle parentesi graffe nell'if, le ho aggiunte nel codice sopra.

Ciao, Ale.

ok quindi ogni volta che devo ricevere da una softwareSerial devo abilitarla ad ascoltare, chiaro. Mentre per inviare non ci sono problemi posso utilizzarlo così?
Perchè dici non è detto che funzioni? cosa potrebbe non funzionare? Scusami ma mi piace imparare e sto leggendo tanto in questi giorni ma non capisco cosa potrebbe andare male.

Grazie mille sei gentilissimo :slight_smile:

Ho cambiato il codice così:

#include <rdm6300.h>
#include <SoftwareSerial.h>

#define RDM6300_RX_PIN 6
//define pin for Bluetooth
SoftwareSerial BTSerial = SoftwareSerial(2, 3);      //TX -> 2 RX -> 3
String rfid;
Rdm6300 rdm6300;

void setup() {
  Serial.begin(9600);
  rdm6300.begin(RDM6300_RX_PIN);
  Serial.println("Approximate your card to the reader...");
  BTSerial.begin(9600);
}

void loop() {
rdm6300.listen();
if (rdm6300.get_tag_id()){
    Serial.println(rdm6300.get_tag_id(), DEC);
    BTSerial.print(rdm6300.get_tag_id(), DEC);
}
delay(1000);
}

Si, a regola per inviare non serve.

Perchè non l'hardware ne la voglia di fare delle prove, per cui non posso essere certo che funzioni.

Legge di Murphy - Wikipedia :crazy_face:

Ciao, Ale.

Troppo simpatico! Grande :wink: :slight_smile:
Grazie mille appena torno provo e vediamo come va... Spero bene.

La libreria SoftwareSerial ... NON è sicuramente delle migliori (... e sono buono :roll_eyes:) ed ha parecchie limitazioni sia relativamente ai pin utilizzabili (a seconda della MCU usata) sia per il fatto che più istanze della libreria (ovvero più moduli che la usano) creano problemi, specie in ricezione (e tu hai due istanze, una per il RDM6300 ed una per il bluetooth) ... per questo ti è stato detto che potrebbe non funzionare.

Se ti studi il reference della libreria vedi che queste cose sono indicate.

Guglielmo

Ma ci sono delle librerie alternative che posso utilizzare se questa non funziona? Scusate ma sono davvero newbie. :slight_smile:

Ce ne sono, ma non permettono istanze multiple dato che, in funzione della MCU, prevedono, per garantire il massimo della performance, pin fissi.

Per ora prova come ti ha detto "ilguargua" ... così gli dici che quella da cui vuoi ricevere è la seriale creata per il RDM6300 e sull'altra ti limiti a trasmettere ...

Guglielmo

Si infatti prima utilizzavo la libreria MFRC522 per il reader di schede 13,56Mhz ma poi mi hanno detto che le schede sono a 125Khz e quindi ho dovuto cmabiare lettore e non sapevo che la libreria del lettore RDM6300 fosse la SoftwareSerial.
Per info come faccio a vedere le reference delle librerie per scoprire queste cose? mi ha lincato la reference della SoftwareSerial ma per esempio dove trovo la reference della rdm6300?

Grazie ancora per la pazienza e la disponibilità sto imparando e quiesti sono strumenti essenziali.

Considera che la maggior parte delle librerie sono scritte "gratuitamente" da persone che le scrivono prima di tutto perché servono a loro e poi, magari, le rendono pubbliche, quindi ... NON tutte sono ben documentate ed hanno un reference ... sta alla buona volontà di chi le scrive documentarle ... ma non è obbligatorio ... :roll_eyes:

Comunque a QUESTO link trovi l'elenco di tutte le librerie (divise per categorie) che sono conformi allo standard Arduino e che puoi scaricare direttamente dal "Gestore di Librerie " dell'IDE ... dall'elenco puoi andare alla descrizione (dove spesso c'è qualche spiegazione) ed ai sorgenti, studiando i quali ... si arriva a capire come funziona la libreria.

Guglielmo

Grazie mille Guglielmo.
Appena riesco a testare e funziona metto soluzione alla risposta di @ilguargua

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