我已经做了很多Arduino编程,特别是回到我之前做过的事情,并在可能的地方摆脱了delay()
。我ran across an interesting post具有以下代码来“闪烁” LED:
digitalWrite(strobe1, (millis() % 1000L) < 500L);
我将数学公式读为(当前毫秒以模1000为单位)<500 ,该数学公式似乎使LED闪烁。我不太了解的是 为什么 ?数学似乎不是一个测试(mod的结果小于500 ),但是确实将HIGH
的引脚设置为此处要计算的内容。
我一直在网上搜索,以尝试了解此处的情况,但找不到任何明确的内容。有人可以解释吗?
答案 0 :(得分:3)
我读数学为(当前毫秒取模1000)<500
那是正确的。
我不太了解为什么?数学似乎不是考验
我不太了解您的发言。 (millis() % 1000L) < 500L
是一项测试,它测试millis() % 1000L
是否小于500
并得出true
,它等于1
或{{1 }},相当于false
。
所以,半秒,条件为假-> 0
被写入,而另一半秒为真,0
被写入。
我想我曾经看到测试更加明确,例如if((millis()%1000L)<500)。这是一个三元函数吗?
不,根本不是三元组,如果不是。您需要了解什么是逻辑/布尔表达式及其结果。让我们对其进行分解:
1
应该清楚这一行的作用:它检查 bool result = (millis() % 1000L) < 500L;
的结果是否小于500,并将结果布尔值存储在millis() % 1000L
中。布尔值只不过是对或错。一个值。像result
,1
或34561
之类的值。当然,您可以 将该值用作"hello world"
语句中的条件,例如:
if
但是您不需要。由于其 just 值,其中if(result) { /* some code */ } else { /* more code */ }
与true
相同,而1
与false
相同,因此您可以传递此布尔值隐式衰减为期望为HIGH(0
)或LOW(1
)的函数的相应整数(始终始终是整数)。您还可以想到0
函数,就像它将使用digitalWrite
而不是逻辑bool
或1
一样,结果将是相同的。