art-pi lvgl 添加触摸事件部分代码

文档说明

该文章仅供学习参考使用,非官方使用说明文档。

littlevgl2rtt 介绍

上一篇文章(art-pi添加lvgl支持包)简单描述了如何在 art-pi 快速适配 lvgl,其实这篇文章只是笔者的学习笔记,仅供参考。为了后续开发方便,这里接着分析一下如何将触摸屏和 lvgl 结合,来实现触摸事件操作。

littlevgl2rtt 软件包是为了方便开发者快速在rt-thread 中适配 lvgl开源图形库使用的,查看这个软件包的源码,发现主要是多了两个文件,即 littlevgl2rtt.clittlevgl2rtt.h

查看 littlevgl2rtt.h 发现,这个软件包目前对外只提供三个接口,其中 littlevgl2rtt_init 用来初始化 lvgl 使用;littlevgl2rtt_deinit目前暂无实际用处;而 littlevgl2rtt_send_input_event 为向 lvgl 发送事件的接口,供外部事件触发调用。

rt_err_t littlevgl2rtt_init(const char *name);
void littlevgl2rtt_send_input_event(rt_int16_t x, rt_int16_t y, rt_uint8_t state);
void littlevgl2rtt_deinit(void);

有了 littlevgl2rtt_send_input_event,这个接口,我们就可以将触摸屏的触摸事件和 lvgl 关联起来了。

工程修改

在上面文章中,已经可以通过添加 gt9147_sample.c 这个示例文件来获取到触摸屏的坐标信息了,通过初始化时候的打印信息发现,这个触摸屏的坐标范围为(0,0)~(480,480),支持5点触控。

 \ | /
- RT -     Thread Operating System/ | \     4.0.3 build Nov 25 20202006 - 2020 Copyright by rt-thread team
[I/touch] rt_touch init success
[I/gt9147] touch device gt9147 init success[D/drv.lcd] LTDC init success
id = 9 1 4 7
range_x = 480
range_y = 480
point_num = 5

通过触摸屏幕操作,还可以获取到触摸的x轴和y轴坐标信息,触摸时长和触摸的宽度等参数信息。

这里就简单接着上次的工程,在 gt9147_sample.c 加入 littlevgl2rtt_send_input_event ,用来向 lvgl 传递事件。

修改 gt9147_entry 函数,修改后的函数实现如下。

