from time import sleep
from machine import Pin, PWM
from random import getrandbits
# function to calcaute duty cycle in percentage from 16 bit integer
def duty16toPercent(duty16):
return 100 * duty16 / (2**16-1)
# create array of pin numbers for RGB LED
pins = [9, 8, 7]
# Create array of PWM pins with freq of 50Hz and duty of 50%
leds = [
PWM(Pin(pins[0]), freq=50, duty_u16=(2**16) // 2),
PWM(Pin(pins[1]), freq=50, duty_u16=(2**16) // 2),
PWM(Pin(pins[2]), freq=50, duty_u16=(2**16) // 2)
]
# create array of duty cycle in percent
duty = [
duty16toPercent(leds[0].duty_u16()),
duty16toPercent(leds[1].duty_u16()),
duty16toPercent(leds[2].duty_u16())
]
print(f"Red duty: {duty[0]:.1f}%, Green duty: {duty[1]:.1f}%, Blue duty: {duty[2]:.1f}%")
sleep(0.1) # Wait for USB to become ready
# loop for random colours
while True:
try:
for led in range(3):
# get a new random 16 bit number for duty cycle
leds[led].duty_u16(getrandbits(16))
duty[led] = duty16toPercent(leds[led].duty_u16())
print(f"Red duty: {duty[0]:.1f}%, Green duty: {duty[1]:.1f}%, Blue duty: {duty[2]:.1f}%")
sleep(2)
except KeyboardInterrupt:
break
# disable PWM output and turn off LEDs
for led in range(3):
leds[led].deinit()
leds[led] = Pin(pins[led], Pin.OUT, value=0)
print("Finished.")