2

ここでこの湿度/温度センサーを購入しました: https://www.sparkfun.com/products/10167

そして、私はここでデータシードを読みました: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf

C++ クラスの基本的なプログラミングを使用しようとしましたが、何が問題なのかわかりません。センサーからのデータ入力が何も送信していないようです。データシートでは、5V の入力信号 (20 ~ 40 ミリ秒) を送信し、センサーの応答を待って受信ビットを保存する必要があります。センサー データは常に 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;
    }
  }
}
4

1 に答える 1

5

データシートには次のように書かれています。

MCUはローデータバスをプルし、RHT03がMCUの信​​号を検出できるようにするには、このプロセスが少なくとも1〜10msを超える必要があります。

あなたのコードは言う;

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

digitalWrite(SensorVccPin, HIGH);  

10msではなく10µs遅延しているようです。

于 2012-08-05T21:07:21.697 に答える