Я читаю математику как (текущие миллисекунды по модулю 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
, результат был бы таким же.