Теперь будем управлять яркостью сразу трех цветов, чтобы получить различные их сочетания. Но если мы будем управлять тремя цветами одновременно, то получим лишь пульсирующий белый цвет. Ведь все три составляющие вместе дают белый, интенсивностью которого мы управляем. Как же получить плавно переливающиеся цвета? Будем управлять каждым цветом по функции синуса, но с разными периодами.
Рисунок 1. Графики яркости светодиодов в зависимости от времени
Из рисунка видно, что периоды изменения цветов разные, благодаря этому на каждом шаге мы получаем разную яркость для каждого цвета и, соответственно, разный результирующий цвет. Вертикальными пунктирными линиями показаны условные шаги.
Оставим собранной без изменений схему из прошлого эксперимента
Рисунок 2. Электрическая принципиальная схема эксперимента
Токоограничительные резисторы в схеме обязательны!
from machine import Pin, PWM import time import math _init() LedPinB = 15 LedPinG = 14 LedPinR = 13 ledB = Pin(LedPinB, Pin.OUT) ledG = Pin(LedPinG, Pin.OUT) ledR = Pin(LedPinR, Pin.OUT) pwmB = PWM(ledB) pwmG = PWM(ledG) pwmR = PWM(ledR) pwmB.freq(500) pwmG.freq(500) pwmR.freq(500) while True: for i in range(100): pwmB.duty(int(math.sin(i / 50 * math.pi) * 500 + 500)) pwmG.duty(int(math.sin(i / 75 * math.pi) * 500 + 500)) pwmR.duty(int(math.sin(i / 25 * math.pi) * 500 + 500)) time.sleep_ms(30)
Разные периоды мы получаем благодаря использованию разных делителей в формуле.