智能家居系统项目二-实现智能家居软件系统的基本功能1课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《智能家居系统项目二-实现智能家居软件系统的基本功能1课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能家居 系统 项目 实现 软件 基本功能 课件
- 资源描述:
-
1、项目二 实现智能家居软件系统的基本功能 智能家居系统开发智能家居系统开发配套配套PPTPPT01.引入库和必要的文件对运行于PC端的库文件lib-X86.so进行加载,使用#include方法,导入“智能家居”系统提供的必要的文件。1.什么是库文件库文件是将属性和方法封装在一个文件中供程序调用,封装后的库文件无法查看源码,也无法对库中的方法和属性进行修改,提升了代码的安全性也便于程序员对代码进行维护。库文件通常有静态库文件和动态库文件两种,windows静态库文件就是.lib文件,动态库文件就是.dll文件,而Linux系统的静态库文件和动态库文件后缀分别是.a和.so。两种库的区别在于静态库
2、被调用时直接加载到内存,而动态库再是在需要的时候加载到内存,不使用的时候再从内存释放。2.Qt中怎样添加库文件库文件要在.pro文件中添加。在文件中加入LIBS+=库文件路径/库文件名。系统给我们提供了两个库文件,其中“lib-X86.so”是在PC端运行所依赖的动态链接库文件,“lib-ARM.so”是在网关端运行所依赖的动态链接库。3.文件包含命令 QT中的“文件包含”是指将另一个库文件或头文件的内容合并到本程序中。在C+语言中使用“#include”命令进行文件包含的操作,命令格式为:#include 或者#include 文件名/类名“文件包含”的两种格式都可以引入指定的文件或类。通常
3、,第一种格式是将文件名/类名用尖括号标记起来,用于包含由系统提供的并放在指定子目录中的头文件或类,如“#include”;第二种格式是将文件名/类名用双引号标记,用于包含由用户定义的放在当前目录或其他目录下的头文件或类,如“#include smartHome.h”。4.条件编译命令在程序运行前,所有的语句都必须先完成编译。但有时也希望根据一定的条件去编译源文件的不同部分,即“条件编译”。条件编译使得同一源程序在不同的编译条件下得到不同的目标代码。C+常用的条件编译命令格式为:#ifdef(ifndef)#else其中ifdef(ifndef)表示如果标识符已(未)被#define命令定义过,
4、则编译程序段1。中括号为可选项,表示否则编译程序段2。如在头文件的顶部经常会有如下代码:#ifndef DIALOG_H#define DIALOG_H1.协调器的连接。使用RS232串口线的USB端连接PC机,串口端连接协调器,协调器使用DC 5V供电。连接完成后在虚拟机右下角的“Future Devices USB Serial Converter”图标如图2-2所示表示串口已连接,否则单击该图标,选择“连接”选项连接串口。注意:给协调器供电时一定要选择工作台上的5V供电,而不要使用12V供电,否则会将设备烧毁。图2-2 串口连接图标2.将系统提供的必要的头文件“command.h”、“p
5、osix_qextserialport.h”、“qextserialbase.h”、“qextserialport.h”、“serialThread.h”和“serialThread.cpp”复制到“SmartHome”项目目录中。3.创建Debug1和Debug2两个文件夹作为PC端和网关的构建目录,将“lib-X86.so”库文件放入Debug1文件夹,“lib-ARM.so”库文件放入Debug2文件夹中。4.打开“SmartHome”项目,设置构建目录为Debug1文件夹,Qt版本设置为“Desktop Qt 4.8.1 for GCC”,如图2-3所示。图2-3 项目构建设置5.打开
6、“SmartHome.pro”项目文件,添加“LIBS+=./lib-X86.so”,如图2-4所示。图2-4 添加库文件6.右击“SmartHome”项目,选择“添加现有文件”,如图2-5所示。图2-5 添加现有文件7.选择要添加的头文件,按“ctrl”键可对多个文件进行选择。点击“打开”按钮完成头文件的添加。如图2-6所示。图2-6 添加头文件8.在“dialog.h”头文件中引入“command.h”文件。如图2-7所示。图2-7 引入“command.h”9.在public区域声明一个command类的对象,如图2-8所示。11.设置完成,编译运行如图2-9所示,若在“应用程序输出”窗
7、口出现“open File success”,则表示串口打开成功。图2-8 声明command的对象10.打开“dialog.cpp”源文件,在构造方法中输入打开串口的方法“DataHandle.SerialOpen();”。注意:本任务在调试中常出现的错误:1.“.lib-X86.so No such file or directory”,没有找到“lib-X86.so”这个库文件,出现这个错误的原因有以下几种情况:(1)项目的构建目录设置错误。构建目录一定要指向含有“lib-X86.so”库文件的文件夹。(2)没有把“lib-X86.so”库文件拷贝到构建目录里。(3)pro文件设置的“L
8、IBS”路径错误。2.“Could not open File!Error code:5”,不能打开文件。出现这个错误的原因有以下几种情况:(1)没有连接RS232串口线。(2)串口线的使用权被Windows系统占用,可以在虚拟机中重新连接串口。(3)连接的协调器死机。这是以后代码调试时经常出现的错误。重启协调器即可。02.板号的设置本任务是给系统提供的设备板号变量进行声明和赋值,其中温湿度传感器、灯光模块(LED)、求助按钮、蜂鸣器(板载)与节点板1的连接;光照传感器、空调模块(数码管)、射灯(继电器)与节点板2的连接;烟雾传感器、窗帘模块(步进电机)、风扇模块(直流电机)、人体红外模块与节
9、点板3的连接。Qt的常用数据类型类型名称类型名称字节空间字节空间类型说明类型说明int4字节(32位)存储整数,如:1float4字节(32位)存储浮点数,如:1.0double8字节(64位)存储双精度浮点数,如:1.0char2字节(16位)存储一个字符,如abool1字节(8位)存储逻辑变量,如true,false变量的声明 变量使用前必须先声明,而且在同一代码范围内,一个变量名只允许声明一次。声明变量的格式为“数据类型 变量名;”。如:int a,表示声明了一个整型变量a。变量的赋值 变量在声明或者声明后就可以赋值了,赋值符号为“=”号,一个变量可以进行多次赋值。变量的作用域 变量有其
10、存在的范围,当程序运行超出这个范围后,这个变量将被收回。同名变量作用域不能重叠。一般来说,变量存在的作用域为离变量声明最近的一对大括号。1.将节点板顶板插入协调器,使用配置工具按照要求进行配置,配置方法如图2-11所示。图2-11 节点板的配置2.节点板使用数据线与工作台的进行连接,节点板使用DC 5V供电。如图2-12所示。图2-12 节点板的连接4.在类的外部进行板号的变量的声明,代码如下:extern volatile unsigned int configboardnumbertemp;/温度extern volatile unsigned int configboardnumberH
11、umidity;/湿度extern volatile unsigned int configboardnumberIllumination;/湿度extern volatile unsigned int configboardnumberSmoke;/烟雾extern volatile unsigned int configboardnumberHumanInfrared;/人体红外extern volatile unsigned int configboardnumberHelpButton;/求助按钮extern volatile unsigned int configboardnumbe
12、rStepMotor;/步进电机extern volatile unsigned int configboardnumberDCMotor;/直流电机extern volatile unsigned int configboardnumberDigital;/数码管extern volatile unsigned int configboardnumberLED;/LED 灯extern volatile unsigned int configboardnumberRelay;/继电器extern volatile unsigned int configboardnumberBuzz;/蜂鸣器
13、3.打开项目“SmartHome”,进入头文件“dialog.h”。注:变量修饰词“extern”表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。“volatile”表示编译器遇到这个关键字声明的变量,对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。unsigned int表示该变量为无符号型整数(不包含负数)。configboardnumbertemp=1;configboardnumberHumidity=1;configboardnumberIllumination=2;configboardnumberSmoke=3;conf
14、igboardnumberHumanInfrared=3;configboardnumberHelpButton=1;configboardnumberStepMotor=3;configboardnumberDCMotor=3;configboardnumberDigital=2;configboardnumberLED=1;configboardnumberRelay=2;configboardnumberBuzz=1;5.打开源文件“dialog.cpp”,在构造方法(Dialog:Dialog(QWidget*parent):QDialog(parent),ui(new Ui:Dial
15、og))中进行板号的赋值,代码如下:注意:本任务在调试中常出现的错误:1.“a was not declared in this scope”,a这个变量没有声明。变量必须要先声明后使用,直接给变量赋值就会出现这个错误。2.“redeclaration of int a”,在同一个作用域内重复的声明了a这个变量。3.“invalid conversion from const char*to int”,赋值类型错误,不能给一个int型变量赋字符型的值。03.环境监测数据的获取本任务利用“企想智能家居安装与维护操作台”进行环境数据的监测,并将数据显示在界面中。算数运算符 主要包括:加法(+)、减
16、法(-)、乘法(*)、除法(/)、取余(%)、自增(+)、自减(-)。例1:运算“a+”的值int a=1;a+;qDebug()a例2:运算“a%b”的值int a=10;int b=3;qDebug())、小于(=)、小于等于(b;qDebug()c;逻辑运算符 进行逻辑运算的数据类型必须为bool型。主要包括:逻辑与(&),逻辑或(|)和逻辑非(!)。其运算规则为:a1a2a1&a2a1|a2!a1truetruetruetruefalsetruefalsefalsetruefalsefalsetruefalsetruetruefalsefalsefalsefalsetrue赋值运算符
17、用于对变量进行赋值。常用赋值运算符为“=”,另外,还包括拓展运算符(“+=”,“-=”,“*=”,“/=”)。实例:输入以下代码,输出a的值int a=1;int b,c;b=c=2;a+=c;qDebug()=10)&(str.length()lcdTemp-display(wd);ui-lcdHumidity-display(sd);ui-lcdIllumination-display(gz);ui-lcdSmoke-display(yw);7.设置“人体感应”和“求助按钮”的状态,人体感应是当监测到有人时,变量StateHumanInfrared的值为1,否则为0;求助按钮是当有人按下按
18、钮时,变量StateHelpButton的值为1,否则为0。可使用三目运算符实现此功能,在槽方法getStr中加入如下代码:ui-lblHI-setText(StateHumanInfrared=1?有人:无人);/ui-lblHB-setText(StateHelpButton=1?有人按下:无人按下);8.设计完成,运行效果如图2-13所示。04.环境温度最大值与最小值的获取本任务使用程序设计中的单分支结构,完成环境温度的最大值与最小值的获取1.在程序的设计中有三种基本的程序结构,分别是:顺序结构、分支结构和循环结构,其结构图如图2-16所示。其中分支结构又有单分支结构、双分支结构和多分支
19、结构,本节主要对分支结构中的单分支结构进行学习。单分支结构的实现其语法为:if(关系表达式)语句块 当关系表达式为true时,执行语句块,否则不执行。练习 用户输入三个值,按“判断”按钮,在Label控件中输出三个数的最大值。void Dialog:on_btnMax_clicked()int a=ui-le_a-text().toInt();int b=ui-le_b-text().toInt();int c=ui-le_c-text().toInt();if(a b)a=b;if(a lblMax-setText(QString(三个数的最大值为:%1).arg(a);练习 用户输入三个值
20、,按“排序”按钮,将三个数按从大到小的顺序放在三个Label控件中。41void Dialog:on_btnSort_clicked()int a=ui-le_a-text().toInt();int b=ui-le_b-text().toInt();int c=ui-le_c-text().toInt();if(a b)int d=a;a=b;b=d;if(a c)int d=a;a=c;c=d;if(b lblSort-setText(QString(排序结果为:%1%2%3).arg(a).arg(b).arg(c);2.在类的public区域声明两个float型变量“wd_Max”(温
21、度最大值)、“wd_Min”(温度最小值)。如图2-21所示。图2-21 定义温度最大值、最小值变量1.打开项目“SmartHome”,进入头文件“dialog.h”。3.打开“dialog.cpp”源文件,在构造方法中定义“wd_Max”、“wd_Min”的初始值都为0。4.在槽方法“getStr”中加入如下代码:if(wd_Max=0|wd_Max wd)/当温度最小值为0或者当前温度小于最小温度时wd_Min=wd;5.设置完成,运行效果如图2-15所示。05.图片按钮的设备控制本任务实现界面中图片按钮的设备控制功能。包括报警器的控制、LED灯的控制和窗帘的控制。通过单击界面中相应的区域
22、,使用程序设计中的双分支结构,实现对设备的控制,同时更新界面中对应设备的状态。双分支结构通过“if-else”语句来实现。其语法为:if(关系表达式)语句块1else语句块2当关系表达式为true时,运行语句块1,否则执行语句块2。练习 用户输入一个年份,按“判断”按钮,在Label控件中显示是否为闰年。注:闰年的判断条件为年份能被4整除且不能被100整除;或者年份能被400整除的是闰年。void Dialog:on_btnPd_clicked()int year=ui-le_Year-text().toInt();if(year%4=0&year%100!=0)|year%400=0)ui-
23、lblShow-setText(QString(%1年是闰年).arg(year);else ui-lblShow-setText(QString(%1年不是闰年).arg(year);练习 用户输入一个成绩,点击“评定”按钮,当成绩大于85时Label控件显示“优秀”,大于70时显示“良好”,大于60时显示“合格”,60以下时显示“不合格。”int score=ui-le_Score-text().toInt();if(score=85)ui-lblShow-setText(你的成绩评定为优秀);else if(score=70)ui-lblShow-setText(你的成绩评定为良好);e
24、lse if(score=60)ui-lblShow-setText(你的成绩评定为合格);else ui-lblShow-setText(你的成绩评定为不合格);1.打开项目“SmartHome”,进入界面文件“dialog.ui”。设置四个LED灯、窗帘、报警灯的初始状态为关闭,如图2-25所示。图2-25 设备初始状态设置2.打开“dialog.cpp”源文件,首先声明设备的状态变量用来表示设备的状态。其中四个led灯为state_LED1 state_LED1、窗帘为state_StepMotor、报警灯为state_Buzz。由于初始状态都为关闭,所以设置它们的初始值都为0,另外用变
25、量“led”控制四盏灯的开关。由于是全局变量,因此将其定义在构造方法的上方,代码如下:int state_LED1=0,state_LED2=0,state_LED3=0,state_LED4=0,state_ StepMotor =0,state_Buzz =0;int led=0;3.右击“btnLED1”按钮,选择“转到槽”。在“clicked()”槽方法中输入代码如下:void Dialog:on_btnLED1_clicked()if(ui-tbMode-currentIndex()=0)/当前模式为单控模式时 if(state_LED1=0)DataHandle.SerialWri
展开阅读全文