Go Down

Topic: 5 RFID con Arduino Uno (Read 1 time) previous topic - next topic

Andryy

Ciao a tutti, avrei un problema con Arduino Uno nel gestire 5 RFID Reader ID-12 nello stesso tempo.
Ora ne sto usando 2 per le prove e spesso non riescono a leggere il tag RFID o lo fanno male.
Non so se il problema è dell'alimentazione(li alimento con l'Arduino, ma con un alimentatore esterno non funzionano, non so perchè) o del programma:
Code: [Select]
#include <NewSoftSerial.h>

NewSoftSerial ss(8, 3);
NewSoftSerial ss2(9, 4);
NewSoftSerial ss3(10, 5);
NewSoftSerial ss4(11, 6);
NewSoftSerial ss5(12, 7);

void setup()
{
 
  Serial.begin(9600);
  ss.begin(9600);
  ss2.begin(9600);
  ss3.begin(9600);
  ss4.begin(9600);
  ss5.begin(9600);
 
}

void loop()
{
  ss.listen();
 
  char c = 0;
  int cont = 0;
    if(ss.available()){
    do{
    cont++;
    if (ss.available())
    {
      cont=0;
      c = ss.read();
      Serial.print(c);
    }
    }while(cont != 11);
    }
 
  ss2.listen();
  c = 0;
  cont = 0;
  if(ss2.available()){
  do{
  cont++;
  if (ss2.available())
  {
    cont=9;
    c = ss2.read();
    Serial.print(c);
  }
  }while(cont != 11);
  }
  ss3.listen();
 
  c = 0;
  cont = 0;
    if(ss3.available()){
    do{
    cont++;
    if (ss3.available())
    {
      cont=9;
      c = ss3.read();
      Serial.print(c);
    }
    }while(cont != 11);
    }
   
  ss4.listen();
  c = 0;
  cont = 0;
  if(ss4.available()){
  do{
  cont++;
  if (ss4.available())
  {
    cont=9;
    c = ss4.read();
    Serial.print(c);
  }
  }while(cont != 11);
  }
  ss5.listen();
 
  c = 0;
  cont = 0;
    if(ss5.available()){
    do{
    cont++;
    if (ss5.available())
    {
      cont=9;
      c = ss5.read();
      Serial.print(c);
    }
    }while(cont != 11);
    }
 
}
 

Grazie!

lollotek

Che tipo sono ? 125Khz o 13.56Mhz ??
Molti tipi di rfid non hanno l'anti collissione, non puoi leggerli più di uno contemporaneamente!

uwefed

Secondo me anche voler gestire 5 connessioni seriali emulate via SW con un Arduino non é possibile.
Ciao Uwe

leo72


Secondo me anche voler gestire 5 connessioni seriali emulate via SW con un Arduino non é possibile.
Ciao Uwe

La NewSoftSerial può reggere più canali seriali software a patto di usarne solo 1 alla volta. Non ho esaminato il suo codice per cui non so se il problema sta qui.
Anche la SoftwareSerial dell'Arduino IDE 1.0 permette di poter gestire più canali seriali software ma di poter dialogare solo con 1 alla volta.

uwefed

Leo, cosa intendi per dialogare?
Penso che per ricevere i dati di 5 lettori RFID debbano essere attivi tutti i 5 canali di ricezione delle seriali.
Ciao Uwe

pitusso

ciao

Quote
La NewSoftSerial può reggere più canali seriali software a patto di usarne solo 1 alla volta. Non ho esaminato il suo codice per cui non so se il problema sta qui.
Anche la SoftwareSerial dell'Arduino IDE 1.0 permette di poter gestire più canali seriali software ma di poter dialogare solo con 1 alla volta.


effettivamente la SoftwareSerial distribuita con l'IDE 1.0 è basata sulla NewSoftSerial  :P:

Quote
The version of SoftwareSerial included in 1.0 and later is based on the NewSoftSerial library by Mikal Hart.

