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

Тупо заменить 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() выполнять отдельно от блока проверки команд.