项目(智慧教室)第三部分,人机交互在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)

相关推荐
不睡懒觉的橙1 天前
【医疗大数据】医疗保健领域的大数据管理:采用挑战和影响
大数据·人工智能·信息可视化·人机交互·健康医疗
知来者逆2 天前
讨论人机交互研究中大语言模型的整合与伦理问题
人工智能·gpt·语言模型·自然语言处理·人机交互
lijfrank2 天前
情感计算领域期刊与会议
人工智能·人机交互
环能jvav大师6 天前
基于R语言的统计分析基础:使用键盘输入数据
开发语言·学习·数据分析·r语言·人机交互
极客小张7 天前
基于STM32与Qt的自动平衡机器人:从控制到人机交互的的详细设计流程
c语言·stm32·qt·物联网·机器人·毕业设计·人机交互
标贝科技8 天前
标贝科技个性化音色定制方案 解锁语音合成无限可能
人工智能·科技·人机交互·语音识别
Successssss~13 天前
【高校主办,EI稳定检索】2024年人机交互与虚拟现实国际会议(HCIVR 2024)
计算机视觉·人机交互·vr·虚拟现实·增强现实
烧技湾14 天前
人机交互系统中的人脸讲话生成系统调研
人机交互
数云界23 天前
人工智能如何将人机交互提升到新水平
人工智能·人机交互
i嗑盐の小F1 个月前
【IEEE】第五届机器学习与计算机应用国际学术会议(ICMLCA 2024,10月18-20)
大数据·图像处理·人工智能·深度学习·机器学习·计算机视觉·人机交互