čtečka RFID Gwiot 7941E

Odpovědět
vodny86
Příspěvky: 13
Registrován: 18 lis 2019, 15:31
Reputation: 0

čtečka RFID Gwiot 7941E

Příspěvek od vodny86 » 18 lis 2019, 15:36

Zdravím.

Rád bych se zeptal, zda nemá někdo zkušenosti s čtečkou karet Gwiot 7941E
Používám k ní tuto knihovnu https://github.com/gutierrezps/gwiot7941e a musím říct, že je to dobré, nicméně potřebuji těchto čteček k jednomu Arduinu připojit více (konkrétně 5).
Problém je v tom, že funguje vždy jen ta poslední definovaná čtečka v kódu. Vidím to na nějaké omezení v SerialSoftware, který to také používá.

Není tu někdo, kdo se tomu někdy věnoval?

Děkuju

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: čtečka RFID Gwiot 7941E

Příspěvek od KamilV » 19 lis 2019, 08:26

SoftwareSerial můžeš použít ve více instancích, ale v jeden okamžik můžeš číst právě z jednoho z nich.

Těžko říct, proč Ti funguje vždy jen ta poslední čtečka. Nepodařilo se mi odhadnout, jak to asi máš zapojené a pak jsem si představil asi 3 varianty kódu, které by mohly být špatně...

vodny86
Příspěvky: 13
Registrován: 18 lis 2019, 15:31
Reputation: 0

Re: čtečka RFID Gwiot 7941E

Příspěvek od vodny86 » 19 lis 2019, 08:45

SoftwareSerial můžeš použít ve více instancích, ale v jeden okamžik můžeš číst právě z jednoho z nich.
Tak pak by neměl být problém, ty čtečky se používají s velmi malou frekvencí a na 99% se nikdy nepotkají se čtením ve stejný čas.

Kód: Vybrat vše

#include <Gwiot7941e.h>

//ČTEČKA HLAVNÍHO VSTUPU
#define pinCteckaHlVstup 62
Gwiot7941e cteckaHlVstup;

//ČTEČKA SKLO
#define pinCteckaSklo 63
Gwiot7941e cteckaSklo;

//ČTEČKA KANCELAR REDITELE
#define pinCteckaReditel 64
Gwiot7941e cteckaKancelarReditel;

//ČTEČKA TURNIKET VSTUP
#define pinCteckaTurniketVstup 65
Gwiot7941e cteckaTurniketVstup;

//ČTEČKA TURNIKET VYSTUP
#define pinCteckaTurniketVystup 66
Gwiot7941e cteckaTurniketVystup;

// ZAHAJENI SERIOVE LINKY  
  Serial.begin(115200);  

------v sekci setup()---------

  // ZAHAJENI SERIOVE LINKY  PRO CTECKY  
  cteckaHlVstup.begin(pinCteckaHlVstup); 
  cteckaSklo.begin(pinCteckaSklo);
  cteckaKancelarReditel.begin(pinCteckaReditel);
  cteckaTurniketVstup.begin(pinCteckaTurniketVstup);  
  cteckaTurniketVystup.begin(pinCteckaTurniketVystup);

----ve smyčce loop----

if (cteckaHlVstup.update()){
       
    Serial.print("otviram hl vstup...");
          
  }

if pro každou čtečku .update();
  
Ve stručnosti je to asi takto

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: čtečka RFID Gwiot 7941E

Příspěvek od KamilV » 19 lis 2019, 13:49

Nestudoval jsem tu knihovnu nějak dlouze, ale zkoušel jsi:

Kód: Vybrat vše

------v sekci setup()---------

  // ZAHAJENI SERIOVE LINKY  PRO CTECKY  
  cteckaHlVstup.begin(pinCteckaHlVstup, 1); 
  cteckaSklo.begin(pinCteckaSklo, 2);
  cteckaKancelarReditel.begin(pinCteckaReditel, 3);
  cteckaTurniketVstup.begin(pinCteckaTurniketVstup, 4);  
  cteckaTurniketVystup.begin(pinCteckaTurniketVystup, 5);
?

vodny86
Příspěvky: 13
Registrován: 18 lis 2019, 15:31
Reputation: 0

