|
|
如果采集数据正常DHT11各管脚的电压应该是多少
我的程序是这样的:
#define DHT11_PIN 3
int Led=8;
int Buzzer=7;
byte read_dht11_dat()
{
byte i = 0;
byte result = 0;
for(i=0;i<8;i++)
{
while(!(PINC&_BV(DHT11_PIN)));
delayMicroseconds(30);
if(PINC&_BV(DHT11_PIN))
result|=(1<<(7-i));
while((PINC&_BV(DHT11_PIN)));
}
return result;
}
void setup()
{
DDRC|=_BV(DHT11_PIN);
PORTC|=_BV(DHT11_PIN);
pinMode(Led,OUTPUT);
pinMode(Buzzer,OUTPUT);
Serial.begin(9600);
Serial.println("Ready");
}
void loop()
{
byte dht11_dat[5];
byte dht11_in;
byte i;
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);
for(i=0;i<5;i++)
dht11_dat[i]=read_dht11_dat();
DDRC|=_BV(DHT11_PIN);
PORTC|=_BV(DHT11_PIN);
byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];
if(dht11_dat[4]!=dht11_check_sum)
{
Serial.println("DHT11 checksum error");
}
Serial.print("Current humdity= ");
Serial.print(dht11_dat[0],DEC);
Serial.print(".");
Serial.print(dht11_dat[1],DEC);
Serial.print("%");
Serial.print("temperature = ");
Serial.print(dht11_dat[2],DEC);
Serial.print(".");
Serial.print(dht11_dat[3],DEC);
Serial.println("C");
if(dht11_dat[0]==25)
digitalWrite(Led,HIGH);
else
digitalWrite(Led,LOW);
if(dht11_dat[0]==28)
digitalWrite(Buzzer,LOW);
else
digitalWrite(Buzzer,HIGH);
delay(2000);
}
但是在窜口反映是这样,dht11 start condition 1 not met
电路连接检测了几遍没有连错
|
|