feat: added encoder status (increased / reduced)
This commit is contained in:
1 parent
85b5a8998d
commit
ae27426dd0
5 files changed
+12
-6
No files matched your search
@@ -82,11 +82,11 @@ void zh_encoder_event_handler(void *arg, esp_event_base_t event_base, int32_t ev
|
|||||||
{
|
{
|
||||||
case ZH_BUTTON_EVENT:
|
case ZH_BUTTON_EVENT:
|
||||||
zh_encoder_button_event_on_isr_t *button_event = event_data;
|
zh_encoder_button_event_on_isr_t *button_event = event_data;
|
||||||
printf("Encoder number %d button %s.\n", button_event->encoder_number, (button_event->button_status == 1) ? "released" : "pressed");
|
printf("Encoder number %d button was %s.\n", button_event->encoder_number, (button_event->button_status == true) ? "released" : "pressed");
|
||||||
break;
|
break;
|
||||||
case ZH_ENCODER_EVENT:
|
case ZH_ENCODER_EVENT:
|
||||||
zh_encoder_event_on_isr_t *encoder_event = event_data;
|
zh_encoder_event_on_isr_t *encoder_event = event_data;
|
||||||
printf("Encoder number %d position %0.3f.\n", encoder_event->encoder_number, encoder_event->encoder_position);
|
printf("Encoder number %d position %0.3f was %s.\n", encoder_event->encoder_number, encoder_event->encoder_position, (encoder_event->encoder_status == true) ? "increased" : "reduced");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
description: ESP32 ESP-IDF component for rotary encoder
|
description: ESP32 ESP-IDF component for rotary encoder
|
||||||
url: https://github.com/aZholtikov/zh_encoder
|
url: https://github.com/aZholtikov/zh_encoder
|
||||||
version: "3.0.1"
|
version: "3.1.0"
|
||||||
license: "Apache-2.0"
|
license: "Apache-2.0"
|
||||||
maintainers:
|
maintainers:
|
||||||
- "Alexey Zholtikov <alexey.zholtikov@yandex.ru>"
|
- "Alexey Zholtikov <alexey.zholtikov@yandex.ru>"
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "math.h"
|
||||||
|
#include "string.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
#include "driver/pulse_cnt.h"
|
#include "driver/pulse_cnt.h"
|
||||||
@@ -119,6 +121,7 @@ extern "C"
|
|||||||
{
|
{
|
||||||
float encoder_position; /*!< Encoder current position */
|
float encoder_position; /*!< Encoder current position */
|
||||||
uint8_t encoder_number; /*!< Encoder unique number */
|
uint8_t encoder_number; /*!< Encoder unique number */
|
||||||
|
bool encoder_status; /*!< Encoder status (true when position increased, false when position reduced) */
|
||||||
} zh_encoder_event_on_isr_t;
|
} zh_encoder_event_on_isr_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
3.0.1
|
3.1.0
|
||||||
+5
-2
@@ -496,6 +496,7 @@ static void IRAM_ATTR _zh_encoder_isr_processing_task(void *pvParameter)
|
|||||||
while (xQueueReceive(_queue_handle, &encoder_queue, portMAX_DELAY) == pdTRUE)
|
while (xQueueReceive(_queue_handle, &encoder_queue, portMAX_DELAY) == pdTRUE)
|
||||||
{
|
{
|
||||||
bool is_value_changed = false;
|
bool is_value_changed = false;
|
||||||
|
bool encoder_status = false;
|
||||||
zh_encoder_handle_t *encoder_handle = encoder_queue.handle;
|
zh_encoder_handle_t *encoder_handle = encoder_queue.handle;
|
||||||
switch (encoder_queue.watch_point_value)
|
switch (encoder_queue.watch_point_value)
|
||||||
{
|
{
|
||||||
@@ -508,6 +509,7 @@ static void IRAM_ATTR _zh_encoder_isr_processing_task(void *pvParameter)
|
|||||||
encoder_handle->encoder_position = encoder_handle->encoder_max_value;
|
encoder_handle->encoder_position = encoder_handle->encoder_max_value;
|
||||||
}
|
}
|
||||||
is_value_changed = true;
|
is_value_changed = true;
|
||||||
|
encoder_status = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ZH_ENCODER_DIRECTION_CCW:
|
case ZH_ENCODER_DIRECTION_CCW:
|
||||||
@@ -529,11 +531,12 @@ static void IRAM_ATTR _zh_encoder_isr_processing_task(void *pvParameter)
|
|||||||
is_value_changed = false;
|
is_value_changed = false;
|
||||||
zh_encoder_event_on_isr_t encoder_data = {0};
|
zh_encoder_event_on_isr_t encoder_data = {0};
|
||||||
encoder_data.encoder_number = encoder_handle->encoder_number;
|
encoder_data.encoder_number = encoder_handle->encoder_number;
|
||||||
if (encoder_handle->encoder_position < 0 && encoder_handle->encoder_position > -1e-12)
|
if (fabsf(encoder_handle->encoder_position) < 1e-6f)
|
||||||
{
|
{
|
||||||
encoder_handle->encoder_position = 0;
|
memset(&encoder_handle->encoder_position, 0, sizeof(float));
|
||||||
}
|
}
|
||||||
encoder_data.encoder_position = encoder_handle->encoder_position;
|
encoder_data.encoder_position = encoder_handle->encoder_position;
|
||||||
|
encoder_data.encoder_status = encoder_status;
|
||||||
ZH_ERROR_CHECK_CONT(esp_event_post(ZH_ENCODER, ZH_ENCODER_EVENT, &encoder_data, sizeof(zh_encoder_event_on_isr_t), 1000 / portTICK_PERIOD_MS) == ESP_OK, ++_stats.event_post_error, "Encoder isr processing failed. Failed to post interrupt event.");
|
ZH_ERROR_CHECK_CONT(esp_event_post(ZH_ENCODER, ZH_ENCODER_EVENT, &encoder_data, sizeof(zh_encoder_event_on_isr_t), 1000 / portTICK_PERIOD_MS) == ESP_OK, ++_stats.event_post_error, "Encoder isr processing failed. Failed to post interrupt event.");
|
||||||
}
|
}
|
||||||
_stats.min_stack_size = (uint32_t)uxTaskGetStackHighWaterMark(NULL);
|
_stats.min_stack_size = (uint32_t)uxTaskGetStackHighWaterMark(NULL);
|
||||||
|
|||||||
Reference in new issue
Block a user