物联网智慧教室项目(五):人机交互功能开发(模拟器)

一、界面构思

(一)原型分析

1、主界面

主界面提供了,整个系统的交互接口,也就是说,我们都有哪些需要提供给用户展示的
1、数据展示功能
    1.1、温度
    1.2、湿度
    1.3、光照
2、控制操作功能
	2.1、灯光
    2.2、风扇
    2.3、报警
    
分析:
    对用户来说,需要点击相应的图标下,就可以进入相关的界面,很简单,我使用button小工具进行实现,其实就是在主界面创建6个button小工具

在这里插入图片描述

2、子界面

控制界面
控制界面应该有什么?
1、界面的标识--- 要给用户指示这个界面有什么用
    使用text小工具就可以实现
2、控制操作
    开状态-当用户点击图标,灯泡点亮
    关状态-当用户点击图片,灯泡熄灭
3、返回主菜单
    当用户点击主菜单按钮,返回主界面
    
 控制和返回主界面都用button实现即可
    

在这里插入图片描述

数据界面
控制界面应该有什么?
1、界面的标识--- 要给用户指示这个界面有什么用
    使用text小工具就可以实现
2、数据图标展示
 	显示一个图片就可以,用图片小工具
3、返回主菜单
    当用户点击主菜单按钮,返回主界面,用button小工具

在这里插入图片描述

(二)界面构思

1、主界面

在这里插入图片描述

2、传感器数据展示界面

在这里插入图片描述

3、控制设备界面

在这里插入图片描述

(三)素材设计

1、主界面素材

在这里插入图片描述

2、子界面素材

在这里插入图片描述

注意事项

图片最终是用过代码,进行展示的
    我们必须针对图片命名时候,有规范,有要求
1、主界面命名
    MainAlarm
    MainLed
2、子界面
    SubAlarmOpen
    SubAlarmClose
    SubHum

二、交互设计

(一)窗口初始化

业务流程

Created with Raphaël 2.3.0 设置窗口背景色 设置按钮位图

窗口初始化函数接口

句柄的概念

句柄:在C语言里面,它其实就是一个指针变量

在这里插入图片描述

WINDOW_SetBkColor

在这里插入图片描述

WM_GetDialogItem

在这里插入图片描述

BUTTON_SetBitmap

在这里插入图片描述

(二)按键处理

Created with Raphaël 2.3.0 子窗口消息通知 获取子窗口ID 获取子窗口消息 子窗口消息处理

按键处理接口

WM_NOTIFY_PARENT

在这里插入图片描述

按钮通知代码

在这里插入图片描述

(三)界面切换

Created with Raphaël 2.3.0 结束当前对话框 创建需要切换的对话框
界面切换接口
GUI_EndDialog

在这里插入图片描述

GUI_CreateDialogBox

在这里插入图片描述

三、GUIBuilder创建代码框架

GUIBuilder创建主界面

1、创建window小工具
    1.1、设置window x y 尺寸 472 280
    1.2、设置背景色 2 33 79 RGB
2、创建6个button小工具
    2.1、设置button尺寸为 100 100 
    2.2、button布局
  /*
  { WINDOW_CreateIndirect, "", ID_WINDOW_0, 0, 0, 472, 280, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "", ID_BUTTON_0, 43, 30, 100, 100, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "", ID_BUTTON_1, 43, 150, 100, 100, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "", ID_BUTTON_2, 186, 150, 100, 100, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "", ID_BUTTON_3, 329, 150, 100, 100, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "", ID_BUTTON_4, 329, 30, 100, 100, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "", ID_BUTTON_5, 186, 30, 100, 100, 0, 0x0, 0 },
  */

在这里插入图片描述

添加代码到模拟器工程
修改窗口创建函数名称及文件名称

在这里插入图片描述

代码添加到工程

在这里插入图片描述

模拟器运行

在这里插入图片描述

创建温度展示界面

在这里插入图片描述

在这里插入图片描述

创建湿度展示界面

在这里插入图片描述

创建光照展示界面

在这里插入图片描述

创建风扇控制界面

