ich bin neu hier im Forum und auch noch relativ frisch im Thema Raspberry und Python.
Nach dem ich mich eine Weile mit Python und Rasp Grundlagen beschäftigt habe.
Arbeite ich nun an meinem ersten kleinen "Projekt". Sicherlich schon oft gehört hier im Forum
geht es um das Thema RFID lesen, Zugangskontrolle usw.
Der bisherige Code funktioniert auch eigentlich so wie er soll. Sicherlich kann man diesen noch
besser strukturieren und in mehrere Module packen, aber ich bin halt noch in den Anfängen.
Hier der Code:
Code: Alles auswählen
# !/bin/bash/python
# -*- coding: utf8 -*-
# V0.01
# imports
import serial
import sys
import time
import pygame
import RPi.GPIO as GPIO
from operator import xor
from sys import exit
from time import sleep, clock
pygame.init()
# UART
ID = ""
Zeichen = 0
Checksumme = 0
Tag = 0
opentime = 3 # Zeit in der die Tuer geoeffnet bleibt
name1 = "Martin"
name2 = "Jessi"
my_sound = pygame.mixer.Sound('/home/pi/Music/keypad_fail.wav')
my_sound2 = pygame.mixer.Sound('/home/pi/Music/keypad_ok.wav')
# Flags
Startflag = "\x02"
Endflag = "\x03"
# UART oeffnen
UART = serial.Serial("/dev/ttyAMA0", 9600)
while True:
print("")
print("Warte auf Transponder....... ")
# Variablen loeschen
Checksumme = 0
Checksumme_Tag = 0
ID = ""
print(str(ID))
# Zeichen einlesen
Zeichen = UART.read()
# Uebertragungsstart signalisiert worden?
if Zeichen == Startflag:
# ID zusammen setzen
for Counter in range(13):
Zeichen = UART.read()
ID = ID + str(Zeichen)
# Endflag aus dem String loeschen
ID = ID.replace(Endflag, "" );
# Checksumme berechnen
for I in range(0, 9, 2):
Checksumme = Checksumme ^ (((int(ID[I], 16)) << 4) + int(ID[I+1], 16))
Checksumme = hex(Checksumme)
# Tag herausfiltern
Tag = ((int(ID[1], 16)) << 8) + ((int(ID[2], 16)) << 4) + ((int(ID[3], 16)) << 0)
Tag = hex(Tag)
print ID[4:10]
# Erlaubte RFID Chips
a = "581585" # Key 1
b = "551A10" # Key 2
if ID[4:10] == a:
my_sound2.play()
sleep(1)
print("Guten Tag " + str(name1) + " !")
print("Tuer offen fuer " + str(opentime) + " Sek!")
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT)
GPIO.output(21, True)
sleep(opentime)
GPIO.output(21, False)
GPIO.cleanup(21)
print("Tuer wieder verriegelt")
sleep(1)
elif ID[4:10] == b:
my_sound2.play()
sleep(1)
print("Guten Tag " + str(name2) + " !")
print("Tuer offen fuer " + str(opentime) + " Sek!")
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT)
GPIO.output(21, True)
sleep(opentime)
GPIO.output(21, False)
GPIO.cleanup(21)
print("Tuer wieder verriegelt")
sleep(1)
else:
print("Transpondernummer nicht gefunden!")
my_sound.play()
sleep(2)
Wie kann ich erreichen das UART nur einmal liest und nicht dauerhaft.
Ich schalte nach dem Einlesen ein Relais und lasse einen Sound abspielen.
Je nach dem wie lange ich aber den RFID Chip über den Reader halte, schaltet er das Relais bis zu 10 mal und mehr ohne das der Chip überhaupt in der Nähe des Readers ist.
Freue mich über Beiträge