旋钮¶
Knob 是提供软件 PCNT 的组件,可以用在没有 PCNT 硬件功能的芯片(esp32c2, esp32c3)上。使用 Knob 可以快速适配物理编码器,如 EC11 编码器。
适用的场景¶
适用于每秒脉冲数小于 30 个的低速旋钮计数场景。例如 EC11 编码器。 适用于对脉冲数不要求 100% 准确的场景。
注解
如需精确或快速的脉冲计数,请使用 硬件 PCNT 功能 。硬件 PCNT 支持的芯片 ESP32, ESP32-C6, ESP32-H2, ESP32-S2, ESP32-S3。
旋钮事件¶
每个旋钮拥有下表的 5 个事件:
事件 |
触发条件 |
---|---|
KNOB_LEFT |
左旋 |
KNOB_RIGHT |
右旋 |
KNOB_H_LIM |
计数达到最高限制 |
KNOB_L_LIM |
计数达到最低限制 |
KNOB_ZERO |
计数变成零 |
每个旋钮都可以有 回调 的使用方式:
回调:一个旋钮的每个事件都可以为其注册一个回调函数,产生事件时回调函数将会被调用。这种方式的效率和实时性高,不会丢失事件。
注意
回调函数中不能有 TaskDelay 等阻塞的操作
配置项¶
KNOB_PERIOD_TIME_MS : 扫描周期
KNOB_DEBOUNCE_TICKS : 消抖次数
KNOB_HIGH_LIMIT : 旋钮所能计数的最高数字
KNOB_LOW_LIMIT : 旋钮所能计数的最低数字
应用示例¶
创建旋钮¶
// create knob
knob_config_t cfg = {
.default_direction =0,
.gpio_encoder_a = GPIO_KNOB_A,
.gpio_encoder_b = GPIO_KNOB_B,
};
s_knob = iot_knob_create(&cfg);
if(NULL == s_knob) {
ESP_LOGE(TAG, "knob create failed");
}
注册回调函数¶
static void _knob_left_cb(void *arg, void *data)
{
ESP_LOGI(TAG, "KONB: KONB_LEFT,count_value:%"PRId32"",iot_knob_get_count_value((button_handle_t)arg));
}
iot_knob_register_cb(s_knob, KNOB_LEFT, _knob_left_cb, NULL);
API Reference¶
Header File¶
Functions¶
-
knob_handle_t
iot_knob_create
(const knob_config_t *config)¶ create a knob
- Return
A handle to the created knob
- Parameters
config
: pointer of knob configuration
-
esp_err_t
iot_knob_delete
(knob_handle_t knob_handle)¶ Delete a knob.
- Return
ESP_OK Success
ESP_FAIL Failure
- Parameters
knob_handle
: A knob handle to delete
-
esp_err_t
iot_knob_register_cb
(knob_handle_t knob_handle, knob_event_t event, knob_cb_t cb, void *usr_data)¶ Register the knob event callback function.
- Return
ESP_OK Success
ESP_FAIL Failure
- Parameters
knob_handle
: A knob handle to registerevent
: Knob eventcb
: Callback functionusr_data
: user data
-
esp_err_t
iot_knob_unregister_cb
(knob_handle_t knob_handle, knob_event_t event)¶ Unregister the knob event callback function.
- Return
ESP_OK Success
ESP_FAIL Failure
- Parameters
knob_handle
: A knob handle to registerevent
: Knob event
-
knob_event_t
iot_knob_get_event
(knob_handle_t knob_handle)¶ Get knob event.
- Return
knob_event_t Knob event
- Parameters
knob_handle
: A knob handle to register
-
int
iot_knob_get_count_value
(knob_handle_t knob_handle)¶ Get knob count value.
- Return
int count_value
- Parameters
knob_handle
: A knob handle to register
-
esp_err_t
iot_knob_clear_count_value
(knob_handle_t knob_handle)¶ Clear knob cout value to zero.
- Return
ESP_OK Success
ESP_FAIL Failure
- Parameters
knob_handle
: A knob handle to register
Structures¶
-
struct
knob_config_t
¶ Knob config.
Type Definitions¶
-
typedef void (*
knob_cb_t
)(void *, void *)¶
-
typedef void *
knob_handle_t
¶