分享

基于Arduino的18B20+LCD12864温度显示

 开启美好每一天 2014-01-14
 本帖最后由 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. OneWire oneWire(ONE_WIRE_BUS);
  17. DallasTemperature sensors(&oneWire);

  18. char str[4]; //定义温度值存储数组,4位,其中3位为数字,1位为小数点
  19. double temp =0; //定义中间变量,用于将获取的float型温度值转变为unsigned char数组
  20. unsigned char show[]={
  21.   0xB5,0xB1,0xC7,0xB0,0xBB,0xB7,0xBE,0xB3,0xCE,0xC2,0xB6,0xC8};//当前环境温度
  22. int numberOfDevices;
  23. void setup()
  24. {
  25.   Serial.begin(9600);
  26.   sensors.begin(); //传感器初始化
  27.   numberOfDevices = sensors.getDeviceCount();
  28.   LCDA.Initialise(); // 屏幕初始化
  29.   LCDA.DisplayString(0,0,show,AR_SIZE(show));//第一行第1格开始,显示文字“当前环境温度”
  30. }

  31. void loop()
  32. {
  33.   sensors.requestTemperatures(); //获取温度值
  34.   for(int i=0;i<numberOfDevices; i++)    //逐个获取传感器的温度
  35.   {
  36.     temp=sensors.getTempCByIndex(i); //使用索引序号获得摄氏度数值
  37.     dtostrf(temp,4,2,str);  //将获取的数值转换为字符型数组
  38.     if (i<=2)
  39.     {
  40.       LCDA.DisplayString(1,i*3,(unsigned char *)str,sizeof(str));
  41.     } //自第2行第1列开始显示温度值
  42.     else
  43.     {
  44.       if(i>2&&i<=5)
  45.       {
  46.       LCDA.DisplayString(2,(i-3)*3,(unsigned char *)str,sizeof(str));
  47.       }
  48.       else
  49.       {
  50.       LCDA.DisplayString(3,(i-6)*3,(unsigned char *)str,sizeof(str));  
  51.       }
  52.     }
  53.   }
  54. }
复制代码
无标题.png

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多