Считыватель Wiegand

Aven
Offline
Зарегистрирован: 16.04.2015

Имею пару читывателей совместимый с Wiegand 26.

Подключил его к 12В, объеденил земли источников питания.

DATA0 и DATA1 завел на 2 и 3 пины Arduino Nano. Притянул их встроенным PULL UP.

Настроил прерывания по RISING и считаю количество произошедших прерываний при считывании карточки.

Согласно всем описаниям в сети, в нормальных условиях без помех (я думаю на растоянии 50см у меня помех нет) должно прийти 26 импульсов. 

Что по факту:

Считыватель PR-A05 выдает 52 импульса - этот считыватель новый.

Считыватель IronLigic Matrix выдает 390 импульсов - этот считыватель снят с рабочей систему СКУД.

 

Что делать?

Aven
Offline
Зарегистрирован: 16.04.2015
C Matrix разобрался, в прерываниях был LOW, теперь выдает верно 26 бит, после преобразования в десятичную систему сходится с номером.
Осталось разобраться с PR-A05. Попробую подключить его к C2000-2 контроллеру, проверю с ним работу.
kristow
kristow аватар
Offline
Зарегистрирован: 08.08.2013

Добрый день.

У меня Matrix 2 HE.

Не получается прочитать в режиме Wiegand карту...

Считыватель при чтении карты пищит, но arduino ничего не принимает... Подскажите как вы читали данные с карты используя Wiegand?


#define MAX_BITS 100
volatile unsigned char databits[MAX_BITS];
volatile unsigned char bitCount = 0;
volatile unsigned char flagDone = 1;
volatile unsigned int wc=3000;
unsigned long facilityCode=0;
unsigned long cardCode=0;
int buzz = 5;
void ISR_INT0(){
  bitCount++;
  flagDone = 0;
  wc = 3000;
}
void ISR_INT1(){
  bitCount++;
  databits[bitCount]=1;
  flagDone = 0;
  wc = 3000;
}

void setup()
{
  Serial.begin(9600);
  pinMode(buzz, OUTPUT);
  digitalWrite(buzz, HIGH);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  attachInterrupt(0, ISR_INT0, FALLING);
  attachInterrupt(1, ISR_INT1, FALLING);
  wc = 3000;
}
void loop()
{
rfid();
}

void rfid()
{
    if (flagDone == 0) {if (--wc == 0) flagDone = 1;}
    if (bitCount > 0 && flagDone == 1) {
    unsigned int i;
    if (bitCount == 26)
    {
      for (i=2; i<=9; i++) { facilityCode <<=1; facilityCode |= databits[i];}
      for (i=10; i<26; i++) { cardCode <<=1; cardCode |= databits[i];}
      printBits();
    }
    bitCount = 0; facilityCode = 0; cardCode = 0;
    for (i=0; i<MAX_BITS; i++) { databits[i] = 0; }
    }
}

void printBits()
{
  digitalWrite(buzz, LOW);
  Serial.print(facilityCode);Serial.print("_");Serial.println(cardCode);delay(400);
  digitalWrite(buzz, HIGH);
}