Re: čtečka RFID Gwiot 7941E

Příspěvek od vodny86 » 19 lis 2019, 14:07

Ahoj ano, to jsem zkoušel ale bez výsledku :-( chybu to nevrátí ale stále funguje jen ta čtečka co je uvedená jako poslední

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: čtečka RFID Gwiot 7941E

Příspěvek od KamilV » 19 lis 2019, 14:56

Ano, ta knihovna je prostě napsaná trochu blbě a souběh neřeší, ačkoliv by mohla.

Ty prostě můžeš číst právě z jednoho RX u SoftwareSerial. Ta knihovna by měla přepínat mezi piny, ze kterých chce číst:
https://www.arduino.cc/en/Reference/Sof ... rialListen

Já bych tu knihovnu zahodil a četl RFID přímo pomocí SoftwareSerial. V loopu si to pořešíš pomocí listen(). Z té čtečky určitě leze UART, tak to bude na pár řádků.

vodny86
Příspěvky: 13
Registrován: 18 lis 2019, 15:31
Reputation: 0

Re: čtečka RFID Gwiot 7941E

Příspěvek od vodny86 » 19 lis 2019, 15:09

Ano, ta knihovna je prostě napsaná trochu blbě a souběh neřeší, ačkoliv by mohla.
Velká škoda, protože to funguje velmi dobře až na ten souběh vícero čteček.

Nebylo by lepší tu jeho knihovnu nějakým způsobem doplnit tak, aby to řešila? nebo je jednodušší si to zkusit napsat přímo z SS?

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: čtečka RFID Gwiot 7941E

Příspěvek od KamilV » 19 lis 2019, 17:34

Úprava v té knihovně by neměla být o nic náročnější než to psát celé znovu, takže klidně v té knihovně a poslat PR autorovi.

vodny86
Příspěvky: 13
Registrován: 18 lis 2019, 15:31
Reputation: 0

Re: čtečka RFID Gwiot 7941E

Příspěvek od vodny86 » 20 lis 2019, 16:18

Tak jsem to zkoušel a zdá se to být funkční. Chtěl jsem to zkusit přepsat do OOP ale asi budu muset zastudovat. Vůbec se mě to nedaří. Myslel jsem, že to bude snažší

Kód: Vybrat vše

#include <Arduino.h>
#include <SoftwareSerial.h>

/***********************CLASS*******************************/ 
class Ctecka {
  
  private:
    int pinCtecky;
    String jmenoCtecky;     
    
  public:       
    Ctecka(int, String );    
    void cti();
    void start();    
  };

    Ctecka::Ctecka (int p, String jm){
          pinCtecky = p;
          jmenoCtecky = jm;
                                               
        }          
    
    void Ctecka::start(){
        SoftwareSerial jmenoCtecky(pinCtecky, -1);                          
        jmenoCtecky.begin(9600);           
      }
      
    void Ctecka::cti(){
              
        if (jmenoCtecky.available()){
            Serial.print ("XY")            
          }                                              
      }

Ctecka cteckHlVstup(66, "cteckaHlVstup"); 

/*************************************************/

void setup() {  
    
  cteckHlVstup.start();
  
}

/************************************************/

void loop() { 

  cteckHlVstup.cti();

}
Není možné ve VOIDu cti použít .available nebo cokoliv ze SoftwareSerial. Na to počítám bude nějaký fígl. Netušíte někdo? Plácám se s Arduinem pár týdnu a znalosti jsou nízké...

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: čtečka RFID Gwiot 7941E

Příspěvek od KamilV » 20 lis 2019, 20:00

V ansi C nejsou "proměnné proměnné" (v některých jazycích "chameleoni"). Ale ani to vůbec není potřeba. V construkctoru vůbec nepotřebuješ jméno čtečky. Nezapomínej, že classa je pouze nějaký "předpis", ale instancováním vznikne objekt, který si nějak pojmenuješ. V rámci toho objektu to pak žije vlastním životem (atributy objektů se "nepřekrývají"). Takže "jmenoCtecky" může jít pryč, místo toho budeš mít:

Kód: Vybrat vše

Ctecka cteckaH1vstup(pin); 
Instance SoftwareSerial zde už bude jako atribut konstantního jména.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů