когда я делал свою
лампу настроения, то для плавного перехода между цветами использовал алгоритм Брезенхама. думал, что компактней не придумешь - в тини13 влезло. однако, оказалось, что обычные целочисленные вычисления над long-ами
тоже вмещается в тини13... в общем, алгоритм прост до безобразия, привожу в "неэкономном" варианте...
дано: U - текущий уровень канала (скважность ШИМа), u - уровень, к которому ШИМ-канал должен прийти "плавно".
решение:
1. вводим дополнительное условие: любые переходы между цветами должны делаться за N элементарных шагов.
2. вычисляем приращение уровня float delta = (u - U)/(float)N;
3. реализуем тупой цикл плавного перехода for(i=0; i<N; i++){PWM += delta; delay();}
если каналов несколько - храним соответствующие значения в массиве и в цикле планых переходов обрабатываем весь массив для всех каналов
как-то так вот...