наткнулся на простой контроллер на ардуино.
А если контроллер не выключать несколько часов? Не глючит?
Дело в том, что в коде есть "скрытая ошибка"
int currentTime,loopTime;
...
// encoder
currentTime = millis();
Из-за неё, через некоторое время, значение millis() "не уберётся" в размерность int.
int занимает 2 байта памяти, и может хранить числа от -32 768 до 32 767 (от -2^15 до 2^15-1)
В результате переменная currentTime станет отрицательной.
Ну и дальше чудеса с энкодером.
Для хранения значения millis необходимо использовать unsigned long, или uint32_t .
P.S. Это так, навскидку.. Первое, что "режет глаз".

Вообще, на мой взгляд, скетч не очень надёжен в плане защит от всевозможных "нештатных ситуаций"..