// 在 gt9147_sample.c 文件头部加入头文件
#include "littlevgl2rtt.h"#define TOUCH_LCD_WIDTH  800
#define TOUCH_LCD_HEIGHT 480
#define TOUCH_RANGE_X    480.0static void gt9147_entry(void *parameter)
{uint16_t x;uint16_t y;rt_device_control(dev, RT_TOUCH_CTRL_GET_INFO, &info);read_data = (struct rt_touch_data *)rt_malloc(sizeof(struct rt_touch_data) * info.point_num);while (1){rt_sem_take(gt9147_sem, RT_WAITING_FOREVER);if (rt_device_read(dev, 0, read_data, info.point_num) == info.point_num){for (rt_uint8_t i = 0; i < info.point_num; i++){//坐标转换x= TOUCH_LCD_WIDTH-(uint16_t)(read_data[i].x_coordinate*TOUCH_LCD_WIDTH/TOUCH_RANGE_X);y= TOUCH_LCD_HEIGHT-read_data[i].y_coordinate;littlevgl2rtt_send_input_event(x,y,read_data[i].event);if (read_data[i].event == RT_TOUCH_EVENT_DOWN || read_data[i].event == RT_TOUCH_EVENT_MOVE){
//                    rt_kprintf("%d %d %d %d %d\n", read_data[i].track_id,
//                               read_data[i].x_coordinate,
//                               read_data[i].y_coordinate,
//                               read_data[i].timestamp,
//                               read_data[i].width);rt_kprintf("(%d,%d)\n",x,y);}}}rt_device_control(dev, RT_TOUCH_CTRL_ENABLE_INT, RT_NULL);}
}

编译下载

修改完成后,重新编译工程,并下载到 ART-PI中,测试,通过触摸屏幕,发现串口已经可以打印正确的坐标信息,lvgl 也可以正常响应触摸操作了 。

 \ | /
- RT -     Thread Operating System/ | \     4.0.3 build Nov 25 20202006 - 2020 Copyright by rt-thread team
[I/touch] rt_touch init success
[I/gt9147] touch device gt9147 init success[D/drv.lcd] LTDC init success
id = 9 1 4 7
range_x = 480
range_y = 480
point_num = 5
[littlevgl2rtt] Welcome to the littlevgl2rtt.
[littlevgl2rtt] You can find latest ver from https://github.com/liu2guang/LittlevGL2RTT.
msh />
msh />
msh />
msh />
msh />
msh />(165,368)
(165,368)
(165,368)
(165,368)
(182,363)

测试效果

经过几次简单的测试,这种方式已经可以正常的实现触摸控制lvgl了,但是如果就到此为止了,这代码还是有bug的,经过笔者的测试,发现过了几分钟之后再次触摸,就没有反应了,通过串口查看后台的线程状态,touch的线程被挂起了,再也恢复不回来了。暂时还不知道什么原因,留作后续解决吧。

msh />list_thread
thread   pri  status      sp     stack size max used left tick  error
-------- ---  ------- ---------- ----------  ------  ---------- ---
lv-task    5  suspend 0x000000b4 0x00002800    21%   0x00000006 000
touch     25  suspend 0x00000090 0x00000400    63%   0x0000000a 000
tshell    20  running 0x00000268 0x00001000    15%   0x0000000a 000
tidle0    31  ready   0x00000060 0x00000100    71%   0x0000001b 000
timer      4  suspend 0x0000007c 0x00000200    24%   0x00000008 000
main      10  suspend 0x00000148 0x00000800    36%   0x0000000a 000

art-pi lvgl添加触摸事件部分代码相关推荐

  1. 移动端京东添加触摸事件轮播图

    /*轮播图*/ function bannerEffect(){/*1.设置修改轮播图的页面结构* a.在开始位置添加原始的最后一张图片* b.在结束位置添加原始的第一张图片*//*1.1.获取轮播图 ...

  2. cocos微信小游戏开发-http请求-使用微信云函数-toast-loading-动态加载图片-添加触摸事件-微信分享-label点击事件-背景音乐音效-程序活动状态判断-性能优化

    cocos开发微信小游戏相关-<益智推箱> 扫码查看功能,有需要可直接提问 Cocos Creator 3.4 用户手册 cocos creator基本操作 微信开发文档|云函数 1. h ...

  3. Unity碰撞体不碰撞以及代码添加EventTrigger事件

    文章目录 前言 一.同类型物体的碰撞体不发生碰撞 二.代码控制EventTrigger添加事件 总结 前言 本文所记内容有两点: 一.同类型物体的碰撞体不发生碰撞. 二.代码控制EventTrigge ...

  4. iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

    -- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...

  5. iOS事件全面解析 (触摸事件、手势识别、摇晃事件、耳机线控)

    -- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...

  6. iOS:触摸事件、手势识别、摇晃事件、耳机线控

    概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件. ...

  7. 触摸事件、手势识别、摇晃事件、耳机线控

    概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件. ...

  8. 转载大神IOS开发系列【9】--触摸事件、手势识别、摇晃事件、耳机线控

    转载自:http://www.cnblogs.com/kenshincui/p/3950646.html 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以 ...

  9. 常用代码之三:jQuery为按钮绑定事件的代码

    如题,比如有一个按钮:<input type='button' class='btn-text' id ='addHtml' value='新增' /> 为它添加onclick事件的代码: ...

最新文章

  1. 微信tocken后台后台保存方法
  2. 勒索病毒一周记:它让我们得到了什么经验教训?
  3. Jfreechart柱形图设置数值显示
  4. 京东白条要上征信了!你用还是不用
  5. HTML5教程之-文件拖拽功能实现
  6. 下拉框根据输入文字自动选择和输入提示
  7. idea服务器如何手动加载项目,idea导入本地idea的web项目(服务器用的是tomcat)
  8. C#:常用字符整理自用
  9. 极客大学产品经理训练营 产品思维和产品意识 作业2
  10. linux 用命令安装软件,Linux安装软件的三种常用命令
  11. python nodemcu_python开发nodemcu2(跑马灯实验)
  12. 提高开发效率的 Chrome 开发者工具高端使用技巧(一)
  13. 图卷积神经网络与标签传播的区别
  14. 计算机绘画小房子教案,中班绘画《房子》教案
  15. 16 《万用之物:盐的故事》-豆瓣评分7.5
  16. 基于CUDA的并行lammps编译及测试
  17. 计算机强制关机后无法正常启动,win10系统强制关机后无法正常启动了如何解决...
  18. Vant Webapp步骤表单
  19. Oracle存储过程打印输出错误信息、行号,快速排查
  20. 2015年第六届蓝桥杯B组(C/C++)预赛题目及个人答案

热门文章

  1. 塞尔达传说-荒野之息 体验复盘
  2. As I Please--PartⅠ
  3. 静态IP和动态IP有什么区别?
  4. Android自定义控件之拓展TextView(ExpandTextView)
  5. Python爬虫---爬取腾讯动漫全站漫画
  6. transformer--ViT
  7. 怎么把两个音频合成一个?
  8. css怎么画小方块,CSS3 小方块矩阵变换动画
  9. 计算机内部信号表现形式,信号是数据在传输过程中的什么的表现形式
  10. apmserv5.2.6 mysql启动失败_APMServ5.2.6win10系统Apache、MySQL5.1启动失败解决办法