LVGL-GUI Guider 按键处理

目录

1. 背景

2. 创建GUI guider工程和STM32代码工程

3. 期望目标

4. GUI Guider 增加按键和修改按键event

4.1 Button按键

4.2 Status按键

4.3 Back按键

4.4 编译代码和打开模拟器

5. MDK工程修改

5.1 从GUI Guider拷贝代码到STM32工程

5.2 修改按键处理代码

5.3 修改Button对应Gauge的处理

5.4 编译代码并解决相关的错误


1. 背景

MCU:STM32L475

正点原子 潘多拉STM32L4 IoT开发板

潘多拉IoT开发板 — 正点原子资料下载中心 1.0.0 文档http://www.openedv.com/docs/boards/iot/zdyz_panduola.html


2. 创建GUI guider工程和STM32代码工程

参考前一篇文章,复用上一个GUI guider建立的工程

LVGL-GUI Guider生成工程移植Keil_guiguider移植_云海无语的博客-CSDN博客将GUI Guider生成的代码增加至Keil工程变编译下载到开发板https://blog.csdn.net/chenaiguo0503/article/details/126585678LVGL-GUI Guider初始体验_gui-guider_云海无语的博客-CSDN博客基于STM32L475的LVGL系列https://blog.csdn.net/chenaiguo0503/article/details/126544890

3. 期望目标

设定了两个Screen,screen_homescreen_status这两个页面

screen_home页面上点击"Button",可以只Gauge的指针累积+10显示

screen_status页面上点击"Status",可以跳转进至第二个界面,当点击"Back"调回上一页面

4. GUI Guider 增加按键和修改按键event

4.1 Button按键

由于Button按键最终的代码逻辑是需要在代码中实现,所以这边先记住修改这两个名字坐标

尤其是这儿的Position的数值

4.2 Status按键

Status按键的功能主要是跳转下一页面,所以这部分可以直接在上面进行设置GUI Guider

同样,根据自己的布局和大小设置坐标、尺寸等,记住Position

在Status这个按键的Event选项中,选择Trigger方式、Target目标

4.3 Back按键

Back按键的主要目的是返回上一个screen,同4.2章节一样,只需要在GUI Guider上面设置

同时知道Back这个按键的position

4.4 编译代码和打开模拟器

参考上一篇的文章进行编译和模拟器测试

此时运行模拟器会发现点击Status会跳转下一个页面,点击Back会返回上一个页面

5. MDK工程修改

5.1 从GUI Guider拷贝代码到STM32工程

打开GUI Guider的工程目录GUI-Guider-Projects\hellowl\generated

打开STM32的工程目录的STM32L475_LVGL\GUI\lvgl_app\generated

使用Beyond Compare将差异部分选择性的拷贝过去

拷贝过去尝试编译下代码,看看是否可以成功

5.2 修改按键处理代码

由于当前的开发板的屏幕模组是不带触摸的,所只能用Button来模拟屏幕操作

在代码中STM32L475_LVGL\GUI\lvgl\examples\porting\lv_port_indev.c主要是input事件处理的代码

找到void lv_port_indev_init(void),这个函数是初始整个输入事件,包含Touch Pad, Key board, Mouse,Encoder,Button等,本案重点是在Button这个初始化部分,其中通过lv_point_t这个结构体映射实体按键和屏幕显示button的事件

如3.1章节提到的Button的Position坐标点是0,长宽大小是85和36,那么我们设定只要把坐标点的映射的范围定位X=0~85Y=0~36即可,这个地方我们用实体的Button的KEY0来模拟这个button。

screen_home页面中的Button对应的实际按键是KEY0

screen_home页面中的Status对应的实际按键是KEY1

screen_status页面中的Back对应的按键KEY1

