2016-10-11 7 views
0

Ich habe gerade meine erste Raspberry Pi und 2-Kanal-Relais abgeholt. Ich versuche zu lernen, wie man in Python programmiert, also dachte ich, dass ein Pi zum Spielen ein guter Ausgangspunkt wäre. Ich habe eine Frage bezüglich des Timings meiner Relais über die GPIO-Pins.Raspberry Pi: Python versuchen/Ausnahme Schleife

Erstens benutze ich Raspbian Pixel und bearbeite meine Skripte über Gedit. Bitte siehe unten für das Skript, das ich bisher habe:

# !/usr/bin/python 
import RPi.GPIO as GPIO 
import time 

GPIO.setmode(GPIO.BCM) 

# init list with pin numbers 
pinList = [14] 

# loop through pins and set mode and state to 'high' 
for i in pinList: 
    GPIO.setup(i, GPIO.OUT) 
    GPIO.output(i, GPIO.HIGH) 

# time to sleep between operations in the main loop 
SleepTimeL = 60 #1 minute 

# main loop 
try: 
    GPIO.output(14, GPIO.LOW) 
    print "open" 
    time.sleep(SleepTimeL); 
    GPIO.cleanup() 

#Reset GPIO settings 
    GPIO.cleanup() 

# end program cleanly 
except KeyboardInterrupt: 
    print "done" 

Nun, das funktioniert ziemlich gut, es öffnet sich das Relais 14 angebracht kein Problem zu fixieren. Es durchläuft wie gewünscht 60 Sekunden und beendet dann das Programm. Sobald das Programm beendet ist, werden die GPIO-Einstellungen zurückgesetzt und das Relais schließt sich, aber das ist das Ende des Programms und dort beginnt mein Problem.

Ich möchte, dass dieses Skript das Relais für 60 Sekunden öffnet und dann für 180 Sekunden schließt. Sobald es 180 Sekunden erreicht, muss es die "try" -Anweisung erneut ausführen und das Relais für weitere 60 Sekunden öffnen und so weiter. Kurz gesagt, ich möchte eine Endlosschleife, die nur durch Abbrechen des Skripts unterbrochen werden kann. Ich bin mir nicht sicher, wie ich Python sagen soll, dass er das Relay für 180 Sekunden schließen soll und dann die try-Anweisung erneut ausführen soll, oder wie man es zu einer Endlosschleife macht.

Ich würde wirklich etwas Input von der Gemeinschaft schätzen. Jede Rückmeldung oder Unterstützung wird sehr geschätzt. Danke allen.

+0

Bitte bearbeiten Sie Ihren Beitrag, um Ihre Einrückung zu korrigieren. –

+0

Verwenden Sie einfach eine 'while True:' Schleife – reptilicus

+0

Hallo Robᵩ, ich habe es wie gewünscht bearbeitet. – Safjoe

Antwort

0

Verwenden Sie einfach ein while True Schleife, so etwas wie:

# main loop 
while True: 
    GPIO.output(14, GPIO.LOW) 
    print "open" 
    time.sleep(SleepTimeL); 
GPIO.cleanup() 
print "done" 
+0

Dank Reptilicus ... – Safjoe

+0

Dank Reptilicus, Ich habe es wie folgt zu arbeiten: # Zeit Offen = 60 Geschlossen = 180 # Hauptschleife während zwischen den Operationen in der Hauptschleife schlafen True: GPIO.output (14, GPIO.LOW) print "Open" time.sleep (Open) GPIO.output (14, GPIO.HIGH) print "geschlossen" time.sleep (Closed) Arbeit erledigt. Danke nochmal :-) – Safjoe

+0

Entschuldigung, ich weiß nicht was da passiert ist :-) – Safjoe

0

ich mit Reptilicus einverstanden sind, müssen Sie nur eine while-Schleife hinzufügen. "while True" wird für immer laufen, bis Sie ctrl-C drücken, um zu brechen. Sie müssen nur eine zweite Verzögerung hinzufügen, um das Relais vor dem Schleifen 180 Sekunden lang auszuschalten. Sie können eine andere Schlafzeitvariable erstellen, oder ich multipliziere einfach die, die Sie haben.

# main loop 
while True: 
    try: 
    GPIO.output(14, GPIO.LOW) 
    print "open" 
    time.sleep(SleepTimeL); 
    GPIO.cleanup() 

    #Reset GPIO settings 
    GPIO.cleanup() 
    time.sleep(2*SleepTimeL) 

    # end program cleanly 
    except KeyboardInterrupt: 
    print "done"