greenfort 发表于 2012-8-13 01:42:36

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

本帖最后由 greenfort 于 2012-8-13 01:49 编辑

初学Arduino,制作的通过12864显示多个18B20温度的程序

接线
请参考本论坛中的18B20及LCD12864与Arduino接线,这里不再重复,只是强调一点,18B20的PIN1和PIN3要同时接地,否则会在返回若干值后出现一次错误值(85.00)不知道什么原因

鉴于12864的显示大小,程序最多接9个18B20传感器,多了显示不了

程序代码如下/*
LCDArduino
PIN1 = GND
PIN2 = 5V
RS(CS) = 8;
RW(SID)= 9;
EN(CLK) = 3;
PIN15 PSB = GND;
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#include <stdlib.h>
#define ONE_WIRE_BUS 2
#include "LCD12864RSPI.h"
#define AR_SIZE( a ) sizeof( a ) / sizeof( a )

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

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

void loop()
{
sensors.requestTemperatures(); //获取温度值
for(int i=0;i<numberOfDevices; i++)    //逐个获取传感器的温度
{
    temp=sensors.getTempCByIndex(i); //使用索引序号获得摄氏度数值
    dtostrf(temp,4,2,str);//将获取的数值转换为字符型数组
    if (i<=2)
    {
      LCDA.DisplayString(1,i*3,(unsigned char *)str,sizeof(str));
    } //自第2行第1列开始显示温度值
    else
    {
      if(i>2&&i<=5)
      {
      LCDA.DisplayString(2,(i-3)*3,(unsigned char *)str,sizeof(str));
      }
      else
      {
      LCDA.DisplayString(3,(i-6)*3,(unsigned char *)str,sizeof(str));
      }
    }
}
}

cnkids 发表于 2012-8-13 02:50:22

其实你可以考虑翻页显示。

Randy 发表于 2012-8-13 09:10:05

是的,考虑一下下一级菜单显示。把你的接线图上传一下,谢谢!

acdc0616 发表于 2012-8-13 09:19:59

嗯,可以个定时翻页,每个温度前加上中文名称,就更好了

greenfort 发表于 2012-8-13 09:43:29

本帖最后由 greenfort 于 2012-8-13 09:45 编辑

cnkids 发表于 2012-8-13 02:50 static/image/common/back.gif
其实你可以考虑翻页显示。

有道理,抽空再改改,增进学习

greenfort 发表于 2012-8-13 09:44:16

Randy 发表于 2012-8-13 09:10 static/image/common/back.gif
是的,考虑一下下一级菜单显示。把你的接线图上传一下,谢谢!

回头找个软件画画补上

Randy 发表于 2012-8-13 09:49:45

greenfort 发表于 2012-8-13 09:44 static/image/common/back.gif
回头找个软件画画补上

:handshake

zcbzjx 发表于 2012-8-14 19:21:20

pin1 pin3同时接地?把你的接线图传上来看看吧,我做了很多18B20了,没这个问题哦

意见反馈 发表于 2012-9-4 10:27:37

请教楼主怎么确认显示的温度对应哪个探头,还有如果要在温度超过设定值时让一端口输出控制(就是做个多点温控器)该怎么做?谢谢

zcbzjx 发表于 2012-9-4 15:54:06

18B20有对应唯一地址吧。根据这个地址可以判断。

xch396352170 发表于 2013-3-31 10:25:52

楼主上个图呗!

fangtaonj 发表于 2013-4-29 19:27:01

好东西!+++++

shiow1984 发表于 2013-5-6 21:04:53

请问楼主 LCDA.DisplayString 这个函数如何显示摄氏度这个字符呢? 不能直接显示数字吗?

伟创电子工作室 发表于 2013-5-10 12:03:29

greenfort 发表于 2012-8-13 09:44 static/image/common/back.gif
回头找个软件画画补上

期待楼主回头找个软件画画补上:handshake

mjt_1130141801 发表于 2013-9-15 14:47:42

您好我编译的时候出现这样的情况是什么意思,能帮忙解释一下吗,谢谢
页: [1] 2 3
查看完整版本: 基于Arduino的18B20+LCD12864温度显示