在这里插入图片描述

创建LED控制界面

在这里插入图片描述

创建报警控制界面

在这里插入图片描述

四、BmpCvtST生成图片流

将主界面、子界面图片通过“位图转换工具”转换成c语言文件,然后复制到SeggerEval_WIN32_MSVC_MinGW_GUI_V544文件下的Application文件夹中。

位图转换工具及界面用到的图片素材:
链接:https://pan.baidu.com/s/1KnK-yzwmuKXJQRIgQmIMDQ?pwd=8hyn
提取码:8hyn
在这里插入图片描述
在这里插入图片描述

(一)主界面添加图片流

// USER START (Optionally insert additional static data)
extern GUI_CONST_STORAGE GUI_BITMAP bmMainAlarm;
extern GUI_CONST_STORAGE GUI_BITMAP bmMainFan;
extern GUI_CONST_STORAGE GUI_BITMAP bmMainHum;
extern GUI_CONST_STORAGE GUI_BITMAP bmMainLed;
extern GUI_CONST_STORAGE GUI_BITMAP bmMainLight;
extern GUI_CONST_STORAGE GUI_BITMAP bmMainTemp;
// USER END
    // USER START (Optionally insert additional code for further widget initialization)
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainAlarm);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainFan);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
    BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainHum);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3);
    BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainLed);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_4);
    BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainLight);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_5);
    BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainTemp);
    // USER END

(二)子界面添加图片流

以HumDLG(湿度子界面)为例,其余五个子界面操作除了命名得修改一下,其余一致,如下:

// USER START (Optionally insert additional static data)
extern GUI_CONST_STORAGE GUI_BITMAP bmSubHome;
extern GUI_CONST_STORAGE GUI_BITMAP bmSubHum;
// USER END
    // USER START (Optionally insert additional code for further widget initialization)
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmSubHome);
    // USER END

五、界面切换功能实现

功能优化

设置子界面背景色为 8 20 44 16进制 2C 14 08
//TEXT_SetBkColor(hItem, GUI_MAKE_COLOR(0x002C1408));

(一)界面切换功能实现

1、主界面切换到子界面

MainDLG.c(以按键0 Alarm为例,其余五个按键操作一致):

case ID_BUTTON_0: // Notifications sent by ''
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        GUI_EndDialog(pMsg->hWin, 0);
        AlarmCreate();
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;

2、子界面
a.控制设备(Alarm、Fan、Led,即需要控制开关的),以Alarm为例:
PS:注意是在按键1写入代码,不是按键0

case ID_BUTTON_1: // Notifications sent by ''
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        GUI_EndDialog(pMsg->hWin, 0);
        MainCreate();
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;

b.传感器(Hum、Light、Temp),以Hum为例

    case ID_BUTTON_0: // Notifications sent by ''
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        GUI_EndDialog(pMsg->hWin, 0);
        MainCreate();
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }

(二)控制操作图标切换

也就是实现Alarm、Fan、Led点击图片按钮可以实现开关图片的切换,以Alarm为例:
// USER START (Optionally insert additional static data)
extern GUI_CONST_STORAGE GUI_BITMAP bmSubAlarmClose;
extern GUI_CONST_STORAGE GUI_BITMAP bmSubAlarmOpen;
extern GUI_CONST_STORAGE GUI_BITMAP bmSubHome;
static int status = 0;
// USER END
    // USER START (Optionally insert additional code for further widget initialization)
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    if(status){
        BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED, &bmSubAlarmOpen);
    }else{
        BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED, &bmSubAlarmClose);
    }
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmSubHome);
    // USER END

PS:在按键0中添加代码

    case ID_BUTTON_0: // Notifications sent by ''
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        status = !status;
        if(status){
            BUTTON_SetBitmap(pMsg->hWinSrc, BUTTON_BI_UNPRESSED, &bmSubAlarmOpen);

        }else{
            BUTTON_SetBitmap(pMsg->hWinSrc, BUTTON_BI_UNPRESSED, &bmSubAlarmClose);
        }
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值