leo72


Leo, cosa intendi per dialogare?
Penso che per ricevere i dati di 5 lettori RFID debbano essere attivi tutti i 5 canali di ricezione delle seriali.
Ciao Uwe

Siccome è basata sugli interrupt, per non caricare eccessivamente la ISR potrà spedire/ricevere solo da 1 canale seriale per volta. Per cui se metti, ad esempio, 5 invii sulle 5 seriali saranno eseguiti 1 dietro l'altro e non in contemporanea. Così varrà immagino per la ricezione, nel senso che non appena metti un read su un canale, non potrai fare altrettanto su un altro canale dato che dai l'uso dell'interrupt al primo.

Andryy


Che tipo sono ? 125Khz o 13.56Mhz ??
Molti tipi di rfid non hanno l'anti collissione, non puoi leggerli più di uno contemporaneamente!


Sinceramente non ne ho idea...


Leo, cosa intendi per dialogare?
Penso che per ricevere i dati di 5 lettori RFID debbano essere attivi tutti i 5 canali di ricezione delle seriali.
Ciao Uwe

Siccome è basata sugli interrupt, per non caricare eccessivamente la ISR potrà spedire/ricevere solo da 1 canale seriale per volta. Per cui se metti, ad esempio, 5 invii sulle 5 seriali saranno eseguiti 1 dietro l'altro e non in contemporanea. Così varrà immagino per la ricezione, nel senso che non appena metti un read su un canale, non potrai fare altrettanto su un altro canale dato che dai l'uso dell'interrupt al primo.

Si, è quello che ho cercato di fare, ma temo non mi sia riuscito bene, per questo ho chiesto  :)

leo72


Si, è quello che ho cercato di fare, ma temo non mi sia riuscito bene, per questo ho chiesto  :)

Sinceramente non so come opera la NewSoftSerial "dietro le quinte". Andrebbe esaminato il codice e capita la sua struttura. Io non ci ho mai gestito più di 1 canale per volta.

lollotek

Scusa, avevo capito che volevi leggere 5 tessere contemporaneamente..
Ma da che codice di esempio sei partito? Perché dici che legge male? Ma con una tessera funge?
Quando ci sono problemi bisogna sempre scomporre in sotto parti.. una volta che va bene uno basta fare un cliclo for..

Andryy


Scusa, avevo capito che volevi leggere 5 tessere contemporaneamente..
Ma da che codice di esempio sei partito? Perché dici che legge male? Ma con una tessera funge?
Quando ci sono problemi bisogna sempre scomporre in sotto parti.. una volta che va bene uno basta fare un cliclo for..

Beh, quasi, in pratica devo leggere rfid da 5 lettori, non contemporaneamente, però spesso non mi restituisce il tag dell'rfid.
Con uno funziona, però per quello ho usato la SoftwareSerial, che non sono riuscito a fare funzionare con 2 rfid.
Suggerimenti su come usare la SoftwareSerial (se si può) con più rfid o su come farne andare 5 con la NewSoftSerial?
Grazie!

brunialti

#11
May 15, 2012, 04:07 pm Last Edit: May 15, 2012, 04:11 pm by brunialti Reason: 1
potrei dire una bestialità, ma se hai 5 device seriali attaccati ad arduino ma alimentati separatamente, hai controllato che il gnd arduino sia connesso ai gnd dei 5 device?

Poi NewSoftwareSerial e SoftwareSerial sono veramente le stesse in IDE 1.0 ...

Andryy

No, sono totalmente separati, l'Arduino lo alimento da pc mentre gli rfid da un alimentatore, ma cosa cambia?

brunialti

Succede che con alimentazione esterna rispetto alle linee dati arduino ha un gnd diverso da quello dei device  e spesso questo crea problemi

Andryy

Quindi esternalmente dovrei dargli solo i 5v e il gnd darlo all'Arduino?

Go Up