编码器
使用编码器,您可以执行以下操作:
- 按下它的按钮
- 长按它的按钮
- 转左
- 右转
简而言之,编码器输入设备的工作方式如下:
- 通过转动编码
器,您可以专注于下一个/上一个对象。 - 当您在一个简单的对象(如按钮)上按下编码器时,它将被点击。
如果您按下复杂对象(如列表、消息框等)上的编码器,该对象将进入编辑模式,您可以通过转动编码器在对象内部导航。 - 要退出编辑模式,请长按按钮。
- 要使用编码器(类似于键盘),应将对象添加到组中。
indev_drv.type = LV_INDEV_TYPE_ENCODER;
indev_drv.read_cb = encoder_read;
...
void encoder_read(lv_indev_drv_t * drv, lv_indev_data_t*data){
data->enc_diff = enc_get_new_moves();
if(enc_pressed()) data->state = LV_INDEV_STATE_PRESSED;
else data->state = LV_INDEV_STATE_RELEASED;
}
使用带有编码器逻辑的按钮
除了标准编码器行为之外,您还可以利用其逻辑来使用按钮导航(聚焦)和编辑小部件。如果您只有几个按钮可用,或者您想使用除编码轮之外的其他按钮,这将特别方便。
您需要有 3 个按钮可用:
- LV_KEY_ENTER 将模拟按下或按下编码器按钮
- LV_KEY_LEFT 将模拟向左转动编码器
- LV_KEY_RIGHT 将模拟向右旋转编码器
其他键将传递给聚焦的小部件
如果您按住这些键,它将模拟编码器前进,其周期在 中指定
indev_drv.type = LV_INDEV_TYPE_ENCODER;
indev_drv.read_cb = encoder_with_keys_read;
...
void encoder_with_keys_read(lv_indev_drv_t * drv, lv_indev_data_t*data){
data->key = last_key(); /*Get the last pressed or released key*/
/* use LV_KEY_ENTER for encoder press */
if(key_pressed()) data->state = LV_INDEV_STATE_PRESSED;
else {
data->state = LV_INDEV_STATE_RELEASED;
/* Optionally you can also use enc_diff, if you have encoder*/
data->enc_diff = enc_get_new_moves();
}
}