Ну... раз уж пошли бросаться кусками кода, то внесу парочку вредных идеек.
(Да, вот такой я вредный)
Определяем переменные состояния выводов ардуинки что-то типа тагого
// Переменные текущего состояния выводов Arduino
byte pinCoolingState;
byte pinLed1State;
//byte pinLed2State;
//byte pinLed3State;
//byte pinLed4State;
//byte pinLed5State;
//byte pinLed6State;
byte pinAirState;
byte pinCOState;
byte pinLight1State;
byte pinLight2State;
byte pinFilterState;
byte pinHeaterState;
byte pinPowerOnState;
byte pinDispLedState;
//byte pinUdoMacroState;
//byte pinUdoMicroState;
//byte pinUdoFeState;
Затем во всех местах проги, где встречается код типа
analogWrite(LED_LIGHT_PIN, displLedLight);
или
digitalWrite(EXT_HEATER_PIN, HIGH);
пишем:
pinDispLedState = displLedLight;
pinHeaterState = HIGH
Т.е. физически в ножки ардуинки ничего не пишем. Только задаем виртуально их текущее состояние. И только в конце Loop() вызываем функцию записи что-то вроде:
void SetPinState(void)
{ //Устанавливает выходы Arduino в заданное состояние
analogWrite(EXT_COOLING_PIN, pinCoolingState); //Вентилятор
analogWrite(LED_LIGHT_PIN, pinDispLedState); //Подсветка дисплея
analogWrite(EXT_LIGHT_LED1_PIN, pinLed1State); //Светодиодная подсветка
//analogWrite(EXT_LIGHT_LED2_PIN, pinLed1State);
//analogWrite(EXT_LIGHT_LED3_PIN, pinLed1State);
//analogWrite(EXT_LIGHT_LED4_PIN, pinLed1State);
//analogWrite(EXT_LIGHT_LED5_PIN, pinLed1State);
//analogWrite(EXT_LIGHT_LED6_PIN, pinLed1State);
digitalWriteFast(EXT_AIR_PIN, pinAirState);
digitalWriteFast(EXT_CO2_PIN, pinCOState);
digitalWriteFast(EXT_LIGHT_1_PIN, pinLight1State); //Светильник 1
digitalWriteFast(EXT_LIGHT_2_PIN, pinLight2State); //Светильник 2
digitalWriteFast(EXT_FILTER_PIN, pinFilterState); //Фильтр
digitalWriteFast(EXT_HEATER_PIN,); //Нагреватель
digitalWriteFast(EXT_POWER_ON_PIN,);
//digitalWriteFast(EXT_UDO_MACRO_PIN, pinUdoMacroState);
//digitalWriteFast(EXT_UDO_MICRO_PIN, pinUdoMicroState);
//digitalWriteFast(EXT_UDO_Fe_PIN, pinUdoFeState);
}
Таким образом, последовательно читая таймера мы не сталкиваемся с микросекундными бросками напряжения на выходах, когда один таймер включает нагрузку, а следом за ним другой таймер (или возможная подпрограмма обработки аварийных ситуаций) тут-же выключает ее. На выходе мы получаем уже четко сформированное состояние ВСЕХ ножек ардуинки.
Ну и плюс еще один Бонус - широкие возможности для эспериментов. Программа может обсчитывать кучу всяких выходов-нагрузок. Даже тех, которых на самом деле нет

например с десяток каналов ледов для которых и выводов не хватит

И только на последнем этапе вывести на конкретные ножки ардуинки или ипользовать регистры, расширители, а то и просто проигнорировать их не изменяя основной код программы или как вариант залить в "более ногастую" ардуину.