记得也要去修改这个玩意儿
实现代码
1
2 #include<wiringSerial.h>
3 #include<wiringPi.h>
4 #include<stdio.h>
5 #include<string.h>
6 #include<unistd.h>
7
8 int main()
9 {
10 int fd;
11
12 char cmd[128] = {'\0'};
13 int nread;
14
15 wiringPiSetup();
16
17 fd = serialOpen("/dev/ttyAMA0",9600);//注意9600为语音识别模块所要求的的波特率
18
19 while(1){
20 nread = read(fd, cmd , sizeof(cmd));
21 if(strlen(cmd) == 0){
22 printf("chaoshi\n");
23 continue;
24 }
25 printf("getData: %dbyte,contex:%s\n",nread,cmd);
26 memset(cmd,'\0',sizeof(cmd)/sizeof(char));
27 }
28
29 return 0;
30 }
运行结果:
缺点:超过八个字节就会分行显示。
改进后的代码:
#include<wiringSerial.h>
#include<wiringPi.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>
int main()
{
int fd;
char cmd[128] = {'\0'};
int nread;
wiringPiSetup();
fd = serialOpen("/dev/ttyAMA0",9600);
while(1){
nread = read(fd, cmd , sizeof(cmd));
if(strlen(cmd) == 0){
printf("chaoshi\n");
continue;
}
if(strstr(cmd,"open") != NULL)//strstr函数:找字符串中的子串,若子串存在则返回该位置,不存在则返回NULL
{
printf("open light\n"); //要找厂家拿语音模块的代码去更改 把相应的代码改成 字母或者数字 不能是中文 否则会树莓派乱码
}
if( strstr(cmd,"close") != NULL)
{
printf("close light\n");
}
// printf("getData: %dbyte,contex:%s\n",nread,cmd);
memset(cmd,'\0',sizeof(cmd)/sizeof(char));
}
return 0;
}
运行结果:
#include<stdio.h>
#include<wiringPi.h>
#include<string.h>
#include<stdlib.h>
#include<wiringSerial.h>
#include<unistd.h>
#define JDQ1 26
#define JDQ2 27
#define JDQ3 28
#define JDQ4 29
//初始化继电器组
void init_jidianqi(void)
{
if(wiringPiSetup ()==-1){
perror("woring");
exit(-1);
}
pinMode (JDQ1, OUTPUT);
pinMode (JDQ2, OUTPUT);
pinMode (JDQ3, OUTPUT);
pinMode (JDQ4, OUTPUT);
digitalWrite (JDQ1, HIGH);
digitalWrite (JDQ2, HIGH);
digitalWrite (JDQ3, HIGH);
digitalWrite (JDQ4, HIGH);
}
void JDQ_ctl(char *cmd)
{
if(!strcmp(cmd,"open 1")){
digitalWrite (JDQ1, LOW);
}
else if(!strcmp(cmd,"close 1")){
digitalWrite (JDQ1, HIGH);
}
else if(!strcmp(cmd,"open 2")){
digitalWrite (JDQ2, LOW);
}
else if(!strcmp(cmd,"close 2")){
digitalWrite (JDQ2, HIGH);
}
else if(!strcmp(cmd,"open 3")){
digitalWrite (JDQ3, LOW);
}
else if(!strcmp(cmd,"close 3")){
digitalWrite (JDQ3, HIGH);
}
else if(!strcmp(cmd,"open 4")){
digitalWrite (JDQ4, LOW);
}
else if(!strcmp(cmd,"close 4")){
digitalWrite (JDQ4, HIGH);
}
}
int main(void)
{
int fd;
int nread;
fd = serialOpen("/dev/ttyAMA0",9600);
char cmd[128]={'\0'};
init_jidianqi();
while(1){
nread = read(fd, cmd , sizeof(cmd));
if(strlen(cmd) == 0){
printf("chaoshi\n");
continue;
}
if(strstr(cmd,"open box") != NULL)
{
printf("open box\n");
strcpy(cmd,"open 1");
JDQ_ctl(cmd);
}
else if(strstr(cmd,"close bo") != NULL)
{
printf("close box\n");
strcpy(cmd,"close 1");
JDQ_ctl(cmd);
}
else if(strstr(cmd,"open li") != NULL)
{
printf("open light\n");
strcpy(cmd,"open 2");
JDQ_ctl(cmd);
}
else if(strstr(cmd,"close li") != NULL)
{
printf("close light\n");
strcpy(cmd,"close 2");
JDQ_ctl(cmd);
}
memset(cmd,'\0',sizeof(cmd)/sizeof(char));
}
free(cmd);
return 0;
}