我的arduino传感器程序出了什么问题?

时间:2012-08-05 20:56:27

标签: c++ arduino

我在这里买了这个腐蚀/温度传感器: 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;
    }
  }
}

1 个答案:

答案 0 :(得分:5)

数据表说;

  

MCU将拉低数据总线,此过程必须至少超出   1~10ms确保RHT03能够检测到MCU的信号

你的代码说;

digitalWrite(SensorVccPin, LOW);
delayMicroseconds(10);

digitalWrite(SensorVccPin, HIGH);  

你似乎推迟了10μs而不是10ms。