
Ich habe ein Python Script für ein kleines Projekt zusammengeschrieben, es soll sich um eine art Klimaanlage handeln. Das Programm läuft auch so wie ich mir das bis jetzt vorgestellt habe.
Das Problem ist jetzt nur, dass ich nach dem erstmaligen Betätigen des Touch Switch die Messungen starten kann aber dann nach der zweiten Betätigung leider nicht mehr aus der while-Schleife, in der Funktion main(), herauskomme (obwohl das der Plan ist). Habe das mit dem break offensichtlich leider noch nicht begriffen.

Diese letzte Bedingung bereitet mir seit einigen Tagen ziemlich Kopfzerbrechen und ich bekomme es einfach nicht hin, kann mir daher jemand bitte einen Tipp geben, wo der Fehler in der Funktion main() mit dem break liegt? :K
P.S.: Ich möchte nicht das mir hier irgendjemand mein Progamm für mich schreibt, ich will lediglich nur ein Tipp.
Danke schon mal im voraus!
Code: Alles auswählen
'''
Zwei unterschiedliche Temperatursensoren werden in einer Schleife ausgelesen und auf einem Display ausgegeben.
Wenn der DHT11 Sensor den ausgelesenen Grenzwert aus der Konfigurationsdatei ueberschreitet laeuft ein Motor an.
Eine RGB-LED leuchtet gruen wenn sich beide Sensoren in einem definierten Bereich befinden, sobald einer
der Sensoren oder sogar beide den Bereich verlassen wechselt die RGB-LED ihre Farbe auf rot.
Das Programm soll mit einem Touch Switch gestartet und beendet werden.
'''
import time
import Adafruit_DHT
import RPi.GPIO as GPIO
import lcddriver
import Temp2 as t
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
DHT11 = Adafruit_DHT.DHT11
TempPin = 17
TouchPin = 13
GPIO.setup(TouchPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
tmp = 0
Gruen = 12
Rot = 15
GPIO.setup(Rot, GPIO.OUT)
GPIO.setup(Gruen, GPIO.OUT)
Motor1L = 16
Motor1E = 22
GPIO.setup(Motor1L, GPIO.OUT)
GPIO.setup(Motor1E, GPIO.OUT)
lcd = lcddriver.lcd()
t.setup()
Grenzwert = 25.0
def ReadConfigFile(Cfg):
print "Read: " , Cfg
global Grenzwert
fStatus = False
try:
f = open(Cfg)
lines = f.readlines()
f.close()
for l in lines:
if "#" in l:
continue
cfgValue = l.split('=', 1 )
if "LowerThresholdTemp" == cfgValue[0]:
Grenzwert = cfgValue[1]
print("Grenzwert=" + Grenzwert)
except IOError:
print "No File", Cfg
def test():
Temperatur, Luftfeuchtigkeit = Adafruit_DHT.read_retry(DHT11, TempPin)
if 15.0 < Temperatur < 75.0 and 15.0 < t.read() < 75.0:
print("LED gruen")
GPIO.output(Gruen, GPIO.HIGH)
GPIO.output(Rot, GPIO.LOW)
else:
print("LED rot")
GPIO.output(Rot, GPIO.HIGH)
GPIO.output(Gruen, GPIO.LOW)
def main(x):
if x == 0:
print("Programm aus")
lcd.lcd_clear()
if x == 1:
print("Programm an")
while x == 1:
if x == 0:
break
Temperatur, Luftfeuchtigkeit = Adafruit_DHT.read_retry(DHT11, TempPin)
if Temperatur < int(Grenzwert):
print("Kuehlung aus")
GPIO.output(Motor1E, GPIO.LOW)
GPIO.output(Motor1L, GPIO.HIGH)
else:
print("Kuehlung an")
GPIO.output(Motor1E, GPIO.HIGH)
GPIO.output(Motor1L, GPIO.HIGH)
if Temperatur is None:
print('Fehler bei der Messung')
else:
lcd.lcd_display_string("Temp in: " + str(int(Temperatur)) + " C ", 1)
lcd.lcd_display_string("Temp out: " + str(int(t.read())) + " C ", 2)
test()
continue
def loop():
while True:
main(GPIO.input(TouchPin))
time.sleep(1)
def destroy():
GPIO.cleanup()
if __name__ == '__main__':
try:
ReadConfigFile("Cfg")
loop()
except KeyboardInterrupt:
destroy()
lcd.lcd_clear()