极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15026|回复: 3

dht11无法正常读数

[复制链接]
发表于 2017-8-5 21:18:04 | 显示全部楼层 |阅读模式
dht11在单独测试时是很正常的,可是把它和攀腾pm2.5传感器搭在一起,5110显示,他却无法正常的读数了,求大神帮帮忙

//      SCK clk - Pin 12
//      MOSI dir- Pin 11
//      DC  dc - Pin 10




//      RST  rst- Pin 8
//      CS   ce- Pin 9
//
int rain=4;//rain sensor
#include <LCD5110_Basic.h>
#include<dht11.h>
dht11 DHT11;
#define DHT11PIN 5//dht11
LCD5110 myGLCD(12,11,10,8,9);

#define BAUDRATE 9600
#define DEBUGOUTPUT 0
extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
int generatedChecksum = 0;
int checksum = 0;
int payloadLength = 0;
byte payloadData[20] = {0};


int pm1p0=0;
int pm2p5=0;
int pm10=0;
int vpm1p0=0;
int vpm2p5=0;
int vpm10=0;
int npm1p0=0;
int npm2p5=0;
int npm10=0;

int cuontpm1p0=0;
int cuontpm2p5=0;
int cuontpm10=0;
int cuontvpm1p0=0;
int cuontvpm2p5=0;
int cuontvpm10=0;
int temp=0;



// system variables
long lastReceivedPacket = 0;
boolean bigPacket = false;

////////////////////////////////////////////
extern uint8_t SmallFont[];


float y;
uint8_t* bm;
int pacy;

////////////////////////////////////////////

//////////////////////////
// Microprocessor Setup //
//////////////////////////
void setup() {

pinMode(4,INPUT);
  Serial.begin(BAUDRATE);           // USB

  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
  
  myGLCD.clrScr();
  myGLCD.print("AUTOMATIC WINDOWS", CENTER, 5);
  myGLCD.print("TIANYI AI LAB", CENTER, 20);
  
  //myGLCD.setFont(TinyFont);
  myGLCD.print("(C)2017 by", CENTER, 30);
  myGLCD.print("CHEN YANG ZHU", CENTER, 40);

  delay(2000);
  
  myGLCD.clrScr();
  //myGLCD.print("USAPM1.0:", 0, 0);
  //myGLCD.print("USAPM2.5:", 0, 8);
  //myGLCD.print("USAPM1 0:", 0, 16);
// myGLCD.print("CHNPM1.0:", 0, 24);
  myGLCD.print("CHNPM2.5:", 0, 32);
// myGLCD.print("CHNPM1 0:", 0, 40);

  delay(2);
  
  

  
}

////////////////////////////////
// Read data from Serial UART //
////////////////////////////////
byte ReadOneByte() {
  int ByteRead;
  while(!Serial.available());
  ByteRead = Serial.read();
#if DEBUGOUTPUT  
  Serial.print((char)ByteRead);   // echo the same byte out the USB serial (for debug purposes)
#endif
  return ByteRead;
}

