diff --git a/version.txt b/version.txt index e3a4f19..cc6612c 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -2.2.0 \ No newline at end of file +2.3.0 \ No newline at end of file diff --git a/zh_encoder.c b/zh_encoder.c index 329e408..3339ee6 100644 --- a/zh_encoder.c +++ b/zh_encoder.c @@ -321,6 +321,7 @@ static void IRAM_ATTR _zh_encoder_isr_processing_task(void *pvParameter) { zh_encoder_handle_t *encoder_handle = (zh_encoder_handle_t *)pvParameter; int pcnt_count = {0}; + bool is_value_changed = false; while (xQueueReceive(_queue_handle, &pcnt_count, portMAX_DELAY) == pdTRUE) { switch (pcnt_count) @@ -333,6 +334,7 @@ static void IRAM_ATTR _zh_encoder_isr_processing_task(void *pvParameter) { encoder_handle->encoder_position = encoder_handle->encoder_max_value; } + is_value_changed = true; } break; case ZH_ENCODER_DIRECTION_CCW: @@ -343,19 +345,24 @@ static void IRAM_ATTR _zh_encoder_isr_processing_task(void *pvParameter) { encoder_handle->encoder_position = encoder_handle->encoder_min_value; } + is_value_changed = true; } break; default: break; } - zh_encoder_event_on_isr_t encoder_data = {0}; - encoder_data.encoder_number = encoder_handle->encoder_number; - encoder_data.encoder_position = encoder_handle->encoder_position; - esp_err_t err = esp_event_post(ZH_ENCODER, ZH_ENCODER_EVENT, &encoder_data, sizeof(zh_encoder_event_on_isr_t), 1000 / portTICK_PERIOD_MS); - if (err != ESP_OK) + if (is_value_changed == true) { - ++_stats.event_post_error; - ZH_LOGE("Encoder isr processing failed. Failed to post interrupt event.", err); + is_value_changed = false; + zh_encoder_event_on_isr_t encoder_data = {0}; + encoder_data.encoder_number = encoder_handle->encoder_number; + encoder_data.encoder_position = encoder_handle->encoder_position; + esp_err_t err = esp_event_post(ZH_ENCODER, ZH_ENCODER_EVENT, &encoder_data, sizeof(zh_encoder_event_on_isr_t), 1000 / portTICK_PERIOD_MS); + if (err != ESP_OK) + { + ++_stats.event_post_error; + ZH_LOGE("Encoder isr processing failed. Failed to post interrupt event.", err); + } } _stats.min_stack_size = (uint32_t)uxTaskGetStackHighWaterMark(NULL); }