Понимание millis () в digitalWrite () - PullRequest
0 голосов
/ 24 сентября 2018

Я занимался программированием на Arduino намного больше, особенно возвращаясь к тому, что я делал раньше, и избавлялся от delay(), где мог.Я наткнулся на интересный пост , имеющий следующий код для "мигания" светодиода:

digitalWrite(strobe1, (millis() % 1000L) < 500L);

Я читаю математику как (текущие миллисекунды по модулю 1000) <500 </em> и эта математика, кажется, "мигает" светодиодом.То, что я не совсем понимаю, это почему ?Математика, похоже, не является тестом ( результат мода меньше, чем 500 ), но устанавливает пин HIGH для всего, что здесь рассчитывается.

Я искалИнтернет, чтобы попытаться понять, что здесь происходит, но не может найти ничего явного.Может кто-нибудь объяснить?

1 Ответ

0 голосов
/ 24 сентября 2018

Я читаю математику как (текущие миллисекунды по модулю 1000) <500 </p>

Это правильно.

Что я не совсем понимаю, почему?Кажется, математика не является проверкой

Я не совсем понимаю ваше утверждение.(millis() % 1000L) < 500L - это тест, он проверяет, является ли millis() % 1000L меньше 500 или нет, и дает либо true, что эквивалентно 1, либо false, что эквивалентно 0.

Итак, за полсекунды условие ложно -> 0 записывается, а за другую половину секунды это правда, 1 записывается.

Iдумаю, я привык видеть тест более явным, например if ((millis ()% 1000L) <500).Значит, это троичная функция? </p>

Нет, совсем не троичная, и не if.Вам необходимо понять, что такое логическое / логическое выражение и к чему приводит. Давайте разберем его немного:

 bool result = (millis() % 1000L) < 500L;

Должно быть понятно, что делает эта строка: она проверяет, является ли результат millis() % 1000Lменьше 500 и сохраняет полученное логическое значение в result.Логическое значение - не что иное, как истина или ложь.Ценность.Значение типа 1, 34561 или "hello world".Конечно, вы можете использовать значение в качестве условия в if выражении, например:

if(result) { /* some code */ } else { /* more code */ }

Но вам это не нужно.Поскольку его просто значение, где true такое же, как 1, а false такое же, как 0, вы можете передать это логическое значение, которое неявно затухает до соответствующего целого числа (оно всегдабыло целое число для начала) функции, которая ожидает HIGH (1) или LOW (0).Вы могли бы также думать о функции digitalWrite, как если бы она взяла bool вместо логического 1 или 0, результат был бы таким же.

...