From 8394b461560f4b08b6fd9c0a3c11c598c9b1e912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9D=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2?= Date: Wed, 27 Mar 2024 16:57:24 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20DHT=5F22.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DHT_22.cpp | 149 ++++++++++++++++++++++++++++------------------------- 1 file changed, 79 insertions(+), 70 deletions(-) diff --git a/DHT_22.cpp b/DHT_22.cpp index 94917fb..89d1eaf 100644 --- a/DHT_22.cpp +++ b/DHT_22.cpp @@ -1,8 +1,6 @@ -#include "DHT_22.h" +#include "dht.h" #include -//volatile unsigned char interrupt_flag; -int dht_save_time_id; // Флаг прерывания volatile unsigned char interrupt_flag = 1; bool dht_done = false; @@ -14,106 +12,118 @@ float temperature, humidity; float last_temperature, last_humidity; unsigned char data[5]; -uint8_t dt[48]; -uint8_t dtcnt; +uint16_t dt[48]; +int dtcnt; bool dht_check_act = false; // Таймер для задержки volatile unsigned int timer_counter = 0; int dht_en_timer = 0; +//---------------------------------------------------------------------------------------------------- +// Установка таймера +void setup_timer(void) +{ + // Настраиваем таймер 1 в режиме CTC + TCCR0B = 0b00000101; + // Устанавливаем значение сравнения для частоты 1 Гц + OCR0A = 250; + // Разрешаем прерывание сравнения A + TIMSK0 |= (1 << OCIE0A); + + // Настраиваем таймер 1 в режиме CTC + TCCR1A = 0b00000000; + TCCR1B = 0b00000000; + // Устанавливаем значение сравнения для частоты 1 Гц + OCR1A = 250; + // Разрешаем прерывание сравнения A + TIMSK1 = 0b00100010; +} //---------------------------------------------------------------------------------------------------- bool dht_check( void ) { - bool valid_data = false; - 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; + TCNT1 = 0; // + OCR1A = 288; // + TCCR1A = 0b00000000; // TIMSK1 = 0b00000010; TCCR1B = 0b00000101; } - +// Настройка таймера для захвата времени таймером T1 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; + DHT_PORT |= (1 << DHT_BIT); // Пин в 1цу + DHT_DDR &= ~(1 << DHT_BIT); // Пин порта на вход + TCNT1 = 0; // Сброс значения счётчика таймера + OCR1A = 10000; + TCCR1A = 0b00000000; // + TCCR1B = 0b10000001; // 1< 3 ) - { - dt[dtcnt] = ICR1<<8; - dtcnt++; - if ( ICR1<1500 ) - { - data[dNum] &= ~(1<