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