# SPDX-License-Identifier: MIT # # Little christmas candle # # Author: Nils Freydank # Year: 2022 # Copyright: MIT import machine import time pin_led1 = machine.Pin(22) pin_led2 = machine.Pin(10) pin_led3 = machine.Pin(8) def _get_new_duty( factor: int, signed_step_width: int, limit_lower: int, limit_upper: int ) -> Tuple[int, int]: duty_fac: int = factor duty_fac += signed_step_width if duty_fac > limit_upper: duty_fac = limit_upper signed_step_width = (-1) * signed_step_width elif duty_fac < limit_lower: duty_fac = limit_lower signed_step_width = (-1) * signed_step_width return duty_fac, signed_step_width def flicker() -> None: pwm_led1 = machine.PWM(pin_led1) pwm_led2 = machine.PWM(pin_led2) pwm_led3 = machine.PWM(pin_led3) pwm_led1.freq(1_000) pwm_led2.freq(1_000) pwm_led3.freq(1_000) duty_fac_led1: int = 0 signed_step_width_led1: int = 1 duty_fac_led2: int = 0 signed_step_width_led2: int = 1 duty_fac_led3: int = 0 signed_step_width_led3: int = 1 delay_s: float = 0.01 while True: duty_fac_led1, signed_step_width_led1 = _get_new_duty( duty_fac_led1, signed_step_width_led1, 240, 250 ) pwm_led1.duty_u16(duty_fac_led1**2) duty_fac_led2, signed_step_width_led2 = _get_new_duty( duty_fac_led2, signed_step_width_led2, 0, 200 ) pwm_led2.duty_u16(duty_fac_led2**2) duty_fac_led3, signed_step_width_led3 = _get_new_duty( duty_fac_led3, signed_step_width_led3, 30, 100 ) pwm_led2.duty_u16(duty_fac_led3**2) time.sleep(delay_s) # vim:fileencoding=utf-8:ts=4:syntax=python:expandtab