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

2014-05-201.8万
AI 快速预览详细 收起
本文讨论了在使用DHT11温湿度传感器和LCD12864显示屏时,遇到湿度始终显示为0的问题。通过将代码中的millis()计时器改为delay(500),成功解决了这一故障。文章提供了详细的代码示例和故障排查步骤,适合初学者和STEM教育场景。
正在学习用温湿度传感器将温湿度显示在LCD12864上。代码执行过程中,温度能显示正常,可湿度总是显示为0。

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


程序代码如下:

  1. #include <dht11.h>
  2. #include <LCD12864RSPI.h>
  3. #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
  4. unsigned long tepTimer;
  5. unsigned char tempTitle[] = {0xCE,0xC2,0xB6,0xC8};//温度
  6. unsigned char humiTitle[] = {0xCA,0xAA,0xB6,0xC8};//湿度
  7. unsigned char line11[] = ":";
  8. dht11 DHT;
  9. void setup(){
  10.   LCDA.initDriverPin(2,7,10);
  11.   LCDA.Initialise();
  12.   delay(100);
  13. }
  14. void loop(){
  15.   int chk = DHT.read(4);
  16.   int tempdata;
  17.   int humidata;
  18.   tempdata = DHT.temperature;
  19.   humidata = DHT.humidity;
  20.   if(millis() - tepTimer > 500){
  21.     tepTimer = millis();
  22.     LCDA.CLEAR();
  23.     LCDA.DisplayString(0,0,tempTitle,AR_SIZE(tempTitle));
  24.     LCDA.DisplayString(0,2,line11,AR_SIZE(line11));
  25.     shownum(tempdata,0,3,2,0);
  26.     LCDA.DisplayString(1,0,humiTitle,AR_SIZE(humiTitle));
  27.     LCDA.DisplayString(1,2,line11,AR_SIZE(line11));
  28.     shownum(humidata,1,3,2,0);
  29.   }
  30. }
  31. void shownum(long num, int x, int y, int zlen, int xlen){
  32.   char str[zlen];
  33.   dtostrf(num,zlen,xlen,str);
  34.   LCDA.DisplayString(x,y,(unsigned char *)str,AR_SIZE(str));
  35. }
复制代码





创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

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