通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂
注意:关闭计算机的杀毒软件,电脑管家,防火墙
1)基于TCP服务器的机械臂,端口号是8888, ip是Windows的ip;
查看Windows的IP:按住Windows+r 按键,输入cmd , 输入ipconfig
2)点击软件中的开启监听;
3)机械臂需要发送16进制数,共5个字节,协议如下
0xff 0x02 x y 0xff
0xff:起始结束协议,固定的;
0x02:控制机械手臂协议,固定的;
x:指定要操作的机械臂
0x00 红色摆臂
0x01 蓝色摆臂
y:指定角度
1 #include<myhead.h>
2 #define SER_PORT 8888 //与服务器保持一致
3 #define SER_IP "192.168.0.112" //服务端ip地址
4 #define CLI_PORT 6666 //客户端端口号
5 #define CLI_IP "192.168.111.186" //客户端ip地址
6 int main(int argc, const char *argv[])
7 {
8 //创建用于通信的套接字文件描述符
9 int cfd=socket(AF_INET,SOCK_STREAM,0);
10 if(cfd==-1)
11 {
12 perror("socket error");
13 return -1;
14 }
15
16 //2绑定IP地址和端口号
17 //2.1填充地址信息结构体
18 struct sockaddr_in cin;
19 cin.sin_family=AF_INET; //通信域
20 cin.sin_port=htons(CLI_PORT); //端口号
21 cin.sin_addr.s_addr=inet_addr(CLI_IP); //IP地址
22
23 //绑定工作
24 if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
25 {
26 perror("bind error");
27 return -1;
28 }
29
30 //3、连接到服务器
31 //3.1 填充服务器地址信息结构体
32 struct sockaddr_in sin;
33 sin.sin_family = AF_INET; //通信域
34 sin.sin_port = htons(SER_PORT); //服务器端口号
35 sin.sin_addr.s_addr = inet_addr(SER_IP); //服务器ip地址
36
37 //3.2 连接服务器
38 if(connect(cfd, (struct sockaddr*)&sin, sizeof(sin)) == -1)
39 {
40 perror("connect error");
41 return -1;
42 }
43 printf("连接服务器成功\n");
44
45 //准备数据
46 char rbuf[5] = {0xff, 0x02, 0x00, 0x10, 0xff};
47 char bbuf[5] = {0xff, 0x02, 0x01, 0x10, 0xff};
48
49 //发送给服务器,以初始化机械臂
50 /* send(cfd, rbuf,sizeof(rbuf), 0);
51 sleep(1);
52 send(cfd, bbuf,sizeof(bbuf), 0);
53 */
54
55 char signal;
56 while(signal!='q')
57 {
58 printf("请输入您需要的操作>>>>");
59 scanf("%c",&signal);
60 getchar();
61 switch(signal)
62 {
63 case 'w': //红臂角度增大
64
65 rbuf[3]+=1;
66 send(cfd, rbuf,sizeof(rbuf), 0);
67 break;
68
69 case 's': //红臂角度减小
70
71 rbuf[3]-=1;
72 send(cfd, rbuf,sizeof(rbuf), 0);
73 break;
74
75 case 'd': //蓝臂角度增大
76
77 bbuf[3]+=1;
78 send(cfd, bbuf,sizeof(bbuf), 0);
79 break;
80
81 case 'a': //蓝臂角度减小
82
83 bbuf[3]-=1;
84 send(cfd, bbuf,sizeof(bbuf), 0);
85 break;
86
87 case 'q': //退出
88
89 break;
90
91 default:
92 printf("输入错误,请重新输入!\n");
93 break;
94 }
95
96 }
97
98 //5、关闭套接字
99 close(cfd);
100
101 return 0;
102 }
思维导图