项目(智慧教室)第三部分,人机交互在stm32上的实现

一。使用软件

1.stm32cubemx中针对汉字提供的软件

2.对数据进行处理

2.上面点击ok--》这里选择确定

3.这里选择保存即可由字符库,但是需要占用内存太大,需35M,但是stm32只有几百k,所以需要自己删减。

生成中文字符(用C语言表示)方式

1.编写好我们智慧教室需要用到的汉字

2.另存为---》Unicode编码

解决

3.所有的宋体字符删除

4.打开刚刚创建的txt文件

5.保存为font.c

6.我们使用汉字就调用GUI_Fontfont

二。中文字符移植到Codeblock中

1.使能UTF-8编码方案(emwin参考手册27.1.4中)

复制代码
GUI_UC_SetEncodeUTF8()

2.添加字符库到工程中

(1)模拟器工程中创建font文件夹

(2)font.c添加进入font文件夹

(3)添加到工程文件

<1>右键SimulaionTrial---->add files recursively---->找到font文件夹

3.设置c源文件(需要显示中文)为UTF-8编码

4.程序中引用字库

(1)找到font.c最下方的font字库

(2)声明到子页面中(注意:主页面不需要添加)

5.text初始化下,修改setfont为nuicode编码

6..c文件通过txt文档保存为UTF-8模式

7.测试

8.循环上述内容,把所有子页面

二模拟器向stm32cumex移植

1.模拟器,stm32cumex工程文件

2.进入stm32cubemx的第三方工程目录下

3.复制

4.添加存在的文件

5.把所有窗口选择

(1)页面窗口

(2)字符窗口

(3)主页面图片

(4)子页面图片

(5)现在编译会有很多警告,表示没有声明

解决:创建一个.h文件,命名为include-dlg.h,放在application下。

复制代码
#ifndef 	_DLG_H
#define 	_DLG_H
#include "DIALOG.h"

extern WM_HWIN TempCreate(void);

extern WM_HWIN MainCreate(void);

extern WM_HWIN LightCreate(void);

extern WM_HWIN LedCreate(void);

extern WM_HWIN HumCreate(void);

extern WM_HWIN FanCreate(void);

extern WM_HWIN AlarmCreate(void);
#endif

5.对每一个页面,mainTask添加上述头文件,表示声明

注意:这里可能报错

解决:

把所有的页面改为UTF-8编码即可(注意不要有漏网之鱼)

6.我们没有调用mainCreate()函数所以不会显示在stm32上,所以需要在Freertos.c中调用。

在Freertos中

复制代码
    void MainTask(); 

7.没有任何错误,但是烧写到stm上没有任何反应。

原因:

虚拟器是鼠标进行调用的,这里是触摸屏。触摸屏需要轮寻检测,不然emwin没有办法触发。
解决:

以前的代码清楚,只需要轮寻检测

复制代码
void Touch_Task(void const * argument)
{
  /* init code for LWIP */
 // MX_LWIP_Init();

  /* init code for FATFS */
  //MX_FATFS_Init();
  //GUI_Init();

  /* USER CODE BEGIN Touch_Task */
	 
	printf("system is runing!\r\n");
  /* Infinite loop */
  for(;;)
  {
		//ִ触摸屏需要轮询检测,不然emWin没有办法触发事件
		GUI_TOUCH_Exec();	
		osDelay(20);
  }
  /* USER CODE END Touch_Task */
}

三。Keil工程中对器件操作的代码

1.Freertos任务使用void MainTask();

2.MainTask使用主页面子页面的函数。

3.主页面子页面函数调用CmdAndSensor.c

1.创建文件到inc文件夹CmdAndSensor.h

复制代码
#ifndef _CMD_AND_SENSOR_H
#define _CMD_AND_SENSOR_H

//1、控制功能

//1.1、风扇控制
void vFanCmd(int Cmd);


//1.2、报警控制
void vAlarmCmd(int Cmd);

//1.3、灯光控制
void vLedCmd(int Cmd);

//2、采集功能

//2.1、光照采集
int iGetLightValue(void);

//2.2、温度采集
int iGetTempValue(void);

//2.3、湿度采集
int iGetHumValue(void);
#endif

2.创建文件到src文件夹CmdAndSensor.c

复制代码
#include "CmdAndSensor.h"

#include "gpio.h"

int SensorValue[3] = {11001, 25, 56};

//1、控制功能

//1.1、风扇控制
void vFanCmd(int Cmd){

	// 需要控制zigbee节点,后面进行开发

}


//1.2、报警控制
void vAlarmCmd(int Cmd){

	if(Cmd){
		HAL_GPIO_WritePin(BUZ_GPIO_Port, BUZ_Pin, GPIO_PIN_SET);
	}else{
  HAL_GPIO_WritePin(BUZ_GPIO_Port, BUZ_Pin, GPIO_PIN_RESET);	
	}

}

//1.3、灯光控制
void vLedCmd(int Cmd){

	if(Cmd){
		HAL_GPIO_WritePin(GPIOF, D6_Pin|D7_Pin|D8_Pin|D9_Pin, GPIO_PIN_RESET);
	}else{
		HAL_GPIO_WritePin(GPIOF, D6_Pin|D7_Pin|D8_Pin|D9_Pin, GPIO_PIN_SET);
	}


}

//2、采集功能

//2.1、光照采集
int iGetLightValue(void){

	return SensorValue[0];
}

//2.2、温度采集
int iGetTempValue(void){

		return SensorValue[1];
}

//2.3、湿度采集
int iGetHumValue(void){

		return SensorValue[2];
}

3.子页面加入头文件 #include "CmdAndSensor.h"

目的:使用封装好的操作函数。

(1)6个子页面对数据的操作

(2)

(3)

相关推荐
洛星核2 天前
CrewAI 安装、使用方法详细全解
人工智能·github·人机交互·ai编程·agi·智能体
洛星核2 天前
Aider 安装、使用方法详细全解
人工智能·github·人机交互·ai编程·agi
Mr..Jackey2 天前
瑞佑 RUI Builder 图形化 UI 设计工具
arm开发·人工智能·单片机·ui·人机交互·ra8889·lcd控制芯片
元岳数字人小元2 天前
AI 数字人开发公司浅谈 虚拟数字人打造景区新服务
人工智能·人机交互·交互
小玮看世界3 天前
【技术成长实录】北京地铁12号线数据分析系统:从一个观察到一个完整项目的演进之路
python·人机交互·学习方法·cicd·项目交付
byte轻骑兵3 天前
【AVRCP】规范精讲[28]:媒体源上电全流程,蓝牙音频控制启动就靠这一套
网络·音视频·人机交互·媒体·avrcp
kaixinshier4 天前
【无标题】
大模型·人机交互·语音识别·tts·s100p
BSD_HY4 天前
37 载精工深耕|解锁低空经济 + 医疗设备全新人机交互解决方案
人机交互·制造·薄膜开关·深圳工厂
cy_cy0024 天前
创意MG动画制作,提升展厅吸引力与信息记忆度
大数据·科技·人机交互·交互·软件构建
BSD_HY5 天前
薄膜开关工艺深度解析:从材料选型到品质管控的全流程技术指南
人机交互·制造·薄膜开关·深圳工厂