diff --git a/DHT_22.h b/DHT_22.h index 8e575c1..066a85b 100644 --- a/DHT_22.h +++ b/DHT_22.h @@ -1,9 +1,56 @@ -#ifndef DHT_22_h -#define DHT_22_h -#include - -void DHT22_setup(); -int get_DHT_value_temperature(); -int get_DHT_value_humidity(); - -#endif /*DHT_22_h*/ \ No newline at end of file + +// Функция чтения данных с DHT +unsigned int dht_check() +{ + if ( dht_check_act ) + { + dht_check_act = false; +//-----[ 01. Старт, выжидание 18мс ]----- + if ( interrupt_flag == 1) + { + // Запускаем таймер на 18 мс посылка start на dht + Serial.print("Start DHT -> "); + + DHT_DDR |= (1 << DHT_BIT); // Пин как выход + DHT_PORT &= ~(1 << DHT_BIT); // Выход ноль + TCNT1 = 0; + OCR1A = 288; + TCCR1A = 0b00000000; + TIMSK1 = 0b00000010; + TCCR1B = 0b00000101; + } + + if ( interrupt_flag == 2) + { + DHT_PORT |= (1 << DHT_BIT); + DHT_DDR &= ~(1 << DHT_BIT); + dht_save_time_id = 0; + TCNT1 = 0; + OCR1A = 10000; + TCCR1A = 0b00000000; + TCCR1B = 0b10000001; + TIFR1 = 0b00000000; + TIMSK1 = 0b00100010; + dPos = 7; + dNum = 0; + dht_last_state = false; + } + // Вычисляем температуру и влажность + if ( dht_done ) + { + dht_done = false; + temperature = (data[3] * 0.1) + ((data[2] & 0b01111111) * 25.6); + if (data[2] & 0b10000000) temperature *= -1; + humidity = (data[1] * 0.1) + (data[0] * 25.6); + + // Выводим данные на UART + + Serial.print(humidity); + Serial.print("% "); + Serial.print(temperature); + Serial.println("C"); + + } + + } +} \ No newline at end of file