Russian Arabic English French German Hungarian Japanese Romanian Turkish Ukrainian

Пример №4. Датчик температуры и влажности DHT11

 

//KY015 DHT11 Датчик температуры и влажности

int DHpin = 8;

byte dat [5];

byte read_data () {

  byte data;

  for (int i = 0; i < 8; i ++) {

    if (digitalRead (DHpin) == LOW) {

      while (digitalRead (DHpin) == LOW); // wait for 50us

      delayMicroseconds (30); // определяет продолжительность 1 для определения значения "0" или "1"

      if (digitalRead (DHpin) == HIGH)

        data |= (1 << (7-i)); // передний фронт

      while (digitalRead (DHpin) == HIGH); //данные '1 ', ждем следующую 1

     }

  }

return data;

}

 

void start_test () {

  digitalWrite (DHpin, LOW); // прием старт сигнала

  delay (30); // ждем пока DHT11 найдет старт сигнал

 

  digitalWrite (DHpin, HIGH);

  delayMicroseconds (40); // Ждем ответ DHT11

 

  pinMode (DHpin, INPUT);

  while (digitalRead (DHpin) == HIGH);

  delayMicroseconds (80); // DHT11 ответ

  if (digitalRead (DHpin) == LOW);

  delayMicroseconds (80); // DHT11 80us

 

  for (int i = 0; i < 4; i ++) // прием данные температуры и влажности. Четность не учитывается.

    dat[i] = read_data ();

 

  pinMode (DHpin, OUTPUT);

  digitalWrite (DHpin, HIGH); // прием данных, ждем следующий Старт сигнал

}

 

void setup () {

  Serial.begin (9600);

  pinMode (DHpin, OUTPUT);

}

 

void loop () {

  start_test ();

  Serial.print ("Current humdity =");

  Serial.print (dat [0], DEC); // выводим на монитор целую часть значения влажности

  Serial.print ('.');

  Serial.print (dat [1], DEC); // выводим на монитор дробную часть значения влажности

  Serial.println ('%');

  Serial.print ("Current temperature =");

  Serial.print (dat [2], DEC); //выводим на монитор целую часть значения температуры

  Serial.print ('.');

  Serial.print (dat [3], DEC); // выводим на монитор дробную часть значения температуры

  Serial.println ('C');

  delay (700);

}

Рейтинг@Mail.ru Яндекс.Метрика