class PWMLight(DimmableLight):
    def __init__(self, server, pin, freq=1000):
        super().__init__(server, 'light-' + str(uid), \
                         self.get_state, self.set_state, \
                         self.get_level, self.set_level)
        if pin in pwm_pins:
            self.dimmable = True
            self._pin = PWM(GPIO(pin), freq=freq, duty=0)
        else:
            self.dimmable = False

    def get_state(self):
        return self._pin.value(), 0

    def set_state(self, state):
        if state == 'on' or state == '1' or state == 'True':
            self._pin.on()
            return True, 0
        else:
            self._pin.off()
            return False, 0

    def get_level(self):
        return self._pin.duty(), 0

    def set_level(self, level):
        #convert brightness from percent (0 - 100) to duty (0 - 1023)
        duty = round(1023 * (int(brightness)/100))
        self._pin.duty(duty)
        return level, 0
示例#2
0
class Led(object):
    PWM_FREQ = 500
    PWM_DUTY_MAX = 1023
    PWM_DUTY_MIN = 0

    def __init__(self, pin_nr, pwm=False):
        self.Pwm = pwm
        self.IsOn = False
        self.Pin = Pin(pin_nr, Pin.OUT)

        if pwm is True:
            self.Pin = PWM(self.Pin, freq=self.PWM_FREQ, duty=0)
        else:
            self.Off()

    def PwmFreq(self):
        return self.PWM_FREQ

    def PwmDutyMax(self):
        return self.PWM_DUTY_MAX

    def PwmDutyMin(self):
        return self.PWM_DUTY_MIN

    def On(self):
        if self.Pwm is True:
            self.Pin.duty(self.PWM_DUTY_MAX)
        else:
            self.Pin.on()

        self.IsOn = True

    def Off(self):
        if self.Pwm is True:
            self.Pin.duty(0)
        else:
            self.Pin.off()

        self.IsOn = False

    def Toggle(self):
        if self.IsOn is False:
            self.On()
            self.IsOn = True
        else:
            self.Off()
            self.IsOn = False

    def State(self):
        if self.IsOn is True:
            return 1
        else:
            return 0

    # Get or set the LED intensity.
    def Intensity(self, value=None):
        # Check if the LED is configured in PWM mode.
        if self.Pwm is True:
            # If a value argument is passed set the duty
            # cycle.
            if value is not None:
                if value > self.PWM_DUTY_MAX:
                    value = self.PWM_DUTY_MAX
                elif value < self.PWM_DUTY_MIN:
                    value = self.PWM_DUTY_MIN
                self.Pin.duty(value)
            # If no value is passed get the duty cycle.
            else:
                return self.Pin.duty()
        else:
            return -1