当前位置: 首页 > news >正文

如何选择网站定制公司石家庄公司建设网站

如何选择网站定制公司,石家庄公司建设网站,建立一个网站要什么条件,电脑系统优化工具目录 一、智能家居项目框架设计草图 二、框架代码文件工程建立 三、添加声音识别模块的串口读取功能 一、智能家居项目框架设计草图 代码思路讲解: 1、一个指令工厂,一个控制工厂,实际上就是通过链表链起来的数据。具体怎么链接起来&…

目录

一、智能家居项目框架设计草图

二、框架代码文件工程建立

三、添加声音识别模块的串口读取功能


一、智能家居项目框架设计草图

 代码思路讲解:

1、一个指令工厂,一个控制工厂,实际上就是通过链表链起来的数据。具体怎么链接起来,就是基于简单工厂模式的类与对象的概念,上一篇文章有学习记录。
2、主函数语音指令程序和tcp指令程序各起一个线程,然后通过指令名字找到对应的控制程序,实现对应的模块的功能。

二、框架代码文件工程建立

1、在桌面新建一个项目文件夹smartHose,然后在文件夹中创建如下文件:

2、把上述的所有文件,都加载到Source lnsight工具中,如下图代表加载完毕

3、创建inputCommand.h头文件

//面向指令工厂的头文件
#include <wiringPi.h>
#include <stdlib.h>struct InputCommander{char commandName[128];             //名字char command[32];                  //指令int (*Init)(char *name,char *ipAdress,char *port);  //操作函数 int (*getCommand)(char *cmd);      //获取数据函数char log[1024];                    //log日志获取struct InputCommander *next;
};

4、创建contrlDevices.h头文件

//设备头文件
#include <wiringPi.h>struct Devices{char deviceName[128]; //名字int status;           //状态int pinNum;           //引脚int (*open)(int pinNum);        //打开int (*close)(int pinNum);       //关闭int (*deviceInit)(int pinNum);  //设备初始化int (*readStatus)();  //火灾int (*changeStatus)(int status);struct Devices *next;
};struct Devices* addBathroomLightToDeviceLink(struct Devices *phead);
struct Devices* addUpstairLightToDeviceLink(struct Devices *phead);
struct Devices* addLivingRoomLightToDeviceLink(struct Devices *phead);
struct Devices* addRestaurantLightToDeviceLink(struct Devices *phead);
struct Devices* addFireToDeviceLink(struct Devices *phead);

5、创建bathroomLight.c文件

//浴室的灯
#include "contrlDevices.h"
#include<stdlib.h>int bathroomLightOpen(int pinNum){digitalWrite(pinNum,LOW);
}
int bathroomLightClose(int pinNum){digitalWrite(pinNum,HIGH);
}
int bathroomLightCloseInit(int pinNum){pinMode(pinNum,OUTPUT);digitalWrite(pinNum,HIGH);
}
int bathroomLightCloseStatus(int status){}
struct Devices bathroomLight={.deviceName = "bathroomLight",.pinNum = 26,.open = bathroomLightOpen,.close = bathroomLightClose,.deviceInit = bathroomLightCloseInit,.changeStatus = bathroomLightCloseStatus};
struct Devices* addBathroomLightToDeviceLink(struct Devices *phead){if(phead == NULL){	return &bathroomLight;}else{bathroomLight.next = phead;phead = &bathroomLight;}
};

6、创建livingroomLight.c文件

#include "contrlDevices.h"
#include<stdlib.h>int livingroomLightOpen(int pinNum){digitalWrite(pinNum,LOW);
}
int livingroomLightClose(int pinNum){digitalWrite(pinNum,HIGH);
}
int livingroomLightCloseInit(int pinNum){pinMode(pinNum,OUTPUT);digitalWrite(pinNum,HIGH);
}
int livingroomLightCloseStatus(int status){}
struct Devices livingroomLight={.deviceName = "livingroomLight",.pinNum = 27,.open = livingroomLightOpen,.close = livingroomLightClose,.deviceInit = livingroomLightCloseInit,.changeStatus = livingroomLightCloseStatus};
struct Devices* addLivingRoomLightToDeviceLink(struct Devices *phead){if(phead == NULL){	return &livingroomLight;}else{livingroomLight.next = phead;phead = &livingroomLight;}
};

7、创建restaurantLight.c文件

