Offline
Newbie
Karma: 0
Posts: 19
|
 |
« on: May 14, 2012, 11:36:14 am » |
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: #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!
|
|
|
|
|
Logged
|
|
|
|
|
Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« Reply #1 on: May 14, 2012, 12:33:46 pm » |
Che tipo sono ? 125Khz o 13.56Mhz ?? Molti tipi di rfid non hanno l'anti collissione, non puoi leggerli più di uno contemporaneamente!
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15757
+39 349 2158303
|
 |
« Reply #2 on: May 14, 2012, 01:41:33 pm » |
Secondo me anche voler gestire 5 connessioni seriali emulate via SW con un Arduino non é possibile. Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16524
Don't know what I do
|
 |
« Reply #3 on: May 14, 2012, 02:08:30 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15757
+39 349 2158303
|
 |
« Reply #4 on: May 14, 2012, 02:15:01 pm » |
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
|
|
|
|
|
Logged
|
|
|
|
|
0
Online
Edison Member
Karma: 15
Posts: 1890
Have you mooed today?
|
 |
« Reply #5 on: May 14, 2012, 02:18:09 pm » |
ciao 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  : The version of SoftwareSerial included in 1.0 and later is based on the NewSoftSerial library by Mikal Hart.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16524
Don't know what I do
|
 |
« Reply #6 on: May 14, 2012, 02:23:30 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #7 on: May 14, 2012, 02:27:45 pm » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16524
Don't know what I do
|
 |
« Reply #8 on: May 14, 2012, 02:34:59 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Senago - Milano
Offline
God Member
Karma: 3
Posts: 507
Arduino rocks
|
 |
« Reply #9 on: May 14, 2012, 03:03:04 pm » |
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..
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #10 on: May 15, 2012, 09:04:10 am » |
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!
|
|
|
|
|
Logged
|
|
|
|
|
rome
Offline
Sr. Member
Karma: 13
Posts: 342
|
 |
« Reply #11 on: May 15, 2012, 09:07:12 am » |
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 ...
|
|
|
|
« Last Edit: May 15, 2012, 09:11:09 am by brunialti »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #12 on: May 15, 2012, 09:13:29 am » |
No, sono totalmente separati, l'Arduino lo alimento da pc mentre gli rfid da un alimentatore, ma cosa cambia?
|
|
|
|
|
Logged
|
|
|
|
|
rome
Offline
Sr. Member
Karma: 13
Posts: 342
|
 |
« Reply #13 on: May 15, 2012, 09:21:53 am » |
Succede che con alimentazione esterna rispetto alle linee dati arduino ha un gnd diverso da quello dei device e spesso questo crea problemi
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #14 on: May 15, 2012, 09:40:40 am » |
Quindi esternalmente dovrei dargli solo i 5v e il gnd darlo all'Arduino?
|
|
|
|
|
Logged
|
|
|
|
|
|