Skip to content

Commit

Permalink
Move PWMLED and RGBLED out of pimoroni.py
Browse files Browse the repository at this point in the history
  • Loading branch information
ZodiusInfuser committed Jul 29, 2024
1 parent 68c021f commit 5ce8cd1
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 65 deletions.
63 changes: 0 additions & 63 deletions boards/PIMORONI_TINYFX/frozen_libs/pimoroni.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,47 +142,6 @@ def is_pressed(self):
return self.raw()


class RGBLED:
def __init__(self, r, g, b, invert=True, gamma=1):
self._gamma = gamma
self.led_r = PWM(Pin(r), freq=1000, duty_u16=0, invert=invert)
self.led_g = PWM(Pin(g), freq=1000, duty_u16=0, invert=invert)
self.led_b = PWM(Pin(b), freq=1000, duty_u16=0, invert=invert)

def _rgb(self, r, g, b):
self.led_r.duty_u16(int(pow(r, self._gamma) * 65535 + 0.5))
self.led_g.duty_u16(int(pow(g, self._gamma) * 65535 + 0.5))
self.led_b.duty_u16(int(pow(b, self._gamma) * 65535 + 0.5))

def set_rgb(self, r, g, b):
r = min(255, max(0, r))
g = min(255, max(0, g))
b = min(255, max(0, b))
self._rgb(r / 255, g / 255, b / 255)

def set_hsv(self, h, s, v):
if s == 0.0:
self._rgb(v, v, v)
else:
i = int(h * 6.0)
f = (h * 6.0) - i
p, q, t = v * (1.0 - s), v * (1.0 - s * f), v * (1.0 - s * (1.0 - f))

i = i % 6
if i == 0:
self._rgb(v, t, p)
elif i == 1:
self._rgb(q, v, p)
elif i == 2:
self._rgb(p, v, t)
elif i == 3:
self._rgb(p, q, v)
elif i == 4:
self._rgb(t, p, v)
elif i == 5:
self._rgb(v, p, q)


# A simple class for handling Proportional, Integral & Derivative (PID) control calculations
class PID:
def __init__(self, kp, ki, kd, sample_rate):
Expand Down Expand Up @@ -246,25 +205,3 @@ def read(self):

def is_set(self, mask):
return self.read() & mask == mask


# A basic wrapper for PWM with regular on/off and toggle functions from Pin
# Intended to be used for driving LEDs with brightness control & compatibility with Pin
class PWMLED:
def __init__(self, pin, invert=False, gamma=1):
self._gamma = gamma
self._led = PWM(Pin(pin), freq=1000, duty_u16=0, invert=invert)

def brightness(self, brightness):
brightness = min(1.0, max(0.0, brightness))
self._brightness = brightness
self._led.duty_u16(int(pow(brightness, self._gamma) * 65535 + 0.5))

def on(self):
self.brightness(1)

def off(self):
self.brightness(0)

def toggle(self):
self.brightness(1 - self._brightness)
2 changes: 1 addition & 1 deletion examples/tiny_fx/lib/tiny_fx.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
# SPDX-License-Identifier: MIT

from machine import ADC, Pin
from pimoroni import PWMLED, RGBLED
from pimoroni_i2c import PimoroniI2C
from picofx import PWMLED, RGBLED


class TinyFX:
Expand Down
65 changes: 64 additions & 1 deletion picofx/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,70 @@
#
# SPDX-License-Identifier: MIT

from machine import Timer
from machine import Pin, PWM, Timer


# A basic wrapper for PWM with regular on/off and toggle functions from Pin
# Intended to be used for driving LEDs with brightness control & compatibility with Pin
class PWMLED:
def __init__(self, pin, invert=False, gamma=1):
self._gamma = gamma
self._led = PWM(Pin(pin), freq=1000, duty_u16=0, invert=invert)

def brightness(self, brightness):
brightness = min(1.0, max(0.0, brightness))
self._brightness = brightness
self._led.duty_u16(int(pow(brightness, self._gamma) * 65535 + 0.5))

def on(self):
self.brightness(1)

def off(self):
self.brightness(0)

def toggle(self):
self.brightness(1 - self._brightness)


class RGBLED:
def __init__(self, r, g, b, invert=True, gamma=1):
self._gamma = gamma
self.led_r = PWM(Pin(r), freq=1000, duty_u16=0, invert=invert)
self.led_g = PWM(Pin(g), freq=1000, duty_u16=0, invert=invert)
self.led_b = PWM(Pin(b), freq=1000, duty_u16=0, invert=invert)

def _rgb(self, r, g, b):
self.led_r.duty_u16(int(pow(r, self._gamma) * 65535 + 0.5))
self.led_g.duty_u16(int(pow(g, self._gamma) * 65535 + 0.5))
self.led_b.duty_u16(int(pow(b, self._gamma) * 65535 + 0.5))

def set_rgb(self, r, g, b):
r = min(255, max(0, r))
g = min(255, max(0, g))
b = min(255, max(0, b))
self._rgb(r / 255, g / 255, b / 255)

def set_hsv(self, h, s, v):
if s == 0.0:
self._rgb(v, v, v)
else:
i = int(h * 6.0)
f = (h * 6.0) - i
p, q, t = v * (1.0 - s), v * (1.0 - s * f), v * (1.0 - s * (1.0 - f))

i = i % 6
if i == 0:
self._rgb(v, t, p)
elif i == 1:
self._rgb(q, v, p)
elif i == 2:
self._rgb(p, v, t)
elif i == 3:
self._rgb(p, q, v)
elif i == 4:
self._rgb(t, p, v)
elif i == 5:
self._rgb(v, p, q)


class Updatable:
Expand Down

0 comments on commit 5ce8cd1

Please sign in to comment.