云水尧 发表于 2014-5-20 10:58:45

温湿度+LCD12864学习中,湿度显示问题

正在学习用温湿度传感器将温湿度显示在LCD12864上。代码执行过程中,温度能显示正常,可湿度总是显示为0。

若将<span style="background-color: rgb(247, 247, 247);">if(millis() - tepTimer > 500){</span>用delay(500);方法代替,则温湿度都能显示正常。请问这是怎么回事啊?不科学啊!!!


程序代码如下:

#include <dht11.h>
#include <LCD12864RSPI.h>
#define AR_SIZE( a ) sizeof( a ) / sizeof( a )

unsigned long tepTimer;
unsigned char tempTitle[] = {0xCE,0xC2,0xB6,0xC8};//温度
unsigned char humiTitle[] = {0xCA,0xAA,0xB6,0xC8};//湿度
unsigned char line11[] = ":";
dht11 DHT;

void setup(){
LCDA.initDriverPin(2,7,10);
LCDA.Initialise();
delay(100);
}

void loop(){
int chk = DHT.read(4);
int tempdata;
int humidata;
tempdata = DHT.temperature;
humidata = DHT.humidity;

if(millis() - tepTimer > 500){
    tepTimer = millis();

    LCDA.CLEAR();
    LCDA.DisplayString(0,0,tempTitle,AR_SIZE(tempTitle));
    LCDA.DisplayString(0,2,line11,AR_SIZE(line11));
    shownum(tempdata,0,3,2,0);
    LCDA.DisplayString(1,0,humiTitle,AR_SIZE(humiTitle));
    LCDA.DisplayString(1,2,line11,AR_SIZE(line11));
    shownum(humidata,1,3,2,0);
}
}

void shownum(long num, int x, int y, int zlen, int xlen){
char str;
dtostrf(num,zlen,xlen,str);
LCDA.DisplayString(x,y,(unsigned char *)str,AR_SIZE(str));
}




Leotower 发表于 2014-5-21 09:24:40

1、 建议将硬件使用的模块、连接情况说明一下,这样方便交流。
2、逻辑上将检测温度放置到if语句中更合理,代码和含义是没500ms左右检测一次,同时不阻塞loop运行。
3、建议参考DHT的样例对返回值进行判断,返回正确时再刷新显示; 连续读取DTH可能导致通讯数据有误。

MoonShine 发表于 2016-6-6 12:10:28

Leotower 发表于 2014-5-21 09:24
1、 建议将硬件使用的模块、连接情况说明一下,这样方便交流。
2、逻辑上将检测温度放置到if语句中更合理, ...

这是LCD1602显示器的问题,跟传递的数据没多大关系,它会自动保留最大的一个字段显示,除非更长的盖住替换

20060606 发表于 2020-8-17 05:39:37

您用的是什么温湿度传感器
页: [1]
查看完整版本: 温湿度+LCD12864学习中,湿度显示问题