|
int DHpin=8;
byte dat[5];
byte read_data()
{
byte data;
for(int i=0;i<8;i++)
{
if(digitalRead(DHpin)==LOW)
{
while(digitalRead(DHpin)==LOW);//等待50us
delayMicroseconds(30);//判断高电平的持续时,以判定数据“0”还是"1"
if(digitalRead(DHpin)==HIGH)
data|=(1<<(7-i));//高位在,低位在后
while(digitalRead(DHpin)==HIGH);//数据"1",等待下一位的接收
}
}
return data;
}
void start_test()
{
digitalWrite(DHpin,LOW);//拉低总,发开始信号
delay(30);//延时要大于18ms,以便DHT11能检测到开始信号
digitalWrite(DHpin,HIGH);
delayMicroseconds(40);//等待DHT11响应
pinMode(DHpin,INPUT);
while(digitalRead(DHpin)==HIGH);
delayMicroseconds(80);//DHT11发出响应,拉低总线80us
if(digitalRead(DHpin)==LOW)
delayMicroseconds(80);//DHT11拉高总线80us后开始发送数据
for(int i=0;i<4;i++) //接受温湿度数,校验位不考虑
dat=read_data();
pinMode(DHpin,OUTPUT);
digitalWrite(DHpin,HIGH);//发送完一次数据后释放总线,等待主机的下一次开始信号}}
}
void setup()
{
Serial.begin(9600);
pinMode(DHpin,OUTPUT);
}
void loop()
{
start_test();
Serial.print("Current humdity=");
Serial.print(dat[0],DEC);//显示湿度的整数位
Serial.print(".");
Serial.print(dat[1],DEC);//显示湿度的小数位
Serial.println("%");
Serial.print("Current temperature=");
Serial.print(dat[2],DEC);//显示温度的整数位
Serial.print(".");
Serial.print(dat[3],DEC);//显示温度的小数位
Serial.println("C");
delay(700);
}
怀疑是read_data()函数有问题,但是同学运行该代码也没问题,
也怀疑是板子的问题,换了同学的一块好的DHT11传感器,但插上我的板子还是255
望大佬帮我解决问题
|
|