了解 digitalWrite() 中的 millis()
Understanding millis() in digitalWrite()
我一直在做更多的 Arduino 编程,尤其是回到我以前做过的事情并尽可能地摆脱 delay()
。我 ran across an interesting post 对 "flash" 一个 LED 使用以下代码:
digitalWrite(strobe1, (millis() % 1000L) < 500L);
我读到的数学是 (当前毫秒 modulo 1000)< 500 并且这个数学似乎是 "flash" LED。我不太明白的是为什么?数学似乎不是测试( mod 的结果小于 500),但确实为此处计算的任何内容设置了引脚 HIGH
。
我一直在网上搜索以尝试了解这里发生的事情,但找不到任何明确的内容。有人可以解释一下吗?
I read the math as (current milliseconds modulo 1000) < 500
没错。
What I don't quite understand is why? The math doesn't seem to be a test
我不太明白你的说法。 (millis() % 1000L) < 500L
是一个测试,它测试 millis() % 1000L
是否小于 500
,结果是 true
,相当于 1
或 false
,相当于0
.
所以,半秒,条件为假 -> 0
被写入,另一半秒为真,1
被写入。
I guess I am used to seeing the test being more explicit, like if((millis() % 1000L) < 500). So this is a ternary function?
不,根本不是三元组,也不是 if。您需要了解什么是 logical/boolean 表达式及其结果。让我们稍微分解一下:
bool result = (millis() % 1000L) < 500L;
这一行的作用应该很清楚:它检查millis() % 1000L
的结果是否小于500,并将结果布尔值存储在result
中。布尔值无非是 true 或 false。一个值。像 1
、34561
或 "hello world"
这样的值。当然,您 可以 使用该值作为 if
语句中的条件,如下所示:
if(result) { /* some code */ } else { /* more code */ }
但你不需要。因为它的只是一个值,其中true
与1
相同,false
与0
相同,可以通过这个布尔值隐式衰减到相应的整数(它总是以整数开头)到一个期望高(1
)或低(0
)的函数。您还可以将 digitalWrite
函数视为接受 bool
而不是逻辑 1
或 0
,结果是相同的。
我一直在做更多的 Arduino 编程,尤其是回到我以前做过的事情并尽可能地摆脱 delay()
。我 ran across an interesting post 对 "flash" 一个 LED 使用以下代码:
digitalWrite(strobe1, (millis() % 1000L) < 500L);
我读到的数学是 (当前毫秒 modulo 1000)< 500 并且这个数学似乎是 "flash" LED。我不太明白的是为什么?数学似乎不是测试( mod 的结果小于 500),但确实为此处计算的任何内容设置了引脚 HIGH
。
我一直在网上搜索以尝试了解这里发生的事情,但找不到任何明确的内容。有人可以解释一下吗?
I read the math as (current milliseconds modulo 1000) < 500
没错。
What I don't quite understand is why? The math doesn't seem to be a test
我不太明白你的说法。 (millis() % 1000L) < 500L
是一个测试,它测试 millis() % 1000L
是否小于 500
,结果是 true
,相当于 1
或 false
,相当于0
.
所以,半秒,条件为假 -> 0
被写入,另一半秒为真,1
被写入。
I guess I am used to seeing the test being more explicit, like if((millis() % 1000L) < 500). So this is a ternary function?
不,根本不是三元组,也不是 if。您需要了解什么是 logical/boolean 表达式及其结果。让我们稍微分解一下:
bool result = (millis() % 1000L) < 500L;
这一行的作用应该很清楚:它检查millis() % 1000L
的结果是否小于500,并将结果布尔值存储在result
中。布尔值无非是 true 或 false。一个值。像 1
、34561
或 "hello world"
这样的值。当然,您 可以 使用该值作为 if
语句中的条件,如下所示:
if(result) { /* some code */ } else { /* more code */ }
但你不需要。因为它的只是一个值,其中true
与1
相同,false
与0
相同,可以通过这个布尔值隐式衰减到相应的整数(它总是以整数开头)到一个期望高(1
)或低(0
)的函数。您还可以将 digitalWrite
函数视为接受 bool
而不是逻辑 1
或 0
,结果是相同的。