0

私はこのセンサーを購入しました:

http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf

出力は「MaxDetect1-wirebus」ですが、それはどういう意味で、どのように使用するのですか?arduinoに接続してプログラムしようとしましたが、正常に動作せず、常に1ビットのデータを受信して​​います。私のコードは間違っていると思います。arduinoにWire-1ライブラリを使用する必要がありますか?

int SensorVccPin = 8; 
int datapin = 6;
int bitcheck1;
int bitcheck2;
int temp[16];
int humidity[16];
int sensorcheck[8];

void setup()
{
  pinMode(SensorVccPin, OUTPUT);  
    pinMode(datapin, INPUT);
    Serial.begin(9600); 
}

void loop()
{
    // This is the STEP #1
    digitalWrite(SensorVccPin, HIGH);  
  delay(5000); 

    digitalWrite(SensorVccPin, LOW);
     delay(15);


  digitalWrite(SensorVccPin, HIGH);  

  delayMicroseconds(30);   

  digitalWrite(SensorVccPin, LOW);  



while(digitalRead(datapin) == 0){

      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;

  }



  delayMicroseconds(80); 





  for(int i=0; i<16; i++)
  {
   Serial.print(temp[i]); 

  }
     Serial.print("  temp  "); 


  for(int i=0; i<16; i++)
  {
   Serial.print(humidity[i]); 

  }
       Serial.print("  hum  "); 

  for(int i=0; i<8; i++)
  {
   Serial.print(sensorcheck[i]); 

  }
       Serial.print(" check   "); 


    }



  }
4

2 に答える 2

1

VCCピン(ピン1)は常にハイのままにしておく必要があります。実際、理想的には、電源に接続する必要があります。センサーと通信するためにハイとローを引く必要があるのはデータピン(ピン2)であり、読み取る必要があるのはデータピンです。データピンを入力モードと出力モードの間で切り替える必要があります。センサーはデータピンをローにしかプルできないため、データピンにプルアップ抵抗があることを確認してください。

于 2012-08-08T03:08:08.263 に答える
0

MaxDetect 1-wireバスは、MaxDetect Technology Co.、Ltd.によって特別に設計されたもので、Maxim / Dallas 1-Wireバスとは異なるため、Dallas1-Wireバスとは互換性がありません。

あなたはこれを見ることができます:

http://tienda.tdrobotica.co/download/RHT03_programa.pdf

よろしくお願いします。

于 2013-04-25T16:54:27.960 に答える