卖网格布怎样做网站,做一个网上商城需要多少钱,wordpress iis 发布,网站建设如何做用户名密码智能家居功能细节拆分#xff1a;
控制端支持语音设备的输入#xff08;用到之前所学习的LD3320语音识别模块#xff09;或者是socket客户端#xff08;这个客户端可以是ftp项目的客户端也可以是Android的app#xff09;#xff0c;主控芯片是树莓派#xff0c;既接收语…智能家居功能细节拆分
控制端支持语音设备的输入用到之前所学习的LD3320语音识别模块或者是socket客户端这个客户端可以是ftp项目的客户端也可以是Android的app主控芯片是树莓派既接收语音模块的控制指令还可以接收来自客户端网络TCP的指令然后树莓派编写程序时会编写两个线程一个用于语音模块串口线程、一个用于客户端线程然后树莓派会通过IO的高低电平来控制继电器进而控制不同房间的灯的亮灭。同样是通过IO口的输入功能来检测火焰传感器电平的高低判断进而驱动蜂鸣器是否发出警报。还有就是摄像头模块用于视频监控和人脸识别然后还会用到WemosD1因为在实际开发时树莓派只有一个串口为了学习更多的知识我们采用433M射频模块基于串口通信控制窗帘和泳池灯使用红外模块基于串口通信控制电风扇、电视、空调等红外设备这就需要两个串口了就需要使用第三方设备来增加树莓派的串口进而实现相应的功能。编码模式采用普通编码模式和内核设计模式采用内核设计模式设计整个项目。
智能家居代码机构——简单工厂模式 什么是设计模式 百度百科解释 软件设计模式Design pattern又称设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 总的来说 就是代码设计经验的总结能够让代码稳定拓展性更强一系列编程的思想代码容易被他人理解保证代码可靠性程序的重用性。设计模式有23种要慢慢的积累使用设计模式会增强代码的稳定性在代码里面添加某些功能不会将代码其他部分的功能破坏掉。 算法 算法不是设计模式因为算法致力于解决问题而非设计问题设计模式通常描述了一组相互紧密作用的类与对象。
C语言面向对象引入类和对象的概念
类 类是一种用户定义的引用数据类型也称类类型。在C语言中和结构体差不多对象 对象是对客观事物的抽象类是对对象的抽象。类是一种抽象的数据类型。它们的关系是对象是类的实例类是对象的模板。
程序举例
struct Animal
{char [128];int age;int sex;//成员属性void (*peat)();void (*pbeat)();//成员方法
}
struct Animal dog;
struct Animal cat;//dog cat 是类Animal的一种对象C语言面向对象举例
#include stdio.h
//类 抽象 模板
struct Animal
{char name[128];int age;int sex;//成员属性void (*peat)();void (*pbeat)();//成员方法这里是函数指针类型。
};
void dogEat()
{printf(eat meat\n);
}
void catEat()
{printf(ear fish\n);
}
void dogBeat()
{printf(咬\n);
}
void catBeat()
{printf(抓\n);
}
int int main()
{struct Animal dog; struct Animal cat;//dog cat 是类Animaldog.peatdogEat;cat.peat catEat;dog.pbeatdogBeat;cat.pbeatcatBeat;//函数名相当于指针dog.peat();dog.pbeat();cat.peat();cat.pbeat();return 0;
}C结构体的另一种使用方法在前面驱动代码的编写中使用过
#include stdio.h
//l类 抽象 模板
struct Animal
{char name[128];int age;int sex;//成员属性void (*peat)();void (*pbeat)();//成员方法
};
void dogEat()
{printf(eat meat\n);
}
void catEat()
{printf(ear fish\n);
}
void dogBeat()
{printf(咬\n);
}
void catBeat()
{printf(抓\n);
}
int main()
{struct Animal dog1{阿黄,11,20dogEat,dogBeat};//这是之前的写法必须按照顺序来//下面是新的写法可以选择性的为模板里面的元素赋值struct Animal dog{.pbeatdogBeat,.peatdogEat} ;struct Animal cat{.pbeatcatBeat,.peatcatEat} ;//结构体新的用法dog.peat();dog.pbeat();cat.peat();cat.pbeat();return 0;
}什么是工厂模式
工厂模式Factory Pattern是最常用的设计模式之一。这种类型的设计模式属于创建型模式它提供了一种创建对象的最佳方式。在工厂模式中我们在创建对象时不会对客户端暴露创建逻辑并且是通过使用一个共同的接口来指向新创建的对象。下面通过软件将以上代码采用简单工厂模式在sourceInsight里面进行编写以下是简单工厂模式的示例工厂模式使代码逻辑和思路更加清晰便于修改和添加。
首先在选定位置新建一个文件夹然后在文件夹里面新建dog.c、animal.h、cat.c和mianpro.c 然后再新建一个文件夹存放sourceInsight的工程文件有关sourceInsight的用法如下图所示 然后将对应的代码写入对应的文件比如dog.c这个文件就是存放dog这个对象的相关行为并且提供让主程序调用的函数API将dog这个对象添加到链表中去这个就像是以后的智能家居为实现整个控制系统需要添加的各个功能模块一个供能模块就是一个文件putdogLink 是将dog对象插入进链表的API接口这里采用头插法进行插入即先插入的在后边。
#includeanimal.h
void dogEat()
{printf(eat meat\n);
}
void dogBeat()
{printf(咬\n);
}
struct Animal dog{.namequan,.pbeatdogBeat,.peatdogEat
};
struct Animal* putdogLink(struct Animal*phead)
{if(pheadNULL){pheaddog;return phead;}else{dog.nextphead;pheaddog;return phead;}}然后再将cat.c的代码进行编写意思和上面一样
#include animal.h
void catEat()
{printf(ear fish\n);
}
void catBeat()
{printf(抓\n);
}
struct Animal cat{.nameTom,.pbeatcatBeat,.peatcatEat} ;
struct Animal *putcatLink(struct Animal *phead)
{if(pheadNULL){pheadcat;return phead;}else{cat.nextphead;pheadcat;return phead;}
}因为dog.c和cat.c里面都含有struct Animal 这个结构体所以应该将其声明在animal.h 这个头文件里面然后还需要声明供主程序调用的API函数接口。
#include stdio.h
//l类 抽象 模板
struct Animal
{char name[128];int age;int sex;//成员属性void (*peat)();void (*pbeat)();//成员方法struct Animal*next;
};
struct Animal* putdogLink(struct Animal*phead);
struct Animal *putcatLink(struct Animal *phead);最后就是编写mainpro.c主函数下面函数还编写了一个可供用户输入的然后查找响应节点的函数用户输入要查找的节点名称找到后返回指向该节点的指针通过指针就可以对该节点进行操作就把它当做链表的一个节点即可。
#include animal.h
#includestring.h
struct Animal *findUtilByName(char *str,struct Animal * phead)
{struct Animal* tmpphead;if(tmpNULL){printf(空链表\n);return NULL;}else{while(tmp!NULL){if(strcmp(tmp-name,str)0){return tmp; }tmptmp-next;}return NULL;}
}
int main()
{char buf[128]{\0};struct Animal *pheadNULL;struct Animal *ptemp;phead putcatLink(phead);phead putdogLink(phead);while(1){printf(请输入你想要动物的名字(TOm or quan)\n);scanf(%s,buf);ptemp findUtilByName(buf,phead);if(ptemp!NULL){ptemp-pbeat();ptemp-peat();}memset(buf,\0,sizeof(buf));}return 0;
}然后把整个文件夹拖进虚拟机里面运行一下gcc *.c -o factory *是通配符。然后执行以下就可以了运行如下 根据以上简单工厂模式智能家居设计的时候就可以设计为指令工厂、main函数、控制工厂指令工厂面就存放指令比如语音指令、客户端指令等将这些指令串为一个链表控制工厂就是控制一些家庭设备比如各个房间的灯门锁、串口等创建一个链表然后根据指令去查找对应的控制结点main函数里面首先创建两个链表指令工厂、控制工厂然后接下来创建两个线程一个是语音的、一个是客户端的在每个线程里面在接受到指令后去控制工厂里面去查找对应的控制设备然后进行一系列操作。根据上面的叙述我们可以创建以下架构的代码文件工程指令工场和控制工场的头文件就是以下图片中的两个头文件。然后将这些文件导入到sourceInsight里面进行代码的编写。
以上是智能家居开发的软件框架构建准备工作接下来开始代码的编写。