Moin moin,
ich habe ein kleines Problem mit meinem Programm.
Also, ich habe zwei Taster, ein LCD-Display und einen Sensor DHT11 an den Raspberry Pi angeschlossen.
In einzelnen Testprogrammen kann ich alle Taster, den Sensor und das LCD-Display sauber ansprechen bzw abfragen.
In Kombination bekommen ich aber nach kurzer Zeit Unsinn auf meinem LCD-Display angezeigt, wenn ich meine Taster oft genug gedrückt habe.
Leider bin ich ein bisschen Lost in Space im Augenblick. Zwar vermute ich, dass mein Interrupt der beiden Taster in die Ausgabe meines LCD-Displays dazwischenfunkt, doch ich weiß es nicht und ich weiß auch nicht wie ich den Fehler abstelle. Wie könnte ich den Sensor DHT11 auch in eine eigene Routine (Interrupt) packen?
Hier einmal mein Programm:
import lcddriver
import time
import Adafruit_DHT
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(5, GPIO.IN)
GPIO.setup(6, GPIO.IN)
sensor = Adafruit_DHT.DHT11
pin = 4
schwelle = 24
GPIO.output(23, GPIO.LOW)
lcd = lcddriver.lcd()
lcd.lcd_clear()
def Interrupt_up(channel):
global schwelle
global lcd
schwelle = schwelle + 1
lcd.lcd_display_string('Schwelle : {0:0.1f} C'.format(schwelle), 2)
print ('Schwelle : {0:0.1f} C'.format(schwelle), 2)
def Interrupt_down(channel):
global schwelle
global lcd
schwelle = schwelle - 1
lcd.lcd_display_string('Schwelle : {0:0.1f} C'.format(schwelle), 2)
print ('Schwelle : {0:0.1f} C'.format(schwelle), 2)
GPIO.add_event_detect(5, GPIO.FALLING, callback = Interrupt_up, bouncetime = 250)
GPIO.add_event_detect(6, GPIO.FALLING, callback = Interrupt_down, bouncetime = 250)
try:
while True:
lcd.lcd_display_string('Schwelle : {0:0.1f} C'.format(schwelle), 2)
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
lcd.lcd_display_string('Temperatur : {0:0.1f} C'.format(temperature), 1)
print ('Temperatur : {0:0.1f} C'.format(temperature), 1)
lcd.lcd_display_string('Luftfeuchte : {0:0.1f} %'.format(humidity),3)
print ('Luftfeuchte : {0:0.1f} %'.format(humidity),3)
lcd.lcd_display_string('Schwelle : {0:0.1f} C'.format(schwelle), 2)
print ('Schwelle : {0:0.1f} C'.format(schwelle), 2)
if temperature > schwelle:
GPIO.output(23, GPIO.HIGH)
lcd.lcd_display_string('Motor 1 : an', 4)
print ('Motor 1 : an', 4)
else:
GPIO.output(23,GPIO.LOW)
lcd.lcd_display_string('Motor 1 : aus', 4)
print ('Motor 1 : aus', 4)
else:
print('Fehler beim Einlesen der Daten. Starte einen weiteren Versuch!')
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
print("Bye")
Alles anzeigen
Ich bin für jeden Tipp dankbar
Tobias