@@ -143,23 +143,39 @@ def is_pressed(self):
143143
144144class RGBLED :
145145 def __init__ (self , r , g , b , invert = True ):
146- self .invert = invert
147- self .led_r = PWM (Pin (r ))
148- self .led_r .freq (1000 )
149- self .led_g = PWM (Pin (g ))
150- self .led_g .freq (1000 )
151- self .led_b = PWM (Pin (b ))
152- self .led_b .freq (1000 )
146+ self .led_r = PWM (Pin (r ), freq = 1000 , duty_u16 = 0 , invert = invert )
147+ self .led_g = PWM (Pin (g ), freq = 1000 , duty_u16 = 0 , invert = invert )
148+ self .led_b = PWM (Pin (b ), freq = 1000 , duty_u16 = 0 , invert = invert )
153149
154150 def set_rgb (self , r , g , b ):
155- if self .invert :
156- r = 255 - r
157- g = 255 - g
158- b = 255 - b
159151 self .led_r .duty_u16 (int ((r * 65535 ) / 255 ))
160152 self .led_g .duty_u16 (int ((g * 65535 ) / 255 ))
161153 self .led_b .duty_u16 (int ((b * 65535 ) / 255 ))
162154
155+ def set_hsv (self , h , s , v ):
156+ if s == 0.0 :
157+ v = int (v * 255 )
158+ self .set_rgb (v , v , v )
159+ else :
160+ i = int (h * 6.0 )
161+ f = (h * 6.0 ) - i
162+ p , q , t = v * (1.0 - s ), v * (1.0 - s * f ), v * (1.0 - s * (1.0 - f ))
163+ v , t , p , q = int (v * 255 ), int (t * 255 ), int (p * 255 ), int (q * 255 )
164+
165+ i = i % 6
166+ if i == 0 :
167+ self .set_rgb (v , t , p )
168+ elif i == 1 :
169+ self .set_rgb (q , v , p )
170+ elif i == 2 :
171+ self .set_rgb (p , v , t )
172+ elif i == 3 :
173+ self .set_rgb (p , q , v )
174+ elif i == 4 :
175+ self .set_rgb (t , p , v )
176+ elif i == 5 :
177+ self .set_rgb (v , p , q )
178+
163179
164180# A simple class for handling Proportional, Integral & Derivative (PID) control calculations
165181class PID :
0 commit comments