我在这里买了这个humitid /温度传感器:https://www.sparkfun.com/products/10167
我在这里阅读了Datasheed:http: //dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf
我尝试从我的c ++类中使用一些基础编程,但我不知道是什么问题?看起来传感器的数据输入没有发送任何东西.在数据表上,我需要发送一个5V的输入信号(20-40ms),然后等待传感器的响应并存储输入的Bits.传感器数据始终为0.我不明白为什么.
/* Code for the RHT03 Sensor 8/5/12 */
int i=0;
int SensorVccPin = 13;
int datapin = 7;
int bitcheck1;
int bitcheck2;
int temp[16];
int humidity[16];
int sensorcheck[8];
void setup()
{
pinMode(SensorVccPin, OUTPUT);
pinMode(datapin, INPUT);
}
void loop()
{
// This is the STEP #1
digitalWrite(SensorVccPin, LOW);
delayMicroseconds(10);
digitalWrite(SensorVccPin, HIGH);
delayMicroseconds(30);
digitalWrite(SensorVccPin, LOW);
/* NEED TO DO BIG NESTED IF STATEMENTS!!!!*/
digitalRead(datapin);
if (digitalRead(datapin) == LOW) // FIRST BIG IF
while(digitalRead(datapin) == LOW)
{
delayMicroseconds(2);
}
while(digitalRead(datapin) == HIGH)
{
delayMicroseconds(2);
}
// STEP #2
for (int i = 0; i<16; i++)
{
while(digitalRead(datapin) == LOW)
{
delayMicroseconds(2);
}
delayMicroseconds(10);
bitcheck1 = digitalRead(datapin); // maybe store as an array
delayMicroseconds(17); // 50 sec pause // 27us = 0 bit, 70us is 1 bit data
delayMicroseconds(15);
bitcheck2 = digitalRead(datapin);
if (bitcheck1==bitcheck2)
{
temp[i]=1;
delayMicroseconds(28);
} else {
temp[i]=0;
}
}
for (int i = 0; i<16; i++)
{
while(digitalRead(datapin) == LOW)
{
delayMicroseconds(2);
}
delayMicroseconds(10);
bitcheck1 = digitalRead(datapin); // maybe store as an array
delayMicroseconds(17); // 50 sec pause // 27us = 0 bit, 70us is 1 bit data
delayMicroseconds(15);
bitcheck2 = digitalRead(datapin);
if (bitcheck1==bitcheck2)
{
humidity[i]=1;
delayMicroseconds(28);
} else {
humidity[i]=0;
}
}
for (int i = 0; i<8; i++)
{
while(digitalRead(datapin) == LOW)
{
delayMicroseconds(2);
}
delayMicroseconds(10);
bitcheck1 = digitalRead(datapin); // maybe store as an array
delayMicroseconds(17); // 50 sec pause // 27us = 0 bit, 70us is 1 bit data
delayMicroseconds(15);
bitcheck2 = digitalRead(datapin);
if (bitcheck1==bitcheck2)
{
sensorcheck[i]=1;
delayMicroseconds(28);
} else {
sensorcheck[i]=0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
数据表说;
MCU将拉低数据总线,此过程必须至少超过1~10ms才能确保RHT03能够检测到MCU的信号
你的代码说;
digitalWrite(SensorVccPin, LOW);
delayMicroseconds(10);
digitalWrite(SensorVccPin, HIGH);
Run Code Online (Sandbox Code Playgroud)
你似乎在推迟10μs而不是10ms.
| 归档时间: |
|
| 查看次数: |
996 次 |
| 最近记录: |