温湿度+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));
}
1、 建议将硬件使用的模块、连接情况说明一下,这样方便交流。
2、逻辑上将检测温度放置到if语句中更合理,代码和含义是没500ms左右检测一次,同时不阻塞loop运行。
3、建议参考DHT的样例对返回值进行判断,返回正确时再刷新显示; 连续读取DTH可能导致通讯数据有误。 Leotower 发表于 2014-5-21 09:24
1、 建议将硬件使用的模块、连接情况说明一下,这样方便交流。
2、逻辑上将检测温度放置到if语句中更合理, ...
这是LCD1602显示器的问题,跟传递的数据没多大关系,它会自动保留最大的一个字段显示,除非更长的盖住替换 您用的是什么温湿度传感器
页:
[1]