Заработал диммер, только одно но - не регулирует яркость. Если только в скетче менять значение Dimmer[i - startDimPin] = 90; //выставим яркость соответствующего диммера в 0 а само не меняется
PHP код:
#include <TimerOne.h>
//#include <CyberLib.h>
volatile uint8_t tic ;
uint8_t data;
int startDimPin 3//первый диммер
int endDimPin 12//последний диммер
int Dimmer[9]; //количество диммеров минус 1

void setup() {


  
//*********************Настраиваем порты на выход**********************

  
for ( int i startDimPin<= endDimPini++) //пройдемся циклом по портам
  
{
    
pinMode (iOUTPUT);
    
digitalWrite(iLOW); // гасим оответствующий пин

    
Dimmer[startDimPin] = 10//выставим яркость соответствующего диммера в 0
  
}
  
//CHANGE – прерывание вызывается при любом изменении значения на входе;
  //RISING – вызов прерывания при изменении уровня напряжения с низкого (Low) на высокий(HIGH)
  //FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкий (Low)
  
attachInterrupt(0detect_upLOW);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
  
Timer1.initialize(40);              // Интервал срабатывания таймера в мкс
  
Timer1.attachInterrupt(halfcycle);   //будет вызыватся каждый раз при отсчете заданого времени
  
Timer1.stop();
  
Serial.begin(115200); //инициализация порта
  
randomSeed(analogRead(0)); //псевдогенератор случайных чисел будет использовать шумы на аналог пин 0
}

//********************обработчики прерываний*******************************
void halfcycle()  //прерывания таймера
{
  
tic--;  //счетчик
  
for ( int i startDimPin<= endDimPini++)
  {
    if (
Dimmer[startDimPin] > tic )
      
digitalWrite(iHIGH); //управляем выходом (откроем семистор)
  
}
}

void  detect_up()  // обработка внешнего прерывания. Сработает по переднему фронту
{
  
tic 200;           //обнулить счетчик
  
Timer1.resume();   //запустить таймер
  
attachInterrupt(0detect_downHIGH);  //перепрограммировать прерывание на другой обработчик
}

void  detect_down()  // обработка внешнего прерывания. Сработает по заднему фронту
{
  
Timer1.stop(); //остановить таймер
  
for ( int i startDimPin<= endDimPini++)
  {

    
digitalWrite(iLOW);
  }
  
tic 200;     //обнулить счетчик
  
attachInterrupt(0detect_upLOW); //перепрограммировать прерывание на другой обработчик

}

void loop() {
  {

//********помигаем первым диммером рандомно********
    
Dimmer[0] = random(10200);
    
//Задержка для более плавного эффекта мерцания
    
delay(100);

  }