И снова о millis()

Торжественно клянусь, что это - последний мой вопрос в этой теме. Но комментарии продолжу отслеживать (если они будут).

static uint32_t period13 = 500;
static uint32_t moment13;

int st;
int st2;
bool trigger;

void setup()
{
  pinMode(13, OUTPUT);
  digitalWrite(13, 0);
  Serial.begin(9600);
}
void loop()
{
  if (millis() - moment13 >= period13)
  {
    moment13 = moment13+period13;
    trigger = !trigger;
    digitalWrite(13, trigger);
    if (trigger)
    {
      st2++;
      Serial.println(st2);
      st++;
    }
  }
  if (st==10)
  {
    delay(3000);
    st=0;
  }
}

Итак. Каждые 10 секунд в строке 30 происходит задержка на 3 секунды. А затем идет нагон упущенного времени.
Точность работы millis() меня вполне устраивает.
У кого есть возможность - посмотрите вывод переменной st2 в мониторе.
Мне нужна именно такая работа.

Что не так в строке 18, если сам ЕвгенийП здесь благославил меня на это?

Там же в #14.

Все. Здесь вопросов больше не задаю!