99 lines
2.6 KiB
Python
99 lines
2.6 KiB
Python
try:
|
|
import RPi.GPIO as GPIO
|
|
except ImportError:
|
|
import rgbUtils.fakeGPIO as GPIO
|
|
from rgbUtils.debug import debug
|
|
class RGBStrip:
|
|
STRIP_NAME = None
|
|
|
|
issetup = False
|
|
|
|
effectClassInstance = None
|
|
|
|
# GPIO PWM Frequenz
|
|
hertz = 100
|
|
|
|
RED_PIN = None
|
|
GREEN_PIN = None
|
|
BLUE_PIN = None
|
|
|
|
RED_PWM = None
|
|
GREEN_PWM = None
|
|
BLUE_PWM = None
|
|
|
|
|
|
def __init__(self,STRIP_NAME,RED_PIN,GREEN_PIN,BLUE_PIN):
|
|
self.STRIP_NAME = STRIP_NAME
|
|
self.RED_PIN = RED_PIN
|
|
self.GREEN_PIN = GREEN_PIN
|
|
self.BLUE_PIN = BLUE_PIN
|
|
|
|
def init(self):
|
|
if not self.issetup:
|
|
debug("setting up")
|
|
# setup RED
|
|
GPIO.setup(self.RED_PIN, GPIO.OUT)
|
|
self.RED_PWM = GPIO.PWM(self.RED_PIN, self.hertz)
|
|
self.RED_PWM.start(0)
|
|
# setup GREEN
|
|
GPIO.setup(self.GREEN_PIN, GPIO.OUT)
|
|
self.GREEN_PWM = GPIO.PWM(self.GREEN_PIN, self.hertz)
|
|
self.GREEN_PWM.start(0)
|
|
# setup BLUE
|
|
GPIO.setup(self.BLUE_PIN, GPIO.OUT)
|
|
self.BLUE_PWM = GPIO.PWM(self.BLUE_PIN, self.hertz)
|
|
self.BLUE_PWM.start(0)
|
|
|
|
self.issetup = True
|
|
|
|
def RGB(self,red,green,blue,brightness = 100):
|
|
|
|
if(red < 0):
|
|
red = 0
|
|
if(red > 255):
|
|
red = 255
|
|
|
|
if(green < 0):
|
|
green = 0
|
|
if(green > 255):
|
|
green = 255
|
|
|
|
if(blue < 0):
|
|
blue = 0
|
|
if(blue > 255):
|
|
blue = 255
|
|
|
|
if(brightness < 0):
|
|
brightness = 0
|
|
if(brightness > 100):
|
|
brightness = 100
|
|
|
|
self.red = red
|
|
self.green = green
|
|
self.blue = blue
|
|
self.RED_PWM.ChangeDutyCycle(round((red/255*100)/100*brightness,2))
|
|
self.GREEN_PWM.ChangeDutyCycle(round((green/255*100)/100*brightness,2))
|
|
self.BLUE_PWM.ChangeDutyCycle(round((blue/255*100)/100*brightness,2))
|
|
|
|
def stop(self):
|
|
self.RED_PWM.ChangeDutyCycle(0)
|
|
self.GREEN_PWM.ChangeDutyCycle(0)
|
|
self.BLUE_PWM.ChangeDutyCycle(0)
|
|
self.RED_PWM.stop()
|
|
self.GREEN_PWM.stop()
|
|
self.BLUE_PWM.stop()
|
|
|
|
|
|
|
|
# I have to be sure that a rgbStip is only used by one Effect at once, so i save the current running Effect Class Object
|
|
# in the rgbStip object.
|
|
def setEffectClassInstance(self,effectClass):
|
|
debug("RGBStrip "+ self.STRIP_NAME + " Effect is now " + str(effectClass))
|
|
self.effectClassInstance = effectClass
|
|
|
|
def getEffectClassInstance(self):
|
|
return self.effectClassInstance
|
|
|
|
|
|
|