智能家居系统项目二-实现智能家居软件系统的基本功能1课件.pptx

上传人(卖家):三亚风情 文档编号:3537557 上传时间:2022-09-13 格式:PPTX 页数:85 大小:1.79MB
下载 相关 举报
智能家居系统项目二-实现智能家居软件系统的基本功能1课件.pptx_第1页
第1页 / 共85页
智能家居系统项目二-实现智能家居软件系统的基本功能1课件.pptx_第2页
第2页 / 共85页
智能家居系统项目二-实现智能家居软件系统的基本功能1课件.pptx_第3页
第3页 / 共85页
智能家居系统项目二-实现智能家居软件系统的基本功能1课件.pptx_第4页
第4页 / 共85页
智能家居系统项目二-实现智能家居软件系统的基本功能1课件.pptx_第5页
第5页 / 共85页
点击查看更多>>
资源描述

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

26、teData(configboardnumberLED,TTL_IO,CommandNormal,led|=0 x08);/控制led1灯开ui-btnLED1-setStyleSheet(border-image:url(:/images/1Led1.png););/控制界面led1灯亮state_LED1=1;/设置led1灯状态为开else DataHandle.SerialWriteData(configboardnumberLED,TTL_IO,CommandNormal,led&=0 x07);/控制led1灯关 ui-btnLED1-setStyleSheet(border-im

27、age:url(););/控制界面led1灯灭 state_LED1=0;/设置led1灯状态为关4.用相同方法,完成“btnLED2”,“btnLED3”,“btnLED4”,“btnStepMotor”,“btnBuzz”控件的设置。代码如下:void Dialog:on_btnLED2_clicked()if(ui-tbMode-currentIndex()=0)if(state_LED2=0)DataHandle.SerialWriteData(configboardnumberLED,TTL_IO,CommandNormal,led|=0 x04);ui-btnLED2-setSty

28、leSheet(border-image:url(:/images/1Led2.png););state_LED2=1;else DataHandle.SerialWriteData(configboardnumberLED,TTL_IO,CommandNormal,led&=0 x0B);ui-btnLED2-setStyleSheet(border-image:url(););state_LED2=0;void Dialog:on_btnLED3_clicked()if(ui-tbMode-currentIndex()=0)if(state_LED3=0)DataHandle.Serial

29、WriteData(configboardnumberLED,TTL_IO,CommandNormal,led|=0 x02);ui-btnLED3-setStyleSheet(border-image:url(:/images/1Led3.png););state_LED3=1;else DataHandle.SerialWriteData(configboardnumberLED,TTL_IO,CommandNormal,led&=0 x0D);ui-btnLED3-setStyleSheet(border-image:url(););state_LED3=0;void Dialog:on

30、_btnLED4_clicked()if(ui-tbMode-currentIndex()=0)if(state_LED4=0)DataHandle.SerialWriteData(configboardnumberLED,TTL_IO,CommandNormal,led|=0 x01);ui-btnLED4-setStyleSheet(border-image:url(:/images/1Led4.png););state_LED4=1;else DataHandle.SerialWriteData(configboardnumberLED,TTL_IO,CommandNormal,led&

31、=0 x0E);ui-btnLED4-setStyleSheet(border-image:url(););state_LED4=0;void Dialog:on_btnStepMotor_clicked()if(ui-tbMode-currentIndex()=0)if(state_StepMotor=0)DataHandle.SerialWriteData(configboardnumberStepMotor,StepMotor,CommandStepMotor,600);ui-btnStepMotor-setStyleSheet(border-image:url(););state_St

32、epMotor=1;else DataHandle.SerialWriteData(configboardnumberStepMotor,StepMotor,CommandStepMotor,-600);ui-btnStepMotor-setStyleSheet(border-image:url(:/images/1Curtain.png););state_StepMotor=0;void Dialog:on_btnBuzz_clicked()if(ui-tbMode-currentIndex()=0)if(state_Buzz=0)DataHandle.SerialWriteData(con

33、figboardnumberBuzz,Buzz,CommandNormal,0 x01);ui-btnBuzz-setStyleSheet(border-image:url(:/images/red.png););state_Buzz=1;else DataHandle.SerialWriteData(configboardnumberBuzz,Buzz,CommandNormal,0 x00);ui-btnBuzz-setStyleSheet(border-image:url(:/images/green.png););state_Buzz=0;5.设计完成,项目运行效果如图2-22所示。注

