zu meinem Problem:
Ich habe mir einen Türöffner mit RFID Leser gebastelt. Funktioniert auch wunderbar. Wenn ich eine gültige Karte einlese wird ein Script gestartet, dass einen Motor steuert der den Schlüssel im Schloss dreht.
Das funktioniert aber nur für das Aufschließen. Zusperren geht nur über die App SSH-Button.
Nun habe ich mir überlegt, zusätzlich noch einen Touch-Sensor mit einzubeziehen. Wenn der Touchsensor berührt wird soll eine Variable (touch) von 0 auf 1 gesetzt werden und diesen Wert für 5 Sekunden halten.
Das Türöffnerscript soll nun auf diesen Wert zugreifen und so lange dieser "1" ist die Tür zusperren und bei Wert "0" aufsperren.
So wie ich es jetzt probiert habe funktioniert es nicht. Ich lasse das Script "touch.py" laufen und starte danach "Read.py". Read.py liest jetzt nicht mehr de Chip aus sondern macht das gleiche wie touch.py: Wenn ich den Sensor berühre wird der Wert von "touch" ausgegeben (1) und 5 Sekunden später die "0". Mehr nicht.
Hier die beiden Scripte.
Zuerst touch.py:
Code: Alles auswählen
#!/usr/bin/env python3
#tweaked a script from an adafruit tutorial
#https://learn.adafruit.com/playing-sounds-and-using-buttons-with-raspberry-pi?view=all
import os
from time import sleep
import RPi.GPIO as GPIO
touch = 0
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN,pull_up_down=GPIO.PUD_UP)
while True:
try:
if (GPIO.input(4) == True):
touch = 1
print(touch)
sleep(5)
touch = 0
print(touch)
except KeybordInterrupt:
GPIO.cleanup()
sleep(0.5);
Code: Alles auswählen
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import subprocess
from pirc522 import RFID
from time import sleep
from touch.py import touch
rdr = RFID()
while True:
rdr.wait_for_tag()
(error, tag_type) = rdr.request()
if not error:
print ("Karte gefunden")
(error, uid) = rdr.anticoll()
if not error:
# print("UID: " + str(uid))
# Select Tag is required before Auth
if not rdr.select_tag(uid):
# Auth for block 10 (block 2 of sector 2) using default shipping key A
if not rdr.card_auth(rdr.auth_a, 10, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], uid):
# This will print something like (False, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
# print("Reading block 8: " + str(rdr.read(8)))
# ++++++++++++++Mein Code+++++++++++++++++++++++
gelesen = str(rdr.read(8))
richtigeid = "(False, [83, 101, 115, 97, 109, 111, 101, 102, 102, 110, 101, 100, 105, 99, 104, 32])"
# print("Variable test: "+test)
# print("richtige ID: "+richtigeid)
if gelesen == richtigeid and touch == 1:
print("Richtige Karte - zuschliessen")
print(touch)
# subprocess.Popen("/home/pi/Motor/zu.py")
elif gelesen == richtigeid and touch == 0:
print("richtige Karte - aufschliessen")
# subprocess.Popen("/home/pi/Motor/auf.py")
else:
print("falsche Karte")
sleep(1)
# ++++++++++++++Ende Mein Code++++++++++++++++++
# Always stop crypto1 when done working
rdr.stop_crypto()
Ich hab im Netz gelesen, dass man so etwas besser mit Threads und Funktionen macht, aber nicht verstanden wie es gemacht wird. Da fehlen mir wohl einfach die Programmierkenntnisse. Kann mir bitte jemand weiterhelfen?