Raspberry GPIO - for Schleife Abbrechen
Verfasst: Montag 16. Juli 2018, 21:03
Guten Abend, ich hoffe ich finde hier eine Lösung zu meinem kleinen Problem.
Es geht explizit um eine LED-Ansteuerung über Python. In einem Textdokument befinden sich verschiedene Vektoren, welche die Frequenz, Zeit und zu aktivierende LEDs enthalten.
In einer GUI werden über einen Start Button ein .txt Dokument eingelesen und Verabreitet. Dieses enthält Vektoren.
Ein Beispiel:
['5', '10', '1, '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
['15', '20', '0, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1']
['4', '12.5', '0, '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1']
Dieser Vektor sagt aus: Leuchte 5 Sekunden lang, mit einer Frequenz von 10Hz . Aktiviere für diese Einstellungen die ersten 3 von 24 LEDs.
Leuchte danach 15 Sekunden lang, mit einer Frequenz von 20Hz . Aktiviere für diese Einstellungen die LEDs 22,23,24.
Leuchte danach 4 Sekunden lang, mit einer Frequenz von 12.5Hz . Aktiviere für diese Einstellungen die LEDs 9,15,24.
Das Textdokument mit dem Code wird eingelesen und ausgeführt.
Das ist der Code:
Allgemein betrachtet funktioniert alles perfekt. Problem: Ich möchte nun diese schleife zwischendrin abbrechen können. Beispielsweise, habe ich in der GUI einen Button angelegt (Stop) dieser ist jedoch nicht anklickbar, wenn die Schleife läuft. Nun habe ich mit Threading versucht Abhilfe zu schaffen. Der Button ist anklickbar aber ich kann den Thread nicht beenden..
Gibt es hierzu eine schnelle, einfache Lösung?
Ich hoffe ich konnte mein Problem verdeutlichen.
Vielen lieben Dank schonmal!
Liebe Grüßßßee!
Es geht explizit um eine LED-Ansteuerung über Python. In einem Textdokument befinden sich verschiedene Vektoren, welche die Frequenz, Zeit und zu aktivierende LEDs enthalten.
In einer GUI werden über einen Start Button ein .txt Dokument eingelesen und Verabreitet. Dieses enthält Vektoren.
Ein Beispiel:
['5', '10', '1, '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
['15', '20', '0, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1']
['4', '12.5', '0, '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1']
Dieser Vektor sagt aus: Leuchte 5 Sekunden lang, mit einer Frequenz von 10Hz . Aktiviere für diese Einstellungen die ersten 3 von 24 LEDs.
Leuchte danach 15 Sekunden lang, mit einer Frequenz von 20Hz . Aktiviere für diese Einstellungen die LEDs 22,23,24.
Leuchte danach 4 Sekunden lang, mit einer Frequenz von 12.5Hz . Aktiviere für diese Einstellungen die LEDs 9,15,24.
Das Textdokument mit dem Code wird eingelesen und ausgeführt.
Das ist der Code:
Code: Alles auswählen
def start2():
import RPi.GPIO as GPIO
import time
from time import sleep
current_selection = Liste2.curselection()
name = Liste2.get(current_selection)
file = open('/home/pi/Designprojekt/GUI/Config1//' + name, 'r')
reader = file.read()
s = re.findall(r"[-+]?\d*\.\d+|\d+", reader)
b = len(s)
c = b / 26
for i in range(0, int(c)):
v1 = []
for i in s:
v1.append(float(i))
del s[0:26]
v2 = (4, 14, 17, 15, 27, 18, 22, 23, 10, 24, 9, 25, 11, 8, 7, 5, 6, 12, 13, 16, 19, 20, 26, 21) #Dies sind die Raspberry GPIO Channel, welche genutzt werden
d = np.array(v1[3:26])
searchval = 1
i = np.where(d == searchval)[0]
chan_list = []
for x in i:
chan_list.append(v2[x])
leuchten = chan_list
t_run = v1[0]
f = v1[1]
periods = int(t_run * f)
m = 1
n = 1
zeit = 1 / (2 * f)
GPIO.setmode(GPIO.BCM)
GPIO.setup(chan_list, GPIO.OUT, initial=0)
try:
if f >= 100:
GPIO.output(leuchten, 1)
time.sleep(t_run)
else:
for n in range(periods):
GPIO.output(leuchten, 1)
time.sleep(zeit)
GPIO.output(leuchten, 0)
time.sleep(zeit)
except KeyboardInterrupt:
pass
GPIO.cleanup()
Gibt es hierzu eine schnelle, einfache Lösung?
Ich hoffe ich konnte mein Problem verdeutlichen.
Vielen lieben Dank schonmal!
Liebe Grüßßßee!