From ebff80e119c3de411d8ba46e8c08cdb065a21234 Mon Sep 17 00:00:00 2001 From: Arti Zirk Date: Wed, 7 Jul 2021 23:37:56 +0300 Subject: [PATCH] works better --- main.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/main.c b/main.c index 76ab61c..997ec80 100644 --- a/main.c +++ b/main.c @@ -123,36 +123,40 @@ void tim3_isr(void) // And make the GPIO input so that we can wait for response gpio_set(DHT_PORT, DHT_PIN); - gpio_set_mode(DHT_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, DHT_PIN); + gpio_set_mode(DHT_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, DHT_PIN); // setup timer to wait for start response from dht11 - //timer_ic_set_polarity(TIM3, TIM_IC3, TIM_IC_FALLING);// TIM_IC_RISING - timer_ic_set_polarity(TIM3, TIM_IC3, TIM_IC_RISING);// TIM_IC_RISING - timer_ic_enable(TIM3, TIM_IC3); + timer_ic_set_polarity(TIM3, TIM_IC3, TIM_IC_FALLING); + //timer_ic_set_polarity(TIM3, TIM_IC3, TIM_IC_RISING);// TIM_IC_RISING timer_clear_flag(TIM3, TIM_SR_CC3IF); + timer_ic_enable(TIM3, TIM_IC3); //puts("waiting for response"); } - gpio_toggle(GPIOB, GPIO2); + //gpio_toggle(GPIOB, GPIO2); } else if (timer_get_flag(TIM3, TIM_SR_CC3IF)) // PB0 changed value { + gpio_toggle(GPIOB, GPIO2); + //puts("fall"); if (g_dht11_state == DHT11_END_START) { g_dht11_state = DHT11_RESPONSE; - gpio_toggle(GPIOB, GPIO2); + //gpio_toggle(GPIOB, GPIO2); //timer_ic_disable(TIM3, TIM_IC3); //timer_clear_flag(TIM3, TIM_SR_CC3IF); //timer_ic_set_polarity(TIM3, TIM_IC3, TIM_IC_FALLING);// TIM_IC_RISING - g_dht_vals[g_dht_i++] = TIM_CCR3(TIM3); // store captured high time value + g_dht_vals[g_dht_i++] = TIM_CCR3(TIM3); // store captured high time value //timer_ic_enable(TIM3, TIM_IC3); - gpio_toggle(GPIOB, GPIO2); + //gpio_toggle(GPIOB, GPIO2); } else { - gpio_toggle(GPIOB, GPIO2); + //gpio_toggle(GPIOB, GPIO2); g_dht11_state = DHT11_DATA; g_dht_vals[g_dht_i] = TIM_CCR3(TIM3) - g_dht_vals[g_dht_i-1]; // store length from last sample g_dht_i++; - gpio_toggle(GPIOB, GPIO2); + //gpio_toggle(GPIOB, GPIO2); } + timer_clear_flag(TIM3, TIM_SR_CC3IF); + gpio_toggle(GPIOB, GPIO2); // if (timer_get_flag(TIM3, TIM_SR_CC3OF)) // { @@ -166,6 +170,7 @@ void tim3_isr(void) static void dht_start(void) { timer_disable_counter(TIM3); + timer_ic_disable(TIM3, TIM_IC3); g_dht11_state = DHT11_BEGIN_START; g_dht_i = 0; @@ -173,6 +178,8 @@ static void dht_start(void) timer_set_counter(TIM3, 0); timer_set_oc_value(TIM3, TIM_OC1, 1000*20); // 20ms timer_clear_flag(TIM3, TIM_SR_CC1IF); + timer_clear_flag(TIM3, TIM_SR_CC3IF); + // Do DHT11_BEGIN_START aka drive DATA Low gpio_set_mode(DHT_PORT, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, DHT_PIN);