Понадобилась подсветка на RGB ленте просмотрев готовые варианты ламп настроения и т п не очень устроило пришлось написать свой код Огромная благодарность пользователю Daniil За помощь в освоении структур сообразил интересный нестандартный вариант. Решил поделиться может кому еще понадобится. Сам код Код (C++): #define pin1 9 // red #define pin2 10//green #define pin3 11//blue int regim = 0; int Speed = 100; byte fsp = 0; struct timer_t { // uint16_t period_ms; uint32_t last_time; }; struct pin_t { uint8_t Name; // номер пина timer_t PWM; uint32_t count; }; const uint8_t kol_Pins = 3; // количество пинов pin_t pins[kol_Pins]; void init_mas() { pins[0].Name = pin1; pins[0].PWM.last_time = 0; pins[0].count = 255; pins[1].Name = pin2; pins[1].PWM.last_time = 0; pins[1].count = 255; pins[2].Name = pin3; pins[2].PWM.last_time = 0; pins[2].count = 255; } void setup() { init_mas(); for (uint8_t i = 0; i < kol_Pins; i++) { pinMode(pins[i].Name, OUTPUT); digitalWrite(pins[i].Name, HIGH); } // Пины D3 и D11 - 4 кГц TCCR2B = 0b00000010; TCCR2A = 0b00000001; // Пины D9 и D10 - 4 кГц TCCR1A = 0b00000001; TCCR1B = 0b00000010; } void loop() { for (uint8_t num = 0; num < kol_Pins; num++) { if (millis() - pins[num].PWM.last_time > Speed) { pins[num].PWM.last_time = millis(); switch (regim) { case 0: //зажигаем красный if (pins[0].count != 0) { pins[0].count--; } else { regim = 1; } break; case 1: //зажигаем зеленый if (pins[1].count != 0) { pins[1].count--; } else { regim = 2; } break; case 2: //гасим красный if (pins[0].count < 255) { pins[0].count++; } else { regim = 3; } break; case 3: // зажигаем синий if (pins[2].count != 0) { pins[2].count--; } else { regim = 4; } break; case 4: // гасим зеленый if (pins[1].count < 255) { pins[1].count++; } else { regim = 5; } break; case 5://зажигаем красный if (pins[0].count != 0) { pins[0].count--; } else { regim = 6; } break; case 6://зажигаем зеленый if (pins[1].count != 0) { pins[1].count--; } else { regim = 7; } break; case 7://гасим синий и зеленый if ((pins[2].count < 255) && (pins[1].count < 255)) { pins[2].count++; pins[1].count++; } else { if ((Speed < 1000) && (fsp == 0)) { Speed ++; } if (Speed == 1000) { fsp = 1; } if ((fsp == 1) && (Speed > 100)) { Speed --; } if (Speed == 100) { fsp = 0; } regim = 0; } break; } } analogWrite(pins[num].Name, pins[num].count); } }