优化网站,网站静态页面,淘宝优惠券网站用什么软件做,宣传片拍摄方案范本封装语音线程#xff08;语音通过串口和主控设备进行交流#xff09;实现对智能家居中各种灯光的控制
mainPro.c(主函数)
#include stdio.h
#include controlDevice.h
#include inputCommand.h
#include pthread.hstruct Devices …封装语音线程语音通过串口和主控设备进行交流实现对智能家居中各种灯光的控制
mainPro.c(主函数)
#include stdio.h
#include controlDevice.h
#include inputCommand.h
#include pthread.hstruct Devices *pdeviceHead NULL; //设备工厂链表头
struct InputCommander *pcommandHead NULL; //指令工厂链表头struct Devices* findDeviceByName(struct Devices *phead,char *name) //在设备链表中查找设备语音和socket均可使用
{struct Devices *tmp phead;if(tmp NULL){printf(The devicesLink is NULL);return NULL;}else{while(tmp ! NULL){if(strcmp(tmp-deviceName,name) 0){return tmp;}tmp tmp-next;}return NULL; }}struct InputCommander* findCommanderByName(struct InputCommander *phead,char *name) //在控制链表中查找相关控制
{struct InputCommander *tmp phead;if(tmp NULL){printf(The commanderLink is NULL);return NULL;}else{while(tmp ! NULL){if(strcmp(tmp-commandName,name) 0){return tmp;}tmp tmp-next;}return NULL; }}void doCommand(struct InputCommander *cmd) //根据传入的命令控制相关设备
{struct Devices *tmp NULL;if(strstr(cmd-command,START)){ //初始化所有设备tmp findDeviceByName(pdeviceHead,bathroomLight);if(tmp ! NULL) tmp-deviceInit(tmp-pinNum);tmp findDeviceByName(pdeviceHead,bedroomLight);if(tmp ! NULL) tmp-deviceInit(tmp-pinNum);tmp findDeviceByName(pdeviceHead,livingroomLight);if(tmp ! NULL) tmp-deviceInit(tmp-pinNum);tmp findDeviceByName(pdeviceHead,restaurantLight);if(tmp ! NULL) tmp-deviceInit(tmp-pinNum);printf(The devices all init success\n);}else if(strstr(cmd-command,OL1)){ //打开卫生间灯tmp findDeviceByName(pdeviceHead,bathroomLight);if(tmp ! NULL) tmp-open(tmp-pinNum);printf(The bathroomLight already open\n);}else if(strstr(cmd-command,CL1)){ //关闭卫生间灯tmp findDeviceByName(pdeviceHead,bathroomLight);if(tmp ! NULL) tmp-close(tmp-pinNum);printf(The bathroomLight already close\n);}else if(strstr(cmd-command,OL2)){ //打开卧室灯tmp findDeviceByName(pdeviceHead,bedroomLight);if(tmp ! NULL) tmp-open(tmp-pinNum);printf(The bedroomLight already open\n);}else if(strstr(cmd-command,CL2)){ //关闭卧室灯tmp findDeviceByName(pdeviceHead,bedroomLight);if(tmp ! NULL) tmp-close(tmp-pinNum);printf(The bedroomLight already close\n);}else if(strstr(cmd-command,OL3)){ //打开客厅灯tmp findDeviceByName(pdeviceHead,livingroomLight);if(tmp ! NULL) tmp-open(tmp-pinNum);printf(The livingroomLight already open\n);}else if(strstr(cmd-command,CL3)){ //关闭客厅灯tmp findDeviceByName(pdeviceHead,livingroomLight);if(tmp ! NULL) tmp-close(tmp-pinNum);printf(The livingroomLight already close\n);}else if(strstr(cmd-command,OL4)){ //打开餐厅灯tmp findDeviceByName(pdeviceHead,restaurantLight);if(tmp ! NULL) tmp-open(tmp-pinNum);printf(The restaurantLight already open\n);}else if(strstr(cmd-command,CL4)){ //关闭餐厅灯tmp findDeviceByName(pdeviceHead,restaurantLight);if(tmp ! NULL) tmp-close(tmp-pinNum);printf(The restaurantLight already close\n);}else if(strstr(cmd-command,ALL1)){ //打开所有的灯tmp findDeviceByName(pdeviceHead,bathroomLight);if(tmp ! NULL) tmp-open(tmp-pinNum);tmp findDeviceByName(pdeviceHead,bedroomLight);if(tmp ! NULL) tmp-open(tmp-pinNum);tmp findDeviceByName(pdeviceHead,livingroomLight);if(tmp ! NULL) tmp-open(tmp-pinNum);tmp findDeviceByName(pdeviceHead,restaurantLight);if(tmp ! NULL) tmp-open(tmp-pinNum);printf(The Light all open success\n);}else if(strstr(cmd-command,ALL0)){ //关闭所有的灯tmp findDeviceByName(pdeviceHead,bathroomLight);if(tmp ! NULL) tmp-close(tmp-pinNum);tmp findDeviceByName(pdeviceHead,bedroomLight);if(tmp ! NULL) tmp-close(tmp-pinNum);tmp findDeviceByName(pdeviceHead,livingroomLight);if(tmp ! NULL) tmp-close(tmp-pinNum);tmp findDeviceByName(pdeviceHead,restaurantLight);if(tmp ! NULL) tmp-close(tmp-pinNum);printf(The Light all close success\n);}}void* voice_pthread(void *data) //语音识别串口通信处理线程函数
{struct InputCommander *voiceHandler;int n_read;voiceHandler findCommanderByName(pcommandHead,voice);if(voiceHandler NULL){printf(find voice error\n);pthread_exit(NULL);}else{if(voiceHandler-Init(voiceHandler) 0 ){printf(%s init error\n,voiceHandler-commandName);pthread_exit(NULL);}elseprintf(%s init success\n,voiceHandler-commandName);while(1){n_read voiceHandler-getCommand(voiceHandler);if(n_read 0){printf(no command from voice\n);}else{//根据指令进行控制printf(read %d message--:%s,n_read,voiceHandler-command);doCommand(voiceHandler); //执行命令}}}}int main()
{pthread_t voice_pth;if(wiringPiSetup()0){//初始化wiringPi外设库printf(wiringPi Init failed\n);return -1;}//1.指令工厂初始化pcommandHead addVoiceToCommandLink(pcommandHead); //将语音控制加入命令控制链表//2.设备控制工厂初始化pdeviceHead addBathroomLightToDeviceLink(pdeviceHead); //将卫生灯加入设备链表pdeviceHead addbedroomLightToDeviceLink(pdeviceHead); //将卧室灯加入设备链表pdeviceHead addRestaurantLightToDeviceLink(pdeviceHead); //将餐厅灯加入设备链表pdeviceHead addLivingroomLightToDeviceLink(pdeviceHead); //将客厅灯加入设备链表pdeviceHead addFireToDeviceLink(pdeviceHead); //将火灾检测加入设备链表pdeviceHead addBeepToDeviceLink(pdeviceHead); //将蜂鸣器加入设备链表//3.线程池建立//3.1语音线程int ret pthread_create(voice_pth,NULL,voice_pthread,NULL);if (ret ! 0) {printf(Failed to create voicethread.\n);return -1;}//等待线程退出pthread_join(voice_pth,NULL);return 0;
}
inputCommand.h(控制类)
#include wiringPi.h
#include stddef.h
#include wiringSerial.h
#include stdio.h
#include unistd.h
#include sys/types.h
#include sys/socket.h
#include stdlib.h
#include arpa/inet.h
#include netinet/in.h
#include string.hstruct InputCommander
{char commandName[128]; //命令名字char command[32]; //具体命令char deviceName[128]; //打开的设备名比如串口char port[12]; //端口号char ipAddress[32]; //ip地址int (*Init)(struct InputCommander *commder);int (*getCommand)(struct InputCommander *commder);int fd; //文件描述符int baud; //波特率int s_fd; //socket服务端文件描述符int c_fd; //客户端文件描述符char log[1024]; //日志struct InputCommander *next;
};struct InputCommander *addVoiceToCommandLink(struct InputCommander *phead); //语音控制加入命令控制链表voiceControl.c(语音)
#include inputCommand.hint voiceInit(struct InputCommander *voiceMes)
{int fd;fd serialOpen(voiceMes-deviceName,voiceMes-baud);//打开串口if(fd0){printf(open serial fail!\r\n);//判断串口打开是否成功return -1;}elsevoiceMes-fd fd;//传回串口文件描述符return fd;}int voiceGetCommand(struct InputCommander *voiceMes){int nread 0;memset(voiceMes-command,0,sizeof(voiceMes-command));nread read(voiceMes-fd,voiceMes-command,sizeof(voiceMes-command));return nread;}struct InputCommander voiceControl {.commandName voice,.command {\0},.deviceName /dev/ttyAMA0,.baud 9600,.Init voiceInit,.getCommand voiceGetCommand,.log {\0},.next NULL,};struct InputCommander *addVoiceToCommandLink(struct InputCommander *phead)
{if(phead NULL){return voiceControl;}else{voiceControl.nextphead;phead voiceControl;return phead;}
}