Я очень новичок в Python, я немного учился за последние пару недель. Это то, что мне удалось придумать. Я на седьмом небе от счастья, код работает большую часть времени.
Я использую 2 контакта GPIO для чтения формата wiegand со считывателя на мой Raspberry Pi 2.
Однако это не так. не всегда правильно сканирует. Иногда сканирование зависает при сохранении бита, и мне приходится обманывать ридер во второй раз, чтобы завершить его. Иногда он заканчивается правильно. Иногда он заканчивается номером карты, который совершенно неверен. Обычно обман в третий раз дает новый набор информации, который является правильным. Я возился с версиями PIGPIO для C и Python, чтобы попытаться понять, что я делаю по-другому. Я не могу понять, почему он всегда возвращает правильный набор значений от читателя, используя этот код. У меня недостаточно знаний, чтобы полностью понять, что происходит в коде PIGPIO, поэтому я не уверен, как добиться такой согласованности в моем собственном коде, когда я получаю информацию от читателя.
Действительно ли что-нибудь всплывает немедленно для любого, кто указывает на ошибку в моей логике для чтения информации от читателя?
Помните, я супер новичок, поэтому мне нужно немного подержать руку с этим. Я хочу захватить только 26-битный формат карты с 26-битного устройства чтения карт HID. У меня есть 3 разных брелка/карты формата HID, и я использовал их для тестирования. Проблема возникает при использовании одного и того же брелока снова и снова, и если я переключаюсь между ними, используя один за другим. Иногда он будет сканировать нормально более 10 раз, в других случаях он сразу же выйдет из строя и не будет работать в течение 2 или 3 сканирований.
from time import sleep
import os
import RPi.GPIO as GPIO
import pifacecad as p
GPIO.setmode(GPIO.BOARD)
#GPIO setup
data0=38
data1=40
GPIO.setup(data0,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(data1,GPIO.IN,pull_up_down=GPIO.PUD_UP)
#Setting up display
cad = p.PiFaceCAD()
cad.lcd.backlight_on()
cad.lcd.clear()
cad.lcd.cursor_off()
cad.lcd.blink_off()
cad.lcd.write("Ready")
#Variables
i=0
dataBits=[]
bitCount=1
fcc="0"
card="0"
Zero="0"
One="1"
hexFilter=[]
hexCard=[]
hexFCC=[]
justRead=0
j=0
k=0
#Main code
while (1):
#Reading code
while (bitCount<27):
if GPIO.input(data0)==0:
dataBits.append(Zero)
print dataBits
print "Bitcount %d" % bitCount
bitCount = bitCount+1
justRead=1
if GPIO.input(data1)==0:
dataBits.append(One)
print dataBits
print "Bitcount %d" % bitCount
bitCount = bitCount+1
justRead=1
if justRead ==1:
if bitCount>26:
#Transforming our information into usable bits
#Rest of the code just handles the information and prints to a screen.
#The issue existed before I wrote the rest of the code
Я использую схему деления напряжения с резисторами, чтобы понизить 5 В до 3 В, а мои линии передачи данных и Pi заземлены вместе.
Зависание Wiegand Виганд Неправильно
РЕДАКТИРОВАТЬ: решено здесь