基于Arduino的18B20+LCD12864温度显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Arduino的18B20+LCD12864温度显示本帖最后由 greenfort 于 2012-8-13 01:49 编辑
初学Arduino,制作的通过12864显示多个18B20温度的程序
接线
请参考本论坛中的18B20及LCD12864与Arduino接线,这里不再重复,只是强调一点,18B20
的PIN1和PIN3要同时接地,否则会在返回若干值后出现一次错误值(85.00)不知道什么原因
鉴于12864的显示大小,程序最多接9个18B20传感器,多了显示不了
程序代码如下
1. /*
2. LCD Arduino
3. PIN1 = GND
4. PIN2 = 5V
5. RS(CS) = 8;
6. RW(SID)= 9;
7. EN(CLK) = 3;
8. PIN15 PSB = GND;
9. */
10. #include <OneWire.h>
11. #include <DallasTemperature.h>
12. #include <stdlib.h>
13. #define ONE_WIRE_BUS 2
14. #include "LCD12864RSPI.h"
15. #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
16.
17. OneWire oneWire(ONE_WIRE_BUS);
18. DallasTemperature sensors(&oneWire);
19.
20. char str[4]; //定义温度值存储数组,4位,其中3位为数字,1位为小数点
21. double temp =0; //定义中间变量,用于将获取的float型温度值转变为unsigned char数组
22. unsigned char show[]={
23. 0xB5,0xB1,0xC7,0xB0,0xBB,0xB7,0xBE,0xB3,0xCE,0xC2,0xB6,0xC8};//当前环境温度
24. int numberOfDevices;
25. void setup()
26. {
27. Serial.begin(9600);
28. sensors.begin(); //传感器初始化
29. numberOfDevices = sensors.getDeviceCount();
30. LCDA.Initialise(); // 屏幕初始化
31. LCDA.DisplayString(0,0,show,AR_SIZE(show));//第一行第1格开始,显示文字“当前环境
温度”
32. }
33.
34. void loop()
35. {
36. sensors.requestTemperatures(); //获取温度值
37. for(int i=0;i<numberOfDevices; i++) //逐个获取传感器的温度
38. {
39. temp=sensors.getTempCByIndex(i); //使用索引序号获得摄氏度数值
40. dtostrf(temp,4,2,str); //将获取的数值转换为字符型数组
41. if (i<=2)
42. {
43. LCDA.DisplayString(1,i*3,(unsigned char *)str,sizeof(str));。