人体感应灯的疑问。-Arduino中文社区 - Powered by Discuz! Archiver

dxin7662 发表于 2018-2-23 19:22

人体感应灯的疑问。

while (!digitalRead(PIRpin) )
{
}
// 将灯打开10秒,然后关闭
Serial.println("turn on");
digitalWrite(RELAYpin, HIGH);
delay(2000);
digitalWrite(RELAYpin, LOW);
Serial.println("turn off");

请问!digitalRead(PIRpin)语句中,!起什么作用?
while语句中执行的命令放到{}里面行不行?如下
while (!digitalRead(PIRpin) )
{ // 将灯打开10秒,然后关闭
Serial.println("turn on");
digitalWrite(RELAYpin, HIGH);
delay(2000);
digitalWrite(RELAYpin, LOW);
Serial.println("turn off");
}


奈何col 发表于 2018-2-23 22:07

!取反
!true==false

mzb2012 发表于 2018-2-23 23:23

这里的!是取反的意思,假如你读到的端口值是1那么while (!digitalRead(PIRpin) ),条件就是假跳过大括号里面的内容直接执行后面的语句
相反,读到0,取反后就是1,条件为真,一直执行{},直到条件是假

dxin7662 发表于 2018-2-24 08:38

太感谢了!实验效果总是反着,终于找到原因了。

nofarewell 发表于 2018-3-15 11:27

dxin7662 发表于 2018-2-24 08:38
太感谢了!实验效果总是反着,终于找到原因了。

你的效果是什么样的?我也在测试这个
页: [1]
查看完整版本: 人体感应灯的疑问。