1.机械臂控制程序
#include <head.h>
/*
*机械臂服务器的端口号:8888
* IPv4地址:192.168.125.24
*/
#define CLIENT_IP "192.168.125.218"
#define CLIENT_PORT 6789
#define SERVER_IP "192.168.125.24"
#define SERVER_PORT 8888
void serial_command_line(void)
{
printf("||-------Robot Arm Control Command Line------||\n");
printf("||-------------------------------------------||\n");
printf("===============================================\n");
printf("||------------[0]机械臂回归初始状态----------||\n");
printf("||------------[1]机械臂每次转动1°------------||\n");
printf("||------------[2]机械臂每次转动5°------------||\n");
printf("||------------[3]机械臂每次转动10°-----------||\n");
printf("||------------[4]机械臂每次转动20°-----------||\n");
printf("||------------[5]机械臂每次转动30°-----------||\n");
printf("||------------[6]机械臂每次转动60°-----------||\n");
printf("||------------[7]机械臂每次转动90°-----------||\n");
printf("||------------[8]退出机械臂控制系统----------||\n");
printf("||-------------------------------------------||\n");
printf("===============================================\n");
}
int main(int argc, const char *argv[])
{
int robot_arm_control_socket_fd=socket(AF_INET,SOCK_STREAM,0);
if(robot_arm_control_socket_fd==-1)
{
perror("robot arm control socket error");
return -1;
}
printf("robot arm control socket success\n");
int reuse=1;
if(setsockopt(robot_arm_control_socket_fd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1)
{
perror("setsockopt error");
return -4;
}
printf("setsockopt success\n");
struct sockaddr_in client_sin;
client_sin.sin_family = AF_INET;
client_sin.sin_port = htons(CLIENT_PORT);
client_sin.sin_addr.s_addr = inet_addr(CLIENT_IP);
if(bind(robot_arm_control_socket_fd,(struct sockaddr*)&client_sin,sizeof(client_sin))==-1)
{
perror("robot arm control bind error");
return -2;
}
printf("robot arm control bind success\n");
struct sockaddr_in server_sin;
server_sin.sin_family = AF_INET;
server_sin.sin_port = htons(SERVER_PORT);
server_sin.sin_addr.s_addr = inet_addr(SERVER_IP);
if(connect(robot_arm_control_socket_fd,(struct sockaddr*)&server_sin,sizeof(server_sin))==-1)
{
perror("robot arm control connect error");
return -3;
}
printf("robot arm control connect success\n");
/*
*机械臂控制信号数据包协议(使用16进制)
* 0xff 0x02 x y 0xff
* x:要操作的机械臂 0x00 红色机械臂
* 0x01 蓝色机械臂
* y:机械臂的转动角度
*
* w 红色机械臂的角度增大
* s 红色机械臂的角度减小
* a 蓝色机械臂的角度减小
* d 蓝色机械臂的角度增大
*/
char red_robot_arm_control_buff[5]={0xFF,0x02,0x00,0x00,0xFF};
unsigned char blue_robot_arm_control_buff[5]={0xFF,0x02,0x01,0x00,0xFF};
char c;
char ch;
printf("正在进入机械臂控制系统,请稍后……\n");
sleep(1);
while(1)
{
serial_command_line();
scanf("%c",&ch);
while(getchar()!=10);
switch(ch)
{
case '0':{
*(red_robot_arm_control_buff+3)=0x00;
*(blue_robot_arm_control_buff+3)=0x00;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
break;
}
case '1':{
while(1)
{
memset(&c,0,sizeof(c));
printf("请输入控制命令(w s a d)\n");
scanf("%c",&c);
while(getchar()!=10);
if(c=='w'&&*(red_robot_arm_control_buff+3)>=(-90)&&*(red_robot_arm_control_buff+3)<90)
{
(*(red_robot_arm_control_buff+3))++;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='s'&&*(red_robot_arm_control_buff+3)>(-90)&&*(red_robot_arm_control_buff+3)<=90)
{
(*(red_robot_arm_control_buff+3))--;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='a'&&*(blue_robot_arm_control_buff+3)>0&&*(blue_robot_arm_control_buff+3)<=180)
{
(*(blue_robot_arm_control_buff+3))--;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='d'&&*(blue_robot_arm_control_buff+3)>=0&&*(blue_robot_arm_control_buff+3)<180)
{
(*(blue_robot_arm_control_buff+3))++;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='~')
{
break;
}
else
{
printf("控制命令输入错误(超出可控范围),请重新输入控制命令\n");
}
}
break;
}
case '2':{
while(1)
{
memset(&c,0,sizeof(c));
printf("请输入控制命令(w s a d)\n");
scanf("%c",&c);
while(getchar()!=10);
if(c=='w'&&*(red_robot_arm_control_buff+3)>=(-90)&&*(red_robot_arm_control_buff+3)<90)
{
(*(red_robot_arm_control_buff+3))+=5;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='s'&&*(red_robot_arm_control_buff+3)>(-90)&&*(red_robot_arm_control_buff+3)<=90)
{
(*(red_robot_arm_control_buff+3))-=5;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='a'&&*(blue_robot_arm_control_buff+3)>0&&*(blue_robot_arm_control_buff+3)<=180)
{
(*(blue_robot_arm_control_buff+3))-=5;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='d'&&*(blue_robot_arm_control_buff+3)>=0&&*(blue_robot_arm_control_buff+3)<180)
{
(*(blue_robot_arm_control_buff+3))+=5;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='~')
{
break;
}
else
{
printf("控制命令输入错误(超出可控范围),请重新输入控制命令\n");
}
}
break;
}
case '3':{
while(1)
{
memset(&c,0,sizeof(c));
printf("请输入控制命令(w s a d)\n");
scanf("%c",&c);
while(getchar()!=10);
if(c=='w'&&*(red_robot_arm_control_buff+3)>=(-90)&&*(red_robot_arm_control_buff+3)<90)
{
(*(red_robot_arm_control_buff+3))+=10;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='s'&&*(red_robot_arm_control_buff+3)>(-90)&&*(red_robot_arm_control_buff+3)<=90)
{
(*(red_robot_arm_control_buff+3))-=10;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='a'&&*(blue_robot_arm_control_buff+3)>0&&*(blue_robot_arm_control_buff+3)<=180)
{
(*(blue_robot_arm_control_buff+3))-=10;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='d'&&*(blue_robot_arm_control_buff+3)>=0&&*(blue_robot_arm_control_buff+3)<180)
{
(*(blue_robot_arm_control_buff+3))+=10;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='~')
{
break;
}
else
{
printf("控制命令输入错误(超出可控范围),请重新输入控制命令\n");
}
}
break;
}
case '4':{
while(1)
{
memset(&c,0,sizeof(c));
printf("请输入控制命令(w s a d)\n");
scanf("%c",&c);
while(getchar()!=10);
if(c=='w'&&*(red_robot_arm_control_buff+3)>=(-90)&&*(red_robot_arm_control_buff+3)<90&&(90-*(red_robot_arm_control_buff+3))>=20)
{
(*(red_robot_arm_control_buff+3))+=20;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='s'&&(-90-*(red_robot_arm_control_buff+3))<=(-20)&&*(red_robot_arm_control_buff+3)>(-90)&&*(red_robot_arm_control_buff+3)<=90)
{
(*(red_robot_arm_control_buff+3))-=20;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='a'&&*(blue_robot_arm_control_buff+3)>0&&*(blue_robot_arm_control_buff+3)<=180)
{
(*(blue_robot_arm_control_buff+3))-=20;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='d'&&*(blue_robot_arm_control_buff+3)>=0&&*(blue_robot_arm_control_buff+3)<180)
{
(*(blue_robot_arm_control_buff+3))+=20;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='~')
{
break;
}
else
{
printf("控制命令输入错误(超出可控范围),请重新输入控制命令\n");
}
}
break;
}
case '5':{
while(1)
{
memset(&c,0,sizeof(c));
printf("请输入控制命令(w s a d)\n");
scanf("%c",&c);
while(getchar()!=10);
if(c=='w'&&*(red_robot_arm_control_buff+3)>=(-90)&&*(red_robot_arm_control_buff+3)<90)
{
(*(red_robot_arm_control_buff+3))+=30;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='s'&&*(red_robot_arm_control_buff+3)>(-90)&&*(red_robot_arm_control_buff+3)<=90)
{
(*(red_robot_arm_control_buff+3))-=30;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='a'&&*(blue_robot_arm_control_buff+3)>0&&*(blue_robot_arm_control_buff+3)<=180)
{
(*(blue_robot_arm_control_buff+3))-=30;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='d'&&*(blue_robot_arm_control_buff+3)>=0&&*(blue_robot_arm_control_buff+3)<180)
{
(*(blue_robot_arm_control_buff+3))+=30;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='~')
{
break;
}
else
{
printf("控制命令输入错误(超出可控范围),请重新输入控制命令\n");
}
}
break;
}
case '6':{
while(1)
{
memset(&c,0,sizeof(c));
printf("请输入控制命令(w s a d)\n");
scanf("%c",&c);
while(getchar()!=10);
if(c=='w'&&*(red_robot_arm_control_buff+3)>=(-90)&&*(red_robot_arm_control_buff+3)<90&&(90-*(red_robot_arm_control_buff+3))>=60)
{
(*(red_robot_arm_control_buff+3))+=60;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='s'&&(-90-*(red_robot_arm_control_buff+3))<=(-60)&&*(red_robot_arm_control_buff+3)>(-90)&&*(red_robot_arm_control_buff+3)<=90)
{
(*(red_robot_arm_control_buff+3))-=60;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='a'&&*(blue_robot_arm_control_buff+3)>0&&*(blue_robot_arm_control_buff+3)<=180)
{
(*(blue_robot_arm_control_buff+3))-=60;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='d'&&*(blue_robot_arm_control_buff+3)>=0&&*(blue_robot_arm_control_buff+3)<180)
{
(*(blue_robot_arm_control_buff+3))+=60;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='~')
{
break;
}
else
{
printf("控制命令输入错误(超出可控范围),请重新输入控制命令\n");
}
}
break;
}
case '7':{
while(1)
{
memset(&c,0,sizeof(c));
printf("请输入控制命令(w s a d)\n");
scanf("%c",&c);
while(getchar()!=10);
if(c=='w'&&*(red_robot_arm_control_buff+3)>=(-90)&&*(red_robot_arm_control_buff+3)<90)
{
(*(red_robot_arm_control_buff+3))+=90;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='s'&&*(red_robot_arm_control_buff+3)>(-90)&&*(red_robot_arm_control_buff+3)<=90)
{
(*(red_robot_arm_control_buff+3))-=90;
send(robot_arm_control_socket_fd,red_robot_arm_control_buff,sizeof(red_robot_arm_control_buff),0);
}
else if(c=='a'&&*(blue_robot_arm_control_buff+3)>0&&*(blue_robot_arm_control_buff+3)<=180)
{
(*(blue_robot_arm_control_buff+3))-=90;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='d'&&*(blue_robot_arm_control_buff+3)>=0&&*(blue_robot_arm_control_buff+3)<180)
{
(*(blue_robot_arm_control_buff+3))+=90;
send(robot_arm_control_socket_fd,blue_robot_arm_control_buff,sizeof(blue_robot_arm_control_buff),0);
}
else if(c=='~')
{
break;
}
else
{
printf("控制命令输入错误(超出可控范围),请重新输入控制命令\n");
}
}
break;
}
case '8':break;
default:printf("无此操作命令,请重新输入操作命令\n");
break;
}
if(ch=='8')
{
break;
}
}
close(robot_arm_control_socket_fd);
return 0;
}