网络编程day3

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值