Не работает таймер на основе millis(), где ошибка?
1. unsigned long last_time = 0;
2.   if (millis() - last_time >= 1000) 

Получается число мс (минус 0) >= 1000 всегда

Полагаю, вы хотите где-то вписывать, что last_time = millis()
В примерах к Arduino IDE есть BlinkWithoutDelay.ino. Один в один Ваша задача. Сравните и сразу увидите, где и что пропустили.