本帖最后由 hxf 于 2014-7-6 12:57 编辑
最近楼主比较忙很少有时间做实验了,本着贵精不贵多的原则,楼主尽量压缩休息时间才有了今天这篇文章。
楼主这次的试验主要是通过DHT11采集温度与湿度,然后将接收到的数据在1602显示。
鉴于论坛上已经有太多的诸如此类试验的帖子,楼主这里就不再献丑了,不过楼主发现大部分前辈们的帖子都是直接贴出自己的程序,很少有详细的讲解库文件的调用方式的,导致小白们一上来只能先复制试验,一路跌跌撞撞才能初窥库文件调用的门径。所以楼主今天就厚脸皮站出来借用这次试验给大家讲解一下有关库文件的调用。
楼主这次的试验其实很简单,只涉及到了两个库,一个是DHT库还有一个官方自带的LiquidCrystal库。
DHT库好像是大神们编写的大家只要掌握两个函数就行:
dht.readTemperature() //读取DHT传感器的温度值
dht.readHumidity() //读取DHT传感器的湿度值
至于LiquidCrystal这个库就比较重要了,大家以后可能会经常用到,所以关键的函数还是要知道一下是什么意思的:
1.定义IO口的常用格式:
LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
注:括号里面的值分别输入你的arduino连接到这些管脚对应的IO口编号。这样小白们就再也不用发愁管脚连接的问题了想怎么连就怎么写。
例如楼主在此试验中的传输IO定义是这样的:
#include <LiquidCrystal.h>//调用LCD驱动库
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
2.指定屏幕尺寸:
lcd.begin(cols, rows) //cols表示列数,rows表示行数
楼主此次试验用的是1602,有16列,2行,所以这里应该是:
void setup()
{
lcd.begin(16, 2);
}
3.清屏:
lcd.clear() //这个语法很重要,应为在为LCD输入新的显示时,如果比原先的内容段就会发现新的内容没有把旧的内容完全覆盖掉,和多出来的部分混在了一起。所以在新的内容传送前加上这句就可以把旧的内容清理干净,避免产生重叠。
4.光标定位:
lcd.setCursor(col, row) //同样的col是列,row是行
作者在输入湿度前就加入了这个函数,使得湿度值显示在了第二行:
lcd.setCursor(0, 1); //换行到第二行开始位置
int hum = dht.readHumidity();
lcd.print("Humidity:");
lcd.print(hum);
lcd.print("%");
5.写入文本:
lcd.print() //这里有两种方式一种是直接写入变量的值,一种是直接写入要显示的东西,区别是后一种要加引号
以作者刚才那个例子说明,假设hum=45,最后在LCD上显示出来的效果为:
Humidity:45%
好了掌握了这几个基本的语法小白们已经可以在LCD上显示自己想要的结果了。
附上楼主的程序:
外加演示效果:
楼主用到的DHT库文件:http://pan.baidu.com/s/1bn5vayF
|