34、意:在本任务中使用command 类的SerialWriteData()方法进行设备控制,如:“DataHandle.SerialWriteData(configboardnumberStepMotor,StepMotor,CommandStepMotor,600);”该命令就是就是发送控制控制步进电机的命令,其中第一个参数是步进电机的板号,这在任务二中已设置;第二个参数是传感器类型,传感器类型对照表见表2-8;第三个参数为传感器命令类型,步进电机是“CommandStepMotor”,其它设备为普通类型,即“CommandNormal”;第四个参数是控制步进电机的旋转角度为600度(正数是顺

35、时针转,负数是逆时针转)。表2-8 传感器类型对照表名称传感器类型值RelaySingle单路继电器(射灯)0X20DigitalTube数码管(空调)0X48DCMotor直流电机(风扇)0X80StepMotor步进电机(窗帘)0X88TTL_IO TTL_IO(LED灯)0X90Buzz 蜂鸣器0XF82.在本任务中使用int(32位)型变量“led”的后四位控制四个LED灯的开关,若led的值为0X0F(二进制为1111),则表示四个LED灯全亮,若led的值为0X0C(1100),则表示LED1和LED2亮。因此,在控制LED灯亮时,为了各灯之间互不影响,使用位运算符“|”对变量le

36、d进行设置,如设置灯1亮,则应设置“led|=0X08”,只是让对应LED1的第四位变为了1,其它位保持不变。在控制LED灯灭时,使用位运算符“&”对变量led进行设置,如设置灯1灭,则应设置“led&=0X07”,只是让对应LED1的第四位变为了0,其它位保持不变。06.联动模式功能的实现根据用户设置的时间,进入不同的模式,具体要求如下:(1)日间模式:当时间介于6:05-18:05区间时,进入日间模式;执行关闭房间灯光,开启房间窗帘,数码管实时显示室内湿度,完成真实器件动作的同时更新相应功能模块在界面对应区域中的状态。当光照高于280时,窗帘关闭,否则窗帘开启。(2)夜间模式:当时间介于1

37、8:06-00:10区间时,进入夜间模式;执行开启房间灯光、闭合窗帘,数码管实时显示室内温度,完成真实器件动作的同时更新相应功能模块在界面对应区域中的状态。当湿度大于65,打开风扇,否则关闭风扇。(3)安防模式:当时间介于0:11-06:04区间时,进入安防模式;执行关闭房间灯,闭合窗帘,开启人体红外检测,当人体红外检测到人时,则开启蜂鸣器报警、开启射灯模块;否则关闭蜂鸣器报警、关闭射灯模块,完成真实器件动作的同时更新相应功能模块在界面对应区域中的状态。当温度大于28、光照大于230并且湿度大于50,开启窗帘空调设为23,否则关闭窗帘,空调设为25。宏定义又称为宏代换、宏替换,简称“宏”。其语

38、法为“#define 标识符 字符串”,其中的标识符就是所谓的符号常量,也称为“宏名”。预处理(预编译)工作也叫做宏展开,是将宏名替换为字符串。这里的字符串可以是一条命令或者语句。简言之就是使用前面的标识符代替后面的语句。如“#define PI 3.1415926”,则程序中出现的PI全部换成3.1415926。在宏的使用中,应注意以下几点:(1)宏名一般用大写。(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义。(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。(4)宏定义末尾不加分号。(5)宏定义写在

39、函数的花括号外边,作用域为其后的程序,通常在文件的最开头。(6)可以用#undef命令终止宏定义的作用域。(7)宏定义可以嵌套。(8)字符串 中永远不包含宏。(9)宏定义不分配内存,变量定义分配内存。2.声明设置空调温度的全局变量“int ktwd=0;”。3.在“#include”的下面进行设备控制的宏定义,代码如下:#define FSK DataHandle.SerialWriteData(3,DCMotor,0,1);/风扇开#define FSG DataHandle.SerialWriteData(3,DCMotor,0,0);/风扇关#define SDK DataHandle.

40、SerialWriteData(2,RelaySingle,0,1);/射灯开#define SDG DataHandle.SerialWriteData(2,RelaySingle,0,0);/射灯关#define FMK DataHandle.SerialWriteData(1,Buzz,0,1);state_Buzz=1;ui-btnBuzz-setStyleSheet(border-image:url(:/images/red.png););/蜂鸣器开#define FMG DataHandle.SerialWriteData(1,Buzz,0,0);state_Buzz=0;ui-b

41、tnBuzz-setStyleSheet(border-image:url(:/images/green.png););/蜂鸣器关#define CLK DataHandle.SerialWriteData(3,StepMotor,3,600);state_StepMotor=1;1.打开项目“SmartHome”,进入“dialog.cpp”源文件。ui-btnStepMotor-setStyleSheet();/窗帘开#define CLG DataHandle.SerialWriteData(3,StepMotor,3,-600);state_StepMotor=0;ui-btnStep

