本文以一个实例进行触摸屏幕按钮实现开发板LED灯亮灭的操作。不进行详细原理讲解,只进行演示操作。
参考文档:stm32 TouchGFX基础教程(十四)触控点亮LED_dejun_qiu的博客-优快云博客_stm32 touchgfx
1、TouchGfx工程修改
在上一讲的工程基础上对屏幕内容进行修改。修改为如下信息。
更新控件为BUTTON WITH LABEL,名称定义为Btn_On,Text显示为LED_ON
添加交互函数
2、文件修改
修改Screen1View相关文件
#include <gui/screen1_screen/Screen1View.hpp>
Screen1View::Screen1View()
{
}
void Screen1View::setupScreen()
{
Screen1ViewBase::setupScreen();
}
void Screen1View::tearDownScreen()
{
Screen1ViewBase::tearDownScreen();
}
void Screen1View::Btn_OffClicked()
{
presenter->Btn_OffClicked();
}
void Screen1View::Btn_OnClicked()
{
presenter->Btn_OnClicked();
}
#ifndef SCREEN1VIEW_HPP
#define SCREEN1VIEW_HPP
#include <gui_generated/screen1_screen/Screen1ViewBase.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
class Screen1View : public Screen1ViewBase
{
public:
Screen1View();
virtual ~Screen1View() {}
virtual void setupScreen();
virtual void tearDownScreen();
protected:
virtual void Btn_OnClicked();
virtual void Btn_OffClicked();
};
#endif // SCREEN1VIEW_HPP
修改Screen1Presenter相关文件
#include <gui/screen1_screen/Screen1View.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
Screen1Presenter::Screen1Presenter(Screen1View& v)
: view(v)
{
}
void Screen1Presenter::activate()
{
}
void Screen1Presenter::deactivate()
{
}
void Screen1Presenter::Btn_OnClicked()
{
model->LedOn();
}
void Screen1Presenter::Btn_OffClicked()
{
model->LedOff();
}
#ifndef SCREEN1PRESENTER_HPP
#define SCREEN1PRESENTER_HPP
#include <gui/model/ModelListener.hpp>
#include <mvp/Presenter.hpp>
using namespace touchgfx;
class Screen1View;
class Screen1Presenter : public touchgfx::Presenter, public ModelListener
{
public:
Screen1Presenter(Screen1View& v);
/**
* The activate function is called automatically when this screen is "switched in"
* (ie. made active). Initialization logic can be placed here.
*/
virtual void activate();
/**
* The deactivate function is called automatically when this screen is "switched out"
* (ie. made inactive). Teardown functionality can be placed here.
*/
virtual void deactivate();
virtual ~Screen1Presenter() {};
virtual void Btn_OnClicked();
virtual void Btn_OffClicked();
private:
Screen1Presenter();
Screen1View& view;
};
#endif // SCREEN1PRESENTER_HPP
修改model
#include <gui/model/Model.hpp>
#include <gui/model/ModelListener.hpp>
#include <drv_common.h>
#include "rtdevice.h"
Model::Model() : modelListener(0)
{
}
void Model::tick()
{
}
#define LED0 GET_PIN(B, 0)
#define LED1 GET_PIN(B, 1)
void Model::LedOn()
{
rt_pin_mode(LED0, PIN_MODE_OUTPUT);
rt_pin_mode(LED1, PIN_MODE_OUTPUT);
rt_pin_write(LED0, PIN_LOW);
rt_pin_write(LED1, PIN_LOW);
}
void Model::LedOff()
{
rt_pin_mode(LED0, PIN_MODE_OUTPUT);
rt_pin_mode(LED1, PIN_MODE_OUTPUT);
rt_pin_write(LED0, PIN_HIGH);
rt_pin_write(LED1, PIN_HIGH);
}
#ifndef MODEL_HPP
#define MODEL_HPP
class ModelListener;
class Model
{
public:
Model();
void bind(ModelListener* listener)
{
modelListener = listener;
}
void tick();
void LedOn();
void LedOff();
protected:
ModelListener* modelListener;
};
#endif // MODEL_HPP
3、下载验证
串口提示内容如下:
屏幕按钮效果如下
LED_BTN