雪星 发表于 2013-4-9 00:15:40

多个DHT11的读书数问题

求教:我打算用两个DHT11同时测温,程序如下,但始终显示同一个传感器读数,请问怎么改程序会显示两个DHT11的读数,非常感谢您的回答!
#include <dht11.h>
#include<LiquidCrystal.h>
#define DHT11_PIN 1
#define DHT11_PIN 2
byte read_dht11_dat()
{
        byte i = 0;
        byte result=0;
        for(i=0; i< 8; i++){
               
               
             while(!(PINC & _BV(DHT11_PIN)));// wait for 50us
             delayMicroseconds(30);
               
             if(PINC & _BV(DHT11_PIN))
             result |=(1<<(7-i));
             while((PINC & _BV(DHT11_PIN)));// wait '1' finish
         
               
        }
        return result;
}
LiquidCrystal lcd(8,9,4,5,6,7);
void setup()
{
Serial.begin(9600);
lcd.begin(16,2);
   DDRC |= _BV(DHT11_PIN);
   PORTC |= _BV(DHT11_PIN);
}
dht11 DHT11;
void loop()
{
      byte dht11_dat;
        byte dht11_in;
        byte i;
        // start condition
        // 1. pull-down i/o pin from 18ms
        PORTC &= ~_BV(DHT11_PIN);
        delay(18);
        PORTC |= _BV(DHT11_PIN);
        delayMicroseconds(40);
       
        DDRC &= ~_BV(DHT11_PIN);
        delayMicroseconds(40);
       
        dht11_in = PINC & _BV(DHT11_PIN);
       
        if(dht11_in){
                Serial.println("dht11 start condition 1 not met");
                return;
                         }
        delayMicroseconds(80);
       
        dht11_in = PINC & _BV(DHT11_PIN);
       
        if(!dht11_in){
                Serial.println("dht11 start condition 2 not met");
                return;
                         }
        delayMicroseconds(80);
        // now ready for data reception
        for (i=0; i<5; i++)
                dht11_dat = read_dht11_dat();
               
        DDRC |= _BV(DHT11_PIN);
        PORTC |= _BV(DHT11_PIN);
       
      byte dht11_check_sum = dht11_dat+dht11_dat+dht11_dat+dht11_dat;
        // check check_sum
        if(dht11_dat!= dht11_check_sum)
        {
                Serial.println("DHT11 checksum error");
        }
   
   lcd.setCursor(0,0);
   lcd.print("H");
   lcd.print(":");
   lcd.print(dht11_dat, DEC);
   lcd.print(".");
   lcd.print(dht11_dat, DEC);
   lcd.print("%");
   lcd.setCursor(0,1);
      lcd.print("T");
   lcd.print(":");
   lcd.print(dht11_dat, DEC);
   lcd.print(".");
   lcd.print(dht11_dat, DEC);
   lcd.print("C ");
   lcd.setCursor(9,0);
   lcd.print(dht11_dat, DEC);
   lcd.print(".");
   lcd.print(dht11_dat, DEC);
   lcd.print("%");
   lcd.setCursor(9,1);
   lcd.print(dht11_dat, DEC);
   lcd.print(".");
   lcd.print(dht11_dat, DEC);
   lcd.print("C");
    delay(1000);
}
页: [1]
查看完整版本: 多个DHT11的读书数问题