И снова о millis()

Доброго здоровья!
Не хочу забивать рубрику “Говнокод по пятницам”, поэтому обращаюсь сюда. Да и сегодня далеко не пятница.

Есть вот такой скетч:

const int period = 500;
bool trigger;
unsigned long moment;
void setup()
{
  pinMode(13, OUTPUT);
  digitalWrite(13, 0);
}
void loop()
{
  if (millis() - moment >= period)
  {
    moment = moment + period;
    trigger = !trigger;
    digitalWrite(13, trigger);
  }
}

Диод должен вспыхивать ПРИМЕРНО раз в секунду. Как маятник.
Всегда ли так будет, если контроллер исправен и работает от бесперебойника?

  1. Он будет не вспыхивать, а моргать.
  2. Всегда, пока уровень питания не ниже заданного фьюзами (бит BOD).

Это бомба замедленного действия.

Ф что вы скажете о строке 1?

Этот код вообще не скомпилируется, переменная trigger не объявлена :wink:

Из - за строки 1.

Строка 2

Простите. Поправил. Неудачно скопировал.

Чойта?

ее не было

1 лайк

Ничего. А должен?

Объясните, чем вас так прельшает именно int?

Да какая разница? Int, uint или еще что. В этом коде это не принципиально.

Просто он мне не поверил, что не стоит смешивать знаковые переменные с беззнаковыми ))

А зачем при каждой проверке помимо сравнения производить вычисления ???

Какие?

1 лайк

Он меня не прельщает. Вчера меня один человек убедил (он знает - о ком я говорю), что при работе с millis() int там и на фиг не тарахтел. И я с ним СОГЛАСЕН. Я учел его рекомендации!

Меня же интересует вот что. Может ли этот int быть причиной сбоев???

Строка 11

а напрасно, там должно быть uint32_t

А как еще выяснить, что время подошло?

1 лайк