Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 理解digitalWrite()中的millis()_Arduino_Milliseconds - Fatal编程技术网

Arduino 理解digitalWrite()中的millis()

Arduino 理解digitalWrite()中的millis(),arduino,milliseconds,Arduino,Milliseconds,我一直在做更多的Arduino编程,特别是回到我以前做过的事情上,尽可能地摆脱delay()。我使用以下代码“闪烁”LED: digitalWrite(选通1,(毫秒()%1000L)

我一直在做更多的Arduino编程,特别是回到我以前做过的事情上,尽可能地摆脱
delay()
。我使用以下代码“闪烁”LED:

digitalWrite(选通1,(毫秒()%1000L)<500L);
我读到的数学是(当前毫秒模1000)<500,这个数学似乎“闪烁”了LED。我不太明白的是为什么?数学似乎不是一个测试(mod的结果小于500),但确实为此处计算的任何内容设置了pin
高值

我一直在网上搜索,试图了解这里发生了什么,但找不到任何明确的信息。有人能解释一下吗

我把数学理解为(当前毫秒模1000)<500

没错

我不太明白的是为什么?数学似乎不是考试

我真的不明白你的话
(millis()%1000L)<500L
是一个测试,它测试
millis()%1000L
是否小于
500
,结果为
true
,相当于
1
false
,相当于
0

因此,半秒钟,条件为false->
0
被写入,另半秒钟为true,
1
被写入


我想我已经习惯于看到测试更加明确,比如if((millis()%1000L)<500)。这是一个三元函数

不,根本不是三元,也不是if。您需要了解什么是逻辑/布尔表达式,以及它的结果。让我们把它分解一下:

 bool result = (millis() % 1000L) < 500L;
但是你不需要。因为它只是一个值,
true
1
相同,
false
0
相同,所以您可以将这个布尔值隐式衰减为相应的整数(它始终是一个整数开始)传递给一个期望高(
1
)或低(
0
)的函数。您还可以将
digitalWrite
函数想象成一个
bool
,而不是逻辑
1
0
,结果是相同的

我把数学理解为(当前毫秒模1000)<500

没错

我不太明白的是为什么?数学似乎不是考试

我真的不明白你的话
(millis()%1000L)<500L
是一个测试,它测试
millis()%1000L
是否小于
500
,结果为
true
,相当于
1
false
,相当于
0

因此,半秒钟,条件为false->
0
被写入,另半秒钟为true,
1
被写入


我想我已经习惯于看到测试更加明确,比如if((millis()%1000L)<500)。这是一个三元函数

不,根本不是三元,也不是if。您需要了解什么是逻辑/布尔表达式,以及它的结果。让我们把它分解一下:

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

但是你不需要。因为它只是一个值,
true
1
相同,
false
0
相同,所以您可以将这个布尔值隐式衰减为相应的整数(它始终是一个整数开始)传递给一个期望高(
1
)或低(
0
)的函数。你也可以把
digitalWrite
函数想象成一个
bool
函数,而不是逻辑
1
0
,结果是一样的。

我想我习惯于看到测试更加明确,比如
if((millis()%1000L)<500)
。这是一个三元函数?不,不是三元函数,我猜你误解了布尔表达式的实际含义。让我对我的问题补充一点澄清……这就是为什么我们应该一直追求更明确的代码,即
digitalWrite(strobe1,(millis()%1000L)<500L?高:低)
将更加清晰,并且可能会优化到完全相同的代码。谢谢!我有过很长时间没有做过的C编程的闪回。我想我已经习惯于看到测试更加明确,比如
if((millis()%1000L)<500)
。这是一个三元函数?不,不是三元函数,我猜你误解了布尔表达式的实际含义。让我对我的问题补充一点澄清……这就是为什么我们应该一直追求更明确的代码,即
digitalWrite(strobe1,(millis()%1000L)<500L?高:低)
将更加清晰,并且可能会优化到完全相同的代码。谢谢!我曾经有过很长时间没有做过的C编程的闪回。
if(result) { /* some code */ } else { /* more code */ }