if(表达式){ 语句 1;
} else{
语句 2;
}
表达式结果为真时,执行语句 1,放弃语句 2 的执行,接着跳过 if 语句,执行 if 语句的下一条语句;如果表达式结果为假时,执行语句 2,放弃语句 1 的执行, 接着跳过 if 语句,执行 if 语句的下一条语句。无论如何,对于一次条件的判断, 语句 1 和语句 2 只能有一个被执行,不能同时被执行。
回到我们的代码, if 中的语句就省略不说了,不明白的可以回看前一节:
1. if(data>27){
2.
for(int x=0; x<180; x++){ …… 3. 4. }
5.
} else { …… 6. 7.
}
进入 if 判断,对 data 也就是温度值进行判断,如果大于 27,进入 if 前半段, 蜂鸣器鸣响。否则,进入 else 后的语句,关闭蜂鸣器。 除了不断检测温度进行报警,我们还需要代码在串口实时显示温度。这里又用到 millis()函数(项目三中有说明),利用固定的机器时间,每隔 500ms 定时向串 口发出数据。 那串口收到数据后,如何在串口监视器上显示呢?就要用到下面的两句语句:
1.
Serial.print(val); Serial.println(val);
2. 3.
print()的解释是,以我们可读的 ASCII 形式从串口输出。 这条命令有多种形式:
(1)数字则是以位形式输出(例 1)
(2)浮点型数据输出时只保留小数点后两位(例 2)
(3)字符和字符串则原样输出,字符需要加单引号(例 3),字符串需要加双 引号(例 4)。 例如:
(1)Serial.print(78); 输出“78”
(2)Serial.print(1.23456); 输出“1.23”
(3)Serial.print(‘N’); 输出“N”
(4)Serial.print(“Hello world.”); 输出“Hello world.” 不仅有我们上面这种形式输出,还可以以进制形式输出,可以参看语法手册。 println()与 print()区别就是,println()比 print()多了回车换行,其他完全相同。 串口监视器输出还有一条语句比较常见的是 Serial.write(),它不是以 ASCII 形式 输出,而是以字节形式输出,感兴趣的可以查看语法手册。 代码中,可能有一处会不太明白:
1.
Serial.print(data);
有人会问,data 不是字符串吗?怎么输出是数字呢?不要忘了,这是我们前面 定义的变量,它其实就是代表数字,输出当然就是数字啦!
STEP 4: 硬件回顾
LM35
LM35 是一种常见的温度传感器,使用简便,不需要额外的校准处理就可以达到 + 1/4℃的准确率。
我们看一下 LM35 引脚示意图,Vs 接入电源,Vout 是电压输出,GND 接地。
计算公式:Vout = 10mV/℃ * T℃(温度范围在+2℃~40℃)
可以做些其他的事
将我们上面的温度报警器再结合 LED 灯。在不同的温度范围设置不同颜色灯, 并伴随不同频率的声音。
比如:温度小于 10 或者大于 35,亮红灯,蜂鸣器发出比较急促的声音。
温度在 25~35 之间,亮黄灯,蜂鸣器伴随相对缓和的声音。 温度在 10~25 之间,亮绿灯,关闭蜂鸣器。