42、Motor-setStyleSheet(border-image:url(:/images/1Curtain.png););/窗帘关#define KTK DataHandle.SerialWriteData(2,DigitalTube,0,ktwd);#define LED1K DataHandle.SerialWriteData(1,TTL_IO,0,led|=0 x08);state_LED1=1;ui-btnLED1-setStyleSheet(border-image:url(:/images/1Led1.png););/LED1开#define LED1G DataHandle.S

43、erialWriteData(1,TTL_IO,0,led&=0 x07);state_LED1=0;ui-btnLED1-setStyleSheet(border-image:url(););/LED1关#define LED2K DataHandle.SerialWriteData(1,TTL_IO,0,led|=0 x04);state_LED2=1;ui-btnLED2-setStyleSheet(border-image:url(:/images/1Led2.png););/LED2开#define LED2G DataHandle.SerialWriteData(1,TTL_IO,

44、0,led&=0 x0B);state_LED2=0;ui-btnLED2-setStyleSheet(border-image:url(););/LED2关#define LED3K DataHandle.SerialWriteData(1,TTL_IO,0,led|=0 x02);state_LED3=1;ui-btnLED3-setStyleSheet(border-image:url(:/images/1Led3.png););/LED3开#define LED3G DataHandle.SerialWriteData(1,TTL_IO,0,led&=0 x0D);state_LED3

45、=0;ui-btnLED3-setStyleSheet(border-image:url(););/LED3关#define LED4K DataHandle.SerialWriteData(1,TTL_IO,0,led|=0 x01);state_LED4=1;ui-btnLED4-setStyleSheet(border-image:url(:/images/1Led4.png););/LED4开#define LED4G DataHandle.SerialWriteData(1,TTL_IO,0,led&=0 x0E);state_LED4=0;ui-btnLED4-setStyleSh

46、eet(border-image:url(););/LED4关#define LEDK DataHandle.SerialWriteData(1,TTL_IO,0,led=0 x0F);state_LED1=1;state_LED2=1;state_LED3=1;state_LED4=1;ui-btnLED1-setStyleSheet(border-image:url(:/images/1Led1.png););ui-btnLED2-setStyleSheet(border-image:url(:/images/1Led2.png););ui-btnLED3-setStyleSheet(bo

47、rder-image:url(:/images/1Led3.png););ui-btnLED4-setStyleSheet(border-image:url(:/images/1Led4.png););/LED全开#define LEDG DataHandle.SerialWriteData(1,TTL_IO,0,led=0 x00);state_LED1=0;state_LED2=0;state_LED3=0;state_LED4=0;ui-btnLED1-setStyleSheet(border-image:url(););ui-btnLED2-setStyleSheet(border-i

48、mage:url(););ui-btnLED3-setStyleSheet(border-image:url(););ui-btnLED4-setStyleSheet(border-image:url(););/LED全关注意:若宏定义中的表达式过长,可用“”号作为换行标记。if(ui-tbMode-currentIndex()=1)/联动模式 if(ui-lblMode-text()=日间模式)LEDG;ktwd=sd;KTK;if(gz280)if(state_StepMotor=1)CLG;else if(state_StepMotor=0)CLK;4.根据“lblMode”中显示的模式

49、(功能已在上一篇内容中实现),在“getStr”方法中进行设备控制。代码如下:if(ui-lblMode-text()=夜间模式)LEDK;if(state_StepMotor=1)CLG;ktwd=wd;KTK;if(sd65)FSK;else FSG;if(ui-lblMode-text()=安防模式)LEDG;if(state_StepMotor=1)CLG;if(StateHumanInfrared=1)FMK;SDK;else FMG;SDG;if(wd28&gz230)if(state_StepMotor=0)CLK;ktwd=23;KTK;else if(state_StepMo

50、tor=1)CLG;ktwd=25;KTK;5.将定义好的宏应用于任务五对控件的设置中,以简化程序。代码如下:void Dialog:on_btnLED1_clicked()if(ui-tbMode-currentIndex()=0)if(state_LED1=0)LED1K;else LED1G;void Dialog:on_btnLED2_clicked()if(ui-tbMode-currentIndex()=0)if(state_LED2=0)LED2K;else LED2G;void Dialog:on_btnLED3_clicked()if(ui-tbMode-currentInd

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(智能家居系统项目二-实现智能家居软件系统的基本功能1课件.pptx)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|