Besseren Code schreiben
Verfasst: Sonntag 2. Juli 2017, 17:39
Was Python angeht beschäftige ich mich jetzt schon länger aber bis jetzt habe ich noch nicht wie praktisches Programmiert was Schaltungen angeht also hab ich ein Python Programm geschrieben was Daten eines Controllers welcher über Bluetooth verbunden ist auf vier PWM Kanälen ausgeben soll damit das auch alles Zeitgleich geht brauchte ich vier Threads nur was Threads angeht habe ich leider gar keine Ahnung.
Mein Code wird von einer anderen Datei aufgerufen mit einer Liste von 20 int von den ich nur 4 brauche. Der aufrufe sieht ungefähr so aus:
ausgeben(Liste)
Hier ist die PWM.py Datei:
Der Code ist echt nicht schön wegen global und so aber ich hab absolut keine Idee wie man die Daten sonst an die Threads übergibt. Kann man es vlt auch ohne Threads schaffen weil die PWM Instanz läuft ja weiter nur weiß ich nicht wie das ist, weil besteht die Instanz wirklich weiter weil die ausgeben() Funktion wird ja nur aufgerufen und wenn man damit fertig ist springt man ja im Programmlauf weiter, also ausgeben() wird wieder geschlossen und somit auch die Instanzen???(Wobei die Counter variable trotz schließen der Funktion nach dem ersten aufruf auf 0 bleibt) und dann wird ausgeben() erst wieder aufgerufen. Ich muss noch dazu sagen da der Controller dauerhaft Daten sendet werden diese Daten aus den Datenpaketen in die Liste eingesteckt und an die ausgebe() Funktion weitergeben durch immer wieder aufrufen.
Also zusammengefasst wie ist das mit der Lebensdauer von Instanzen und Variabeln bei einer Funktion die immer wieder neu aufgerufen wird und nicht dauerhaft läuft???
Und wie kann ich diesen Code deutliche besser und übersichtlich schreiben kenne mich nicht wirklich mit Threads und so größern 'Projekten' mit mehreren Dateien aus.
Mein Code wird von einer anderen Datei aufgerufen mit einer Liste von 20 int von den ich nur 4 brauche. Der aufrufe sieht ungefähr so aus:
ausgeben(Liste)
Hier ist die PWM.py Datei:
Code: Alles auswählen
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import threading
use_GPIO_Pins = [2,3,4,14] #for GPIO(BCM)
counter = 1
Hertz = 750
data = [124, 128, 129, 128]
def ausgeben(da):
global data
data = da[0:4]
global counter
if counter:
main()
counter = 0
def PWM(dataindex, pin, Hertz):
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
p = GPIO.PWM(pin, Hertz)
p.start(0)
while True:
p.ChangeDutyCycle(round(data[dataindex]/255*100, 1))
def main():
GPIO.setwarnings(True)
GPIO.cleanup()
threading.Thread(target=PWM, args=(0,2,Hertz)).start()
threading.Thread(target=PWM, args=(1,3,Hertz)).start()
threading.Thread(target=PWM, args=(2,4,Hertz)).start()
threading.Thread(target=PWM, args=(3,14,Hertz)).start()
Also zusammengefasst wie ist das mit der Lebensdauer von Instanzen und Variabeln bei einer Funktion die immer wieder neu aufgerufen wird und nicht dauerhaft läuft???
Und wie kann ich diesen Code deutliche besser und übersichtlich schreiben kenne mich nicht wirklich mit Threads und so größern 'Projekten' mit mehreren Dateien aus.