#include "contrlDevices.h"
#include<stdlib.h>int restaurantLightOpen(int pinNum){digitalWrite(pinNum,LOW);
}
int restaurantLightClose(int pinNum){digitalWrite(pinNum,HIGH);
}
int restaurantLightCloseInit(int pinNum){pinMode(pinNum,OUTPUT);digitalWrite(pinNum,HIGH);
}
int restaurantLightCloseStatus(int status){}
struct Devices restaurantLight={.deviceName = "restaurantLight",.pinNum = 28,.open = restaurantLightOpen,.close = restaurantLightClose,.deviceInit = restaurantLightCloseInit,.changeStatus = restaurantLightCloseStatus
};
struct Devices* addRestaurantLightToDeviceLink(struct Devices *phead){if(phead == NULL){	return &restaurantLight;}else{restaurantLight.next = phead;phead = &restaurantLight;}
};

8、创建upstairLight.c文件

//二楼灯
#include "contrlDevices.h"
#include<stdlib.h>int upstairLightOpen(int pinNum){digitalWrite(pinNum,LOW);
}
int upstairLightClose(int pinNum){digitalWrite(pinNum,HIGH);
}
int upstairLightCloseInit(int pinNum){pinMode(pinNum,OUTPUT);digitalWrite(pinNum,HIGH);
}
int upstairLightCloseStatus(int status){}
struct Devices upstairLight={.deviceName = "upstairLight",.pinNum = 29,.open = upstairLightOpen,.close = upstairLightClose,.deviceInit = upstairLightCloseInit,.changeStatus = upstairLightCloseStatus
};
struct Devices* addUpstairLightToDeviceLink(struct Devices *phead){if(phead == NULL){	return &upstairLight;}else{upstairLight.next = phead;phead = &upstairLight;}
};

9、创建fire.c文件

//火灾报警
#include "contrlDevices.h"
#include<stdlib.h>int fireIfOrNotInit(int pinNum){pinMode(pinNum,INPUT);digitalWrite(pinNum,HIGH);
}
int fireStatusRead(int pinNum){return digitalRead(pinNum);
}
struct Devices fireIfOrNot={.deviceName = "fireIfOrNot",.pinNum = 25,.deviceInit = fireIfOrNotInit,.readStatus = fireStatusRead};
struct Devices* addFireToDeviceLink(struct Devices *phead){if(phead == NULL){	return &fireIfOrNot;}else{fireIfOrNot.next = phead;phead = &fireIfOrNot;}
};

10、创建mainPro.c主函数文件

#include <stdio.h>
#include "contrlDevices.h"
#include <string.h>
#include "inputCommand.h"struct Devices* findDeviceByName(char* name,struct Devices* phead){struct Devices *tmp = phead;if(phead == NULL){return NULL;}else{while(tmp != NULL){if(strcmp(tmp->deviceName,name) == 0){return tmp;}tmp = tmp->next;}return NULL;}
};int main(){char name [128];struct Devices *tmp = NULL;if(-1 == wiringPiSetup()){return -1;}struct Devices *pdeviceHead = NULL;pdeviceHead = addBathroomLightToDeviceLink(pdeviceHead);pdeviceHead = addUpstairLightToDeviceLink(pdeviceHead);pdeviceHead = addLivingRoomLightToDeviceLink(pdeviceHead);pdeviceHead = addRestaurantLightToDeviceLink(pdeviceHead);pdeviceHead = addFireToDeviceLink(pdeviceHead);while(1){printf("Input:\n");scanf("%s",name);tmp = findDeviceByName(name,pdeviceHead);if(tmp != NULL){tmp->deviceInit(tmp->pinNum);tmp->open(tmp->pinNum);}}//1、指令工厂初始化//2、设备控制工厂初始化//3、线程池建立//3.1、语音线程//3.2、socket线程//3.3、摄像头线程//3.4、火灾线程
}

把上述的代码传到树莓派的终端,用FileZilla传即可,然后执行结果:

gcc mainPro.c upstairLight.c bathroomLight.c livingroomLight.c restaurantLight.c -lwiringPi -o test1

效果演示:(虽然没有装到实际的智能家居里,但是小灯亮了,说明程序是可以正常用的🤭)

三、添加声音识别模块的串口读取功能

这里主要通过主控芯片树莓派的串口跟语音模块连接。
树莓派的T接语音模块的R
树莓派的R接语音模块的T
然后就是供电

我们先把语音模块的代码整合到指令链表当中去:
1.语音控制设备voiceContrl.c

#include "inputCommand.h"
#include <stdlib.h>
#include <wiringPi.h>
#include <stdio.h>
#include <wiringSerial.h>
#include <unistd.h>//串口int voiceInit(struct InputCommander *voicer,char *ipAdress,char *port){ //声音初始化int fd;if((fd = serialOpen(voicer->deviceName,9600)) == -1){  //初始化串口,波特率9600exit(-1);}voicer->fd = fd;return fd;
} 
int voiceGetCommand(struct InputCommander *voicer){int nread = 0;nread = (voicer->fd,voicer->command,sizeof(voicer->command));if(nread == 0){printf("usart for voice read over time\n");}else{return nread;}
}
struct InputCommander voiceContrl = {.commandName = "voice", .deviceName = "dev/ttyAMA0",.command = {'\0'},.Init = voiceInit,.getCommand = voiceGetCommand,.log = {'\0'},.next = NULL,};
struct InputCommander* addvoiceContrlToInputCommandLink(struct InputCommander *phead){if(phead == NULL){return &voiceContrl;}else{voiceContrl.next = phead;phead = &voiceContrl;}
};

