打印
[STM32H7]

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

[复制链接]
164|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
目的
     利用开发板上的user button控制TouchGFX的内容

一、TouchGFX Designer设计界面


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


增加一个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

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


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



KeyController.cpp
#include "KeyController.hpp"
#include "main.h"

using namespace touchgfx;

KeyController::KeyController()
{
       
}
KeyController::~KeyController()
{
       
}
               
void KeyController::init()
{

}
bool KeyController::sample(uint8_t& key)
{
        uint8_t keyValue=0;
       
        if(HAL_GPIO_ReadPin(BUTTON_USER_GPIO_Port,BUTTON_USER_Pin)==1) keyValue='0';
       
        if(keyValue !=0)
        {
                key = keyValue;
               
                return true;
        }
       
        return false;
}       


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


KeyController.hpp

#ifndef _KEYCONTROLLER_T_
#define _KEYCONTROLLER_T_


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


namespace touchgfx
{
class KeyController : public ButtonController
{
public:
        KeyController();
        virtual ~KeyController();
       
        virtual void init();
        virtual bool sample(uint8_t& key);               
       
};
}
#endif


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


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

三、效果



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

30

帖子

0

粉丝