2012-08-08 2 views
0

Я купил этот датчик:Что такое 1-проводная шина MaxDetect?

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

и выход «MaxDetect 1-проводная шина», что это значит и как его использовать? Я попытался подключить его к arduino и запрограммировать его, но он не работает должным образом, я получаю данные 1 бит постоянно. Я думаю, мой код неправильный. Нужно ли использовать библиотеку Wire-1 для arduino?

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 "); 


    } 



    } 
+0

«это не работает правильно» не очень хорошее описание проблемы. Чего вы ожидаете? Что на самом деле происходит? –

+0

Датчик использует 1-Wire, который я действительно не знаю, как программировать. Я попробовал написать программу, чтобы получить от нее несколько бит, но она всегда дает мне 1 бит из 40. – EEstud

ответ

1

Вы должны постоянно оставлять выступы VCC (контакт 1) высоко. Фактически, в идеале, он должен быть подключен к источнику питания. Это данные контакт (контакт 2), который вы должны тянуть высоко и низко, чтобы связываться с датчиком, и это данные , которые вы должны читать. Вам нужно будет переключить контакт данных между режимами ввода и вывода. Убедитесь, что на выводе данных имеется нагрузочный резистор, потому что датчик может только потянуть его.

0

1-проводная шина MaxDetect специально разработана компанией MaxDetect Technology Co., Ltd., она отличается от 1-проводной шины Maxim/Dallas, поэтому она несовместима с 1-проводной шиной Dallas.

Вы можете посмотреть на это:

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

С наилучшими пожеланиями.

Смежные вопросы