2.控制设备的头文件inputCommand.h

//面向指令工厂的头文件
#include <wiringPi.h>
#include <stdlib.h>struct InputCommander{char commandName[128];  //声音的名字char command[32];       char deviceName[128];   //串口的名字int (*Init)(struct InputCommander *voicer,char *ipAdress,char *port); int (*getCommand)(struct InputCommander *voicer);char log[1024];int fd;struct InputCommander *next;};
struct InputCommander* addvoiceContrlToInputCommandLink(struct InputCommander *phead);

3.在mainPro.c主函数中添加语音模块的函数

#include <stdio.h>
#include "contrlDevices.h"
#include <string.h>
#include "inputCommand.h"struct Devices* findDeviceByName(char* name,struct Devices* phead){struct Devices *tmp = phead;if(phead == NULL){return NULL;}else{while(tmp != NULL){if(strcmp(tmp->deviceName,name) == 0){return tmp;}tmp = tmp->next;}return NULL;}
};
int main(){char name [128];struct Devices *tmp = NULL;if(-1 == wiringPiSetup()){return -1;}struct Devices        *pdeviceHead = NULL;   //设备工厂struct InputCommander *pCommandHead = NULL;  //指令工厂pdeviceHead = addBathroomLightToDeviceLink(pdeviceHead);pdeviceHead = addUpstairLightToDeviceLink(pdeviceHead);pdeviceHead = addLivingRoomLightToDeviceLink(pdeviceHead);pdeviceHead = addRestaurantLightToDeviceLink(pdeviceHead);pdeviceHead = addFireToDeviceLink(pdeviceHead);  //火灾pCommandHead = addvoiceContrlToInputCommandLink(pCommandHead); //串口while(1){printf("Input:\n");scanf("%s",name);tmp = findDeviceByName(name,pdeviceHead);if(tmp != NULL){tmp->deviceInit(tmp->pinNum);tmp->open(tmp->pinNum);}}
}

4.把上述的代码传到树莓派的终端,用FileZilla传即可,然后执行结果:

gcc mainPro.c upstairLight.c bathroomLight.c fire.c livingroomLight.c restaurantLight.c voiceContrl.c -lwiringPi -o test1

http://www.yayakq.cn/news/948603/

相关文章:

  • 青岛做网站多少钱微信怎么注册
  • 那个视频网站可以做gif开发软件需要多少钱k
  • 河南建设银行官方网站html静态网站开发实验
  • 虚拟主机可建站1个是不是只能放一个网站logo参考网站
  • 建站之星 discuzwordpress cart插件
  • 如何写网站开发的分析制作网页可以有效控制什么的位置
  • 机关单位网站建设管理制度网站开发vs2013
  • h5游戏网站入口中国企业500强排名
  • 福州网站建设要找嘉艺网络大连住房保障网官网
  • 怎么测网站流量吗大学生创新创业大赛
  • png素材网站网站建设 作用
  • 东莞阿里巴巴网站建设千图网素材免费
  • 权威的深圳网站推广进入公众号的欢迎语
  • 北京网站建设佳v询 lotlek 能上词中山网站建设公司哪个好
  • 云南工程建设投标网上报名网站素材视频
  • 招远做网站案例wordpress设置的页面跳转失败
  • 北京网站设计价格织梦网站后台密码忘记了怎么做
  • 百度网站的设计风格怎样做网站二维码
  • windows做网站服务器济南饰品行业网站开发
  • 网站建设培训价格设计网站卖钱
  • 做搬家服务网站问卷调查的目的wordpress的第三方登录插件
  • 做网站用域名不备案怎么弄电商网站建设注意
  • 红色大气宽屏企业网站源码 带后台中英文双语外贸企业网站源码全免费建立自己的网站
  • 诚信的小程序开发兼职网站学院网站建设自查报告
  • 已有网站做百度推广wordpress多站点开启
  • 网站建设协议书是否贴花大连百度快速优化排名
  • flash 网站头部网站建设规划书范文500字
  • 不懂外贸做外贸网站好做吗新媒体运营公司排名
  • 培训型网站建设方案嘉兴网站建设运营
  • 用vs做网站邢台建设企业网站价格