bin neu hier, also seid bitte nicht zu hart zu mir, ich lerne noch

Ich arbeite momentan im Rahmen eines Abschlussprojektes mit Hilfe eines Raspberry Pi's und Python an einer LED-Steuerung.
Teil dieser Steuerung ist unter Anderem das Regeln der Helligkeit der LEDs abhängig von der Umgebungshelligkeit.
Wenn das Programm irgendwann fertig ist, soll man die Leds aber auch manuell ansteuern können.
Sobald das Tool läuft, kann ich die Werte der RGB's eintippen und auch schalten, allerdings beim nächsten Versuch die Leds anzusteuern bekomme ich die Meldung " A PWM object already exists for this GPIO channel"
Nach mehrmaligem Betätigen lassen sich die leds dann aber wieder schalten und danach kommt erneut diese Meldung. Hat jemand eine Idee wie ich das umgehen kann?
Und könnte mir noch jemand einen Tipp geben, wie ich meinen Thread der in dem Programm läuft beenden kann?
Code: Alles auswählen
from tkinter import *
import RPi.GPIO as GPIO
import threading
import spidev
import threading
spi = spidev.SpiDev() # SPI-Bus initialisieren
spi.open(0,0) # SPI Bus 0, Client 0 öffnen
spi.max_speed_hz=1000000
import time
def readMCP3008(channel):
adc=spi.xfer2([1,(8+channel)<<4,0])
wert = ((adc[1]&3) << 8) + adc[2]
return wert
GPIO.setwarnings(False)
P_RED = 16
P_GREEN = 13
P_BLUE = 26
fPWM = 50
def sensor_ein():
my_thread = threading.Thread(target=regelung_ein)
my_thread.start()
def setup():
GPIO.setwarnings(False)
global pwmR, pwmG, pwmB
GPIO.setmode(GPIO.BCM)
GPIO.setup(P_RED, GPIO.OUT)
GPIO.setup(P_GREEN, GPIO.OUT)
GPIO.setup(P_BLUE, GPIO.OUT)
pwmR = GPIO.PWM(P_RED, fPWM)
pwmG = GPIO.PWM(P_GREEN, fPWM)
pwmB = GPIO.PWM(P_BLUE, fPWM)
pwmR.start(0)
pwmG.start(0)
pwmB.start(0)
def setColor(r, g, b):
pwmR.ChangeDutyCycle(int(r / 255 * 100))
pwmG.ChangeDutyCycle(int(g / 255 * 100))
pwmB.ChangeDutyCycle(int(b / 255 * 100))
def led_ein():
GPIO.setwarnings(False)
RHell = int(entryRHell.get())
GHell = int(entryGHell.get())
BHell = int(entryBHell.get())
r = RHell
g = GHell
b = BHell
setup()
setColor(r, g, b )
def alle_aus():
GPIO.setwarnings(False)
setup()
GPIO.output(P_RED, GPIO.LOW)
GPIO.output(P_GREEN, GPIO.LOW)
GPIO.output(P_BLUE, GPIO.LOW)
def regelung_ein():
print ("starting")
setup()
while True:
v=readMCP3008(0)
if (v >550):
r = 0
g = 0
b = 0
print (r, g, b)
setColor(r, g, b)
if (v<550 and v>525):
r = 11
g = 11
b = 11
print (r, g, b)
setColor(r, g, b)
if (v<525 and v>500):
r = 22
g = 22
b = 22
print (r, g, b)
setColor(r, g, b)
if (v<500 and v>475):
r = 33
g = 33
b = 33
print (r, g, b)
setColor(r, g, b)
if (v<475 and v>450):
r = 44
g = 44
b = 44
print (r, g, b)
setColor(r, g, b)
if (v<450 and v>425):
r = 55
g = 55
b = 55
print (r, g, b)
setColor(r, g, b)
if (v<425 and v>400):
r = 66
g = 66
b = 66
print (r, g, b)
setColor(r, g, b)
if (v<400 and v>375):
r = 77
g = 77
b = 77
print (r, g, b)
setColor(r, g, b)
if (v<175 and v>150):
r = 88
g = 88
b = 88
print (r, g, b)
setColor(r, g, b)
if (v<350 and v>325):
r = 99
g = 99
b = 99
print (r, g, b)
setColor(r, g, b)
if (v<325 and v>300):
r = 110
g = 110
b= 110
print (r, g, b)
setColor(r, g, b)
if (v<300 and v>275):
r = 121
g = 121
b = 121
print (r, g, b)
setColor(r, g, b)
if (v<275 and v>250):
r = 132
g = 132
b = 132
print (r, g, b)
setColor(r, g, b)
if (v<250 and v>225):
r = 143
g = 143
b = 143
print (r, g, b)
setColor(r, g, b)
time.sleep(1)
if (v<225 and v>200):
r = 154
g = 154
b = 154
print (r, g, b)
setColor(r, g, b)
if (v<200 and v>175):
r = 165
g = 165
b = 165
print (r, g, b)
setColor(r, g, b)
if (v<175 and v>150):
r = 176
g = 176
b = 176
print (r, g, b)
setColor(r, g, b)
if (v<150 and v>125):
r = 187
g = 187
b = 187
print (r, g, b)
setColor(r, g, b)
if (v<125 and v>100):
r = 198
g = 198
b = 198
print (r, g, b)
setColor(r, g, b)
if (v<100 and v>75):
r = 209
g = 209
b = 209
print (r, g, b)
setColor(r, g, b)
if (v<75 and v>50):
r = 220
g = 220
b = 220
print (r, g, b)
setColor(r, g, b)
if (v<50 and v>25):
r = 231
g = 231
b = 231
print (r, g, b)
setColor(r, g, b)
if (v<25 and v>0):
r = 242
g = 242
b = 242
print (r, g, b)
setColor(r, g, b)
tkFenster = Tk()
tkFenster.title('LightBox')
tkFenster.geometry('350x145')
buttonEIN = Button(master=tkFenster, bg='green', text='EIN', command=led_ein)
buttonEIN.place(x=0, y=90, width=50, height=30,)
buttonSensor = Button(master=tkFenster, text='Sensorik', command=sensor_ein)
buttonSensor.place(x=110, y=90, width=50, height=30,)
buttonAUS = Button(master=tkFenster, bg='red', text='AUS', command=alle_aus)
buttonAUS.place(x=55, y=90, width=50, height=30,)
labelROT = Label(master=tkFenster, text='ROT', fg='red', font=('Arial', 16))
labelROT.place(x=5, y=40, width=50,height=20)
labelGRUEN = Label(master=tkFenster, text='GRUEN', fg='green', font=('Arial', 16))
labelGRUEN.place(x=80, y=40, width=70,height=27)
labelBLAU = Label(master=tkFenster, text='BLAU', fg='blue', font=('Arial', 16))
labelBLAU.place(x=155, y=40, width=70,height=27)
entryRHell = Entry(master=tkFenster, bg='white')
entryRHell.place(x=5, y=65, width=70, height=20)
entryGHell = Entry(master=tkFenster, bg='white')
entryGHell.place(x=80, y=65, width=70, height=20)
entryBHell = Entry(master=tkFenster, bg='white')
entryBHell.place(x=155, y=65, width=77, height=20)
tkFenster.mainloop()