Что такое однопроводная шина MaxDetect?
Я купил этот датчик:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf
и вывод "MaxDetect 1-wire bus", что это значит и как его использовать? Я пытался подключить его к 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 ");
}
}
2 ответа
Вы должны оставить контакт VCC (контакт 1) высоким в течение всего времени. На самом деле, в идеале, он должен быть подключен к источнику питания. Это контакт данных (контакт 2), который вы должны тянуть высоко и низко для связи с датчиком, и это контакт данных, который вы должны читать. Вам придется переключать контакт данных между режимами ввода и вывода. Убедитесь, что на выводе данных есть подтягивающий резистор, потому что датчик может тянуть его только низко.
1-проводная шина MaxDetect специально разработана MaxDetect Technology Co., Ltd., она отличается от 1-проводной шины Maxim / Dallas, поэтому она несовместима с 1-проводной шиной Dallas.
Вы можете взглянуть на это:
http://tienda.tdrobotica.co/download/RHT03_programa.pdf
С наилучшими пожеланиями.