Замена delay() с помощью millis()

В коде нужно, чтобы после определенного промежутка времени выполнялась функция stop_micro(). delay() мне не подходит, т.к. надо выполнять и другие команды в этот промежуток времени. Сделал задержку с помощью millis() по гайду, но не работает. После определенного промежутка времени просто не выполняется функция

if (command=='w') {
  Serial.println(timing);
  up();  
  if (millis() - timing > 5000) {
    stop_micro();
    timing = millis();
}}
else if (command=='W'){
  Serial.println(timing);
  up();
  if (millis() - timing > 5000) {
    stop_micro();
    timing = millis();
}}
else if (command=='u'){
  Serial.println(timing);
  down();
  if (millis() - timing > 5000) {
    stop_micro();
    timing = millis();
}}
else if (command=='U'){
  Serial.println(timing);
  down();
  if (millis() - timing > 5000) {
    stop_micro();
    timing = millis();
}}

Как сделать, чтобы через 5000 мс выполнения функций (down/up) выполнялась функция stop_micro()?

Выложите целиковый код, по огрызку сложно что то советовать.

это жеж полная хрень

изменил

Тупо заменить delay() на таймер на миллисе не выйдет, т.к. они работают на разных принципах. Если делать именно тупо, то можно сделать примерно так. Рядом с переменной timing объявите еще одну

bool stop_micro_flag = false;

А дальше код нужно изменить так

  if (command == 'w')
  {
    Serial.println(timing);
    // поднять флаг и запустить таймер
    timing = millis();
    stop_micro_flag = true;
    up();
  }
  else if (command == 'W')
  {
    Serial.println(timing);
    // поднять флаг и запустить таймер
    timing = millis();
    stop_micro_flag = true;
    up();
  }
  else if (command == 'u')
  {
    Serial.println(timing);
    // поднять флаг и запустить таймер
    timing = millis();
    stop_micro_flag = true;
    down();
  }
  else if (command == 'U')
  {
    Serial.println(timing);
    // поднять флаг и запустить таймер
    timing = millis();
    stop_micro_flag = true;
    down();
  }
  // если флаг поднят и время вышло, запустить stop_micro()
  if (stop_micro_flag && ((millis() - timing > 5000)))
  {
    stop_micro_flag = false;
    stop_micro();
  }

Т.е. старт таймера с одновременным подъемом флага делать при получении команды, а проверку на запуск stop_micro() выполнять отдельно от блока проверки команд.

И ознакомьтесь с этим, если вам нужно организовать параллельное выполнение задач