Moin zusammen.
Ich bin hier als Laie unterwegs. Das ein oder andere bekomme ich schon hin aber ich scheitere an meinem Display.
Ich habe mir vor längerer Zeit das Original Pi Touch Display gebraucht zugelegt (Schnäpchen wollte eigentlich nur den beiligenden Pi haben). Jetzt möchte ich meinen Smart Home Hausbus über dieses Display bedienen. Die bedienung über ein Webseite läuft.
Jetzt versuche ich schon seit Monaten die Hintergrundbeleuchtung über einen Abstandssensor zu steuern. Es ist ein 2Y0A21 Sensor mit einem Messbereich von 10 bis 80 cm. Über eine kleine Transistorschaltung zieht der Sensor ab ca. 50cm den GPIO auf Masse.
Ich habe über diverse Tutorials das ganze soweit hin bekommen das die Hand vorm Sensor das Display aktiviert und ohne Hand das Display sofort (ca 0-2 sec) wieder dunkel schaltet.
#!/usr/bin/python
# PI 7" Touchscreen Display Toggles backlight on/off with button press
import RPi.GPIO as GPIO
from subprocess import call
import time
GPIO.setmode(GPIO.BCM)
SENSOR_PIN = 27
GPIO.setup(SENSOR_PIN, GPIO.IN,)
# Initialisierung
Start = time.time()
Weg = 0
def set_backlight(channel):
global Start
bl_set = 0
file = open('/sys/class/backlight/rpi_backlight/bl_power','r+')
READ = GPIO.input(SENSOR_PIN)
if GPIO.input(SENSOR_PIN) == 0:
bl_set = 0
Weg = 0
print("hand vorm sensor")
if GPIO.input(SENSOR_PIN) == 1 : # and Start + 10 >=time.time :
print("Sensor frei")
Weg = 1
Start = time.time()
bl_set = 1
bl_update = str(bl_set)
file.seek(0)
file.write(bl_update)
file.close
GPIO.add_event_detect(SENSOR_PIN, GPIO.BOTH, callback=set_backlight)
#if time.time() >= Start + 10 and Weg ==1 :
# bl_set = 1
# print("Zeit")
try:
while True:
delta = 1
# reset GPIO settings if user pressed Ctrl+C
except KeyboardInterrupt:
GPIO.cleanup()
print("\nBye!")
Das klappt auch schon recht zuverlässig.
Der Auskommentierte Teil
#if time.time() >= Start + 10 and Weg ==1 :
# bl_set = 1
# print("Zeit")
soll quasi eine Ausschaltverzögerung erreichen.
Wenn das Signal an GPIO Pin 27 von Low auf High wechselt, soll das Display noch eine Zeit (hier 10sec) länger hell bleiben und das ganze auch noch nachtriggerbar.
Ich denke das die Funktion schon das erfüllen wird was ich erwarte, leider bekomme ich das nicht richtig in den Code eingebaut.
Zuerst hatte ich gedacht das das hinter die beiden "If GPIO.input..." passen würde, aber die werden ja nur durch den Interrupt über die Funktion aufgerufen und nicht wenn die Zeit weiter läuft.
Wenn Ich das ganze wie oben beschrieben da hin baue, wo ich es auskommentiert habe, komme ich auch nicht weiter.
Gehe ich falsch an die Sache ran oder bin ich auf dem richtigen Weg?
Gibt es noch anderen Optimierungsbedarf?
Ich bedanke mich schon jetzt für eure Hilfe.
Mit freundlichen Grüßen vom Weserdeich
Siebo