KEY2和WK_UP预留为备用

   /*------------------
     * Button
     * -----------------*/

    /*Initialize your button if you have*/
    button_init();

    /*Register a button input device*/
    lv_indev_drv_init(&indev_drv);
    indev_drv.type = LV_INDEV_TYPE_BUTTON;
    indev_drv.read_cb = button_read;
    indev_button = lv_indev_drv_register(&indev_drv);

    /*Assign buttons to points on the screen*/
    static const lv_point_t btn_points[4] = {
            {10, 10},   /*Button 0 -> x:10; 	y:10 	KEY0*/
            {220, 10},  /*Button 1 -> x:220;	y:10 	KEY1*/
			{80, 140},  /*Button 2 -> x:80; 	y:140 	KEY2*/
            {160, 10}, 	/*Button 3 -> x:160; 	y:10	WK_UP*/
    };
    lv_indev_set_button_points(indev_button, btn_points);

 将实际的按键处理事件按照如下修改

/*Get ID  (0, 1, 2 ..) of the pressed button*/
static int8_t button_get_pressed_id(void)
{
	uint8_t key = KEY_Scan(0);
	
	switch (key) {
		case 1: 
			if (KEY0 == 0)
				return 0;
			break;
		
		case 2: 
			if (KEY1 == 0) 
				return 1;
			break;
			
		case 3: 
			if (KEY2 == 0)
				return 2;
			break;		

		case 4: 
			if (WK_UP == 1)
				return 3;
			break;	
		
		default:
			return -1;
			break;
	}
#if 0
    uint8_t i;

    /*Check to buttons see which is being pressed (assume there are 2 buttons)*/
    for(i = 0; i < 2; i++) {
        /*Return the pressed button's ID*/
        if(button_is_pressed(i)) {
            return i;
        }
    }
#endif 
    /*No button pressed*/
    return -1;
}

5.3 修改Button对应Gauge的处理

STM32L475_LVGL\GUI\lvgl_app\generated\events_init.c大部分的事件处理都在这个函数中,如前文提到的通过Status跳转下一面和Back跳转上一页面的代码都是在函数中实现

现在我们要添加点击Button会使电量计变化的代码

uint8_t gauge_value = 0;

static void screen_home_btn_1event_handler(lv_obj_t * obj, lv_event_t event)
{
	switch (event)
	{
		case LV_EVENT_CLICKED:
		{	
			if (gauge_value > 180) 
				gauge_value = 0;
			gauge_value += 10;
			
			lv_gauge_set_value(guider_ui.screen_home_gauge_1, 0, gauge_value);
			
			printf("%s, gauag_value = %d\n", __func__, gauge_value);
		}
		break;
	default:
		break;
	}
}

5.4 编译代码并解决相关的错误

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lvgl nxp gui guider 1.6是一个用于NXP微控制器的图形用户界面(GUI)开发工具。LVGL(轻量级嵌入式图形库)是一款开源的GUI库,可以在各种嵌入式设备上创建美观且功能丰富的用户界面。NXP GUI Guider是一个可视化的GUI设计工具,可以通过简单的拖放操作来设计和生成LVGL GUI界面。 使用LVGL NXP GUI Guider 1.6可以轻松快速地开发出专业水平的GUI界面。它提供了丰富的内置控件,如按钮、文本框、进度条、滑块等,用户可以根据自己的需求进行定制和扩展。此外,它还支持动画效果、多语言支持和主题切换等功能,使得界面更加丰富多样。 利用该工具,开发人员只需通过简单的拖放操作就可以设计和布局界面元素,并直接在编辑器中进行预览和调试。同时,可以通过代码生成器自动生成所需的LVGL C代码,方便集成进项目中。这样,开发人员可以更专注于业务逻辑或者其他核心功能的实现,提高开发效率。 此外,LVGL NXP GUI Guider 1.6还支持与其他开发工具的集成,如NXP MCUXpresso IDE和RTCS库等。这样,开发者可以在一个完整的开发环境中进行GUI开发,并且可以更好地与其他系统组件进行集成和交互。 总之,LVGL NXP GUI Guider 1.6是一个强大且易用的GUI开发工具,能够帮助开发者快速创建出高效、美观的GUI界面,并且与NXP微控制器的生态系统完美集成,提高开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值