def set_rgb(self, value=[], offset=0): """ Sets (doesn't write out to IC) the given value in the local DC register. Values in 0-255. """ if (offset + 3) <= self.numberof_leds: self.DCLevels[offset:offset + 3] = [self.clamp(value[i] >> 2, 0, 63) for i in range(3)] return True else: logger.warning("Whoopsie.. Cannot address over %i RGB LEDs." % self.numberof_RGBleds) return False
def fadeto(self, targetlevels=[], offset=0, steps=64, duration=0.2): """ Fades linearly to new value, writes to internal register and IC directly. Usable for any number of LEDs, no specific colour handling. Foe now no delay nor timing is implemented. """ count = len(targetlevels) if (offset + count) > self.numberof_leds: logger.warning("Whoopsie.. Cannot address over %i LEDs. Truncating input." % self.numberof_leds) count = self.numberof_leds - offset targetlevels = [self.clamp(x >> 2, 0, 63) for x in targetlevels] # scale and boundary confinement _origlevels = self.DCLevels[offset:(offset + count)] # Save original levels _deltas = [targetlevels[i] - self.DCLevels[offset + i] for i in range(count)] # Calculate deltas for i in range(steps + 1): # Do fade loop scaler = float(i)/steps self.DCLevels[offset:(offset + count)] = [int(_origlevels[i] + (_deltas[i] * scaler)) for i in range(count)] self.write_dc(self.DCLevels) sleep(duration/steps)