/////////////
//MAIN LOOP//
/////////////
void loop() {
  int chk=DHT11.read(DHT11PIN);
  float temp=DHT11.temperature;
  int humidity=DHT11.humidity;
// while(1){
  if(ReadOneByte() == 0x42) {
    if(ReadOneByte() == 0x4D) {
      payloadLength = ReadOneByte();
      payloadLength =payloadLength<<8;
      payloadLength=payloadLength+ReadOneByte();
      if(payloadLength > 20)                      //Payload length can not be greater than 169
          return;
      generatedChecksum = 0;
      generatedChecksum=generatedChecksum+0x42+0x4D+0x14 ;     
      for(int i = 0; i < payloadLength-2; i++)
      {  
        payloadData[i] = ReadOneByte();            //Read payload into memory
        generatedChecksum += payloadData[i];
      }   
      
      checksum = ReadOneByte();
      checksum =checksum<<8;
      checksum =checksum+ReadOneByte();     //Read checksum byte from stream  
      if(checksum == generatedChecksum)
      {
        for(int i = 0; i < payloadLength-2; i++)
        {    // Parse the payload
          switch (i)
          {
          case 0:
          temp=pm1p0;
          pm1p0=payloadData[i];
          i++;
          pm1p0=pm1p0<<8;
          pm1p0=pm1p0+payloadData[i];
         
          //Serial.println(pm1p0);
         
          if(cuontpm1p0<=9)
          {
            if(cuontpm1p0!=0)
            {
              
             pm1p0+=temp;
           
            }
            else
            {
            
            }
           cuontpm1p0++;
          }
          if(cuontpm1p0==10)
          {

         
        
          cuontpm1p0=0;
          pm1p0=0;
          }
        
          break;
         
          case 2:
          temp=pm2p5;
          pm2p5=payloadData[i];
          i++;
          pm2p5=pm2p5<<8;
          pm2p5=pm2p5+payloadData[i];
         
         
           //Serial.println(pm2p5);
         
         
            if(cuontpm2p5<=9)
          {
            if(cuontpm2p5!=0)
            {
             pm2p5+=temp;
            }
           cuontpm2p5++;
          }
          if(cuontpm2p5==10)
          {
         
          cuontpm2p5=0;
          pm2p5=0;
          }
          break;
         
          case 4:
          temp= pm10;
          pm10=payloadData[i];
          i++;
          pm10=pm10<<8;
          pm10=pm10+payloadData[i];
         
         // Serial.println(pm10);
         
         
         
           if(cuontpm10<=9)
          {
            if(cuontpm10!=0)
            {
             pm10+=temp;
            }
           cuontpm10++;
          }
          if(cuontpm10==10)
          {
         
         
          cuontpm10=0;
          pm10=0;
          }
         break;
         
          case 6:
          temp=vpm1p0;
          vpm1p0=payloadData[i];
          i++;
          vpm1p0=vpm1p0<<8;
          vpm1p0=vpm1p0+payloadData[i];
          //Serial.print("CHNPM1.0:");
          //Serial.println(vpm1p0);
            if(cuontvpm1p0<=9)
          {
            if(cuontvpm1p0!=0)
            {
              
             vpm1p0+=temp;
             //Serial.println(pm1p0);
            }
            else
            {
             // Serial.println(pm1p0);
            }
           cuontvpm1p0++;
          }
          if(cuontvpm1p0==10)
          {
         
         
          cuontvpm1p0=0;
          vpm1p0=0;
          }
          break;
         
         
          case 8:
          temp=vpm2p5;
          vpm2p5=payloadData[i];
          i++;
          vpm2p5=vpm2p5<<8;
          vpm2p5=vpm2p5+payloadData[i];
           //Serial.print("CHNPM2.5:");
          //Serial.println(vpm2p5);
            if(cuontvpm2p5<=9)
          {
            if(cuontvpm2p5!=0)
            {
              
             vpm2p5+=temp;
             //Serial.println(pm1p0);
            }
            else
            {
             // Serial.println(pm1p0);
            }
           cuontvpm2p5++;
          }
          if(cuontvpm2p5==10)
          {
          Serial.print("CHNPM2.5:");
          Serial.println(vpm2p5/10);
          myGLCD.print("     ", 53, 32);
          myGLCD.printNumI(vpm2p5/10, 53, 32);
         
          cuontvpm2p5=0;
          vpm2p5=0;
          }
          break;
            
          case 10:
          temp=vpm10;
          vpm10=payloadData[i];
          i++;
          vpm10=vpm10<<8;
          vpm10=vpm10+payloadData[i];
           //Serial.print("CHNPM10:");
          //Serial.println(vpm10);
            if(cuontvpm10<=9)
          {
            if(cuontvpm10!=0)
            {
              
             vpm10+=temp;
             //Serial.println(pm1p0);
            }
            else
            {
             // Serial.println(pm1p0);
            }
           cuontvpm10++;
          }
          if(cuontvpm10==10)
          {
         
         
          cuontvpm10=0;
          vpm10=0;
          }
          break;
         
          case 12:
          npm1p0=payloadData[i];
          i++;
          npm1p0=npm1p0<<8;
          npm1p0=npm1p0+payloadData[i];
          break;
         
          case 14:
          npm2p5=payloadData[i];
          i++;
          npm2p5=npm2p5<<8;
          npm2p5=npm2p5+payloadData[i];
          break;
         
          case 16:
          npm10=payloadData[i];
          i++;
          npm10=npm10<<8;
          npm10=npm10+payloadData[i];
           break;
          default:break;
          } // switch
        } // for loop



/*
#if !DEBUGOUTPUT

        // *** Add your code here ***

        if(bigPacket) {
          if(poorQuality == 0)
            digitalWrite(LED, HIGH);
          else
            digitalWrite(LED, LOW);
          Serial.print("PoorQuality: ");
          Serial.print(poorQuality, DEC);
          Serial.print(" Attention: ");
          Serial.print(attention, DEC);
          Serial.print(" Time since last packet: ");
          Serial.print(millis() - lastReceivedPacket, DEC);
          lastReceivedPacket = millis();
          Serial.print("\n");
        }
#endif        
        bigPacket = false;  
  
  
  
  */
        
      }
      
      
      else {
      
            }  

    }
  }
  Serial.print("over");
  
  


myGLCD.setFont(SmallFont);
myGLCD.printNumI(humidity,0,0);
myGLCD.printNumF(float(temp),2,RIGHT,0);
  Serial.println(humidity);
  Serial.println(temp);
  
//}
  
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2017-8-5 23:01:26 | 显示全部楼层
雖然我沒用過 "攀腾pm2.5传感器" ~

但 5110 顯示器我遇過根本不顯示讀數....
後來改用 u8glib 才解決問題,這其間摸索了二個多月才發現 u8glib 的衝突問題比較小

回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-6 13:07:45 来自手机 | 显示全部楼层
感谢,问题已经找出来了
回复 支持 反对

使用道具 举报

发表于 2017-8-8 17:25:49 | 显示全部楼层
chenwei 发表于 2017-8-6 13:07
感谢,问题已经找出来了

我刚刚开始学习,看到您的帖子后,想到目前我遇到的难题,我使用DUE与DHT11连接,使用那个例程,得出的结果无论是温度还是湿度,都是严重不合适,温度是150多,湿度180多,能否给点指导?十分感谢了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 10:27 , Processed in 0.043207 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表