[STM32H7] 【STM32H7S78-DK测评】2、实体按键控制TouchGFX

[复制链接]
 楼主| sujingliang 发表于 2024-9-6 15:15 | 显示全部楼层 |阅读模式
<
目的
     利用开发板上的user button控制TouchGFX的内容

一、TouchGFX Designer设计界面

GFX2_1.png
放置几个部件,其中实体按键将控制boxProgress1的值,模拟一个步进控制。

GFX2_2.png
增加一个Interaction1,做如下设置:
Trigger:Hardware button is clicked
Choose button key:48 0    //ASCII(48)->'0',输入'0'触发动作
Function Name:increaseProgressValue   //自定义一个按键处理函数

二、程序实现
1、初始化user key


#define BUTTON_USER_Pin GPIO_PIN_13
#define BUTTON_USER_GPIO_Port GPIOC

  1.   /*Configure GPIO pin : BUTTON_USER_Pin */
  2.   GPIO_InitStruct.Pin = BUTTON_USER_Pin;
  3.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  4.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  5.   HAL_GPIO_Init(BUTTON_USER_GPIO_Port, &GPIO_InitStruct);
板载user button是PC13,高电平有效
button.png

2、Application/User/Appli/TouchGFX/target下增加实体按键处理程序KeyController.cpp


keil.png
KeyController.cpp
  1. #include "KeyController.hpp"
  2. #include "main.h"

  3. using namespace touchgfx;

  4. KeyController::KeyController()
  5. {
  6.        
  7. }
  8. KeyController::~KeyController()
  9. {
  10.        
  11. }
  12.                
  13. void KeyController::init()
  14. {

  15. }
  16. bool KeyController::sample(uint8_t& key)
  17. {
  18.         uint8_t keyValue=0;
  19.        
  20.         if(HAL_GPIO_ReadPin(BUTTON_USER_GPIO_Port,BUTTON_USER_Pin)==1) keyValue='0';
  21.        
  22.         if(keyValue !=0)
  23.         {
  24.                 key = keyValue;
  25.                
  26.                 return true;
  27.         }
  28.        
  29.         return false;
  30. }       


判断BUTTON_USER是否为高电平,如果是设置 keyValue='0'


KeyController.hpp

  1. #ifndef _KEYCONTROLLER_T_
  2. #define _KEYCONTROLLER_T_


  3. #include <platform/driver/button/ButtonController.hpp>


  4. namespace touchgfx
  5. {
  6. class KeyController : public ButtonController
  7. {
  8. public:
  9.         KeyController();
  10.         virtual ~KeyController();
  11.        
  12.         virtual void init();
  13.         virtual bool sample(uint8_t& key);               
  14.        
  15. };
  16. }
  17. #endif


TouchGFXHAL.cpp中增加一个KeyController对象
  1. #include "KeyController.hpp"
  2. using namespace touchgfx;
  3. static touchgfx::KeyController keyController;
void TouchGFXHAL::initialize()中加入:
  1.   keyController.init();
  2.                 setButtonController(&keyController);
完成了KeyController的初始化


在Screen2View中实现increaseProgressValue:
  1. void Screen2View::increaseProgressValue()
  2. {
  3.         int val;
  4.         val=boxProgress1.getValue();
  5.         boxProgress1.setValue((val+1)%100);
  6. }
  7.        
作用是每次收到ASCII(48),触发increaseProgressValue,从boxProgress1获得当前值,加一后设置给boxProgress1。

三、效果

微信图片_20240906151032.jpg
tutieshi_480x270_9s.gif
Amazingxixixi 发表于 2024-10-31 16:03 | 显示全部楼层
建议做个系列的教程,大家一起学习
地瓜patch 发表于 2024-10-31 18:04 来自手机 | 显示全部楼层
这个touchgfx是辅助设计图形的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

146

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部