ich bin neu was das Thema Programmieren anbelangt und komme jetzt leider nicht weiter und hoffe nun auf eure Unterstützung.
Mein Projekt ist eine Photobooth zu basteln mit einer Spiegelreflexkamera und einem Raspberry Pi 2 Model B, zuzüglich drei LEDs (rot, gelb, grün) die über GPIO angesteuert werden und einen jeweiligen Status anzeigen.
Bis zu diesem Punkt funktioniert auch alles einwandfrei.
Nun möchte ich aber zusätzlich noch ein kleines Schmankerl hinzufügen:
Am Ende des Prozesses werden die 3 soeben geschossenen Fotos nun auf dem Monitor nacheinander angezeigt, quasi als eine kleine Diashow (siehe im Hauptcode Zeile 25 die auf Zeile 2 "def display pics" verweist).
Während die Diashow der 3 Fotos läuft sollen in diesem Zeitfenster die drei LEDs wie ein Lauflicht in einer Endlosschleife angesteuert werden.
Dies habe ich mit einem Subcode (zweite Python-Datei) mit dem Befehl "subprocess.call" (Codezeile 4 im Hauptcode) erreichen wollen.
Leider musste ich aber feststellen, dass der Hauptcode nicht weiterläuft während der Subprozess ausgeführt wird und der Hauptcode auf Beendigung des Subprozesses wartet und erst dann weiterläuft.
Der Hauptcode muss in meinem Fall aber währenddessen weiterlaufen und der Subcode (Lauflicht mit 3 LEDs) soll beendet werden sobald im Hauptcode die Defintion "def display pics" abgeschlossen wurde, sprich wenn die Diashow mit den 3 Fotos beendet ist.
Wie kann ich dies umsetzen?
Ausschnitt aus dem Hauptcode:
Code: Alles auswählen
# define the photo taking function for when the big button is pressed
def display_pics(jpg_group):
subprocess.call("sudo python /home/pi/scripts/photobooth/flashingLEDs.py", shell=True)
class Alarm(Exception):
pass
def alarm_handler(signum, frame):
raise Alarm
signal(SIGALRM, alarm_handler)
alarm(3)
try:
screen = init_pygame()
alarm(0)
except Alarm:
raise KeyboardInterrupt
for i in range(0, replay_cycles): #show pics a few times
for i in range(1, total_pics+1): #show each pic
filename = config.file_path + jpg_group + "-0" + str(i) + ".jpg"
show_image(filename)
time.sleep(replay_delay) # pause
finally:
print "All Done"
try:
display_pics(now)
except Exception, e:
tb = sys.exc_info()[2]
traceback.print_exception(e.__class__, e, tb)
pygame.quit()
print "Done"
time.sleep(restart_delay)
show_image(real_path + "/intro.png");
GPIO.output(READY_LED, True)
Subcode:
Code: Alles auswählen
import RPi.GPIO as GPIO, time, os, subprocess
# GPIO setup
GPIO.setmode(GPIO.BCM)
BUSY_LED = 22
POSE_LED = 18
READY_LED = 23
GPIO.setup(POSE_LED, GPIO.OUT)
GPIO.setup(READY_LED, GPIO.OUT)
GPIO.setup(BUSY_LED, GPIO.OUT)
GPIO.output (READY_LED, True)
time.sleep(0.2)
GPIO.output (READY_LED, False)
GPIO.output (POSE_LED, True)
time.sleep(0.2)
GPIO.output (POSE_LED, False)
GPIO.output (BUSY_LED, True)
time.sleep(0.2)
GPIO.output (BUSY_LED, False)