了解digitalWrite()中的millis()

时间:2018-09-24 13:24:02

标签: arduino milliseconds

我已经做了很多Arduino编程,特别是回到我之前做过的事情,并在可能的地方摆脱了delay()。我ran across an interesting post具有以下代码来“闪烁” LED:

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

我将数学公式读为(当前毫秒以模1000为单位)<500 ,该数学公式似乎使LED闪烁。我不太了解的是 为什么 ?数学似乎不是一个测试(mod的结果小于500 ),但是确实将HIGH的引脚设置为此处要计算的内容。

我一直在网上搜索,以尝试了解此处的情况,但找不到任何明确的内容。有人可以解释吗?

1 个答案:

答案 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中。布尔值只不过是对或错。一个值。像result134561之类的值。当然,您可以 将该值用作"hello world"语句中的条件,例如:

if

但是您不需要。由于其 just 值,其中if(result) { /* some code */ } else { /* more code */ } true相同,而1false相同,因此您可以传递此布尔值隐式衰减为期望为HIGH(0)或LOW(1)的函数的相应整数(始终始终是整数)。您还可以想到0函数,就像它将使用digitalWrite而不是逻辑bool1一样,结果将是相同的。