网络编程day03 20240813

一、相关练习

1、通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂

机械臂需要发送16进制数,共5个字节,协议如下:

0xff 0x02 x y 0xff 0xff:起始结束协议,固定的; 0x02:控制机械手臂协议,固定的; x:指定要操作的机械臂 0x00 红色摆臂 0x01 蓝色摆臂 y:指定角度

1> ctlRobotArm.c

cpp 复制代码
#include<myhead.h>

#define SER_PORT 8888             //与服务器保持一致
#define SER_IP  "192.168.0.139"    //服务器ip地址

int main(int argc, const char *argv[])
{
    //1、创建用于通信的套接字文件描述符
    int cfd = socket(AF_INET, SOCK_STREAM, 0);
    if(cfd == -1)
    {
        perror("socket error");
        return -1;
    }
    printf("cfd = %d\n", cfd);             
    
    //3、连接到服务器
    //3.1 填充服务器地址信息结构体
    struct sockaddr_in sin;
    sin.sin_family = AF_INET;          //通信域
    sin.sin_port = htons(SER_PORT);      //服务器端口号
    sin.sin_addr.s_addr = inet_addr(SER_IP);     //服务器ip地址

    //3.2 连接服务器
    if(connect(cfd, (struct sockaddr*)&sin, sizeof(sin)) == -1)
    {
        perror("connect error");
        return -1;
    }
    printf("连接服务器成功\n");

    //准备数据
    char rbuf[5] = {0xff, 0x02, 0x00, 0x00, 0xff};
    char bbuf[5] = {0xff, 0x02, 0x01, 0x00, 0xff};

    //发送给服务器,以初始化机械臂
    send(cfd, rbuf,sizeof(rbuf), 0);
    sleep(1);
    send(cfd, bbuf,sizeof(bbuf), 0);

	//通过键盘控制机械臂
	char button = 0;
	printf("请输入w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)\
			输入q退出\n");
	while(1)
	{
		button = fgetc(stdin);
		getchar();
		if(button == 'q')
		{
			break;
		}
		switch(button)
		{
			case 'w':
				rbuf[3]++; 				//红色臂角度增大
    			if(rbuf[3] > 90)		//红色臂角度最大为90度
				{
					rbuf[3] = -90;		//红色臂角度最小为-90度
				}
				send(cfd, rbuf,sizeof(rbuf), 0);
				break;
			case 's':
				rbuf[3]--; 				//红色臂角度减小
				if(rbuf[3] < -90)		//红色臂角度最小为-90度
				{
					rbuf[3] = 90; 		//红色臂角度最大为90度
				}
    			send(cfd, rbuf,sizeof(rbuf), 0);
				break;
			case 'd':
				bbuf[3]++; 				//蓝色臂角度增大
				if(bbuf[3]>-76 && bbuf[3]<0)	//char类型取值范围[-128,127] 即当128度到180度时,bbuf[3] 中实际值为实际角度-256,即角度范围 [-128,-76]∪[0,127]
				{
					bbuf[3] = 0;
				}
    			send(cfd, bbuf,sizeof(bbuf), 0);
				break;
			case 'a':
				bbuf[3]--;
				if(bbuf[3] == -1) 		//当角度小于0时,即bbuf[3] = -1时,角度变为最大角度180度
				{
					bbuf[3] = 180;
				}
    			send(cfd, bbuf,sizeof(bbuf), 0);
				break;
			default:
				printf("指令错误\n");
				break;
		}
		sleep(1);
	}
    

    
    //5、关闭套接字
    close(cfd);

    return 0;
}

2> 运行效果

简易机械臂控制

二、思维导图

相关推荐
xian0gang9 分钟前
rk3588 区分两个相同的usb相机
linux
这儿有一堆花19 分钟前
安全访问家中 Linux 服务器的远程方案 —— 专为单用户场景设计
linux·服务器·安全
RussellFans44 分钟前
Linux 文本三剑客(grep, awk, sed)
linux·运维·服务器
Chuncheng's blog1 小时前
CentOS 7如何编译安装升级gcc至7.5版本?
linux·运维·c++·centos
听风吹等浪起1 小时前
CentOS在vmware局域网内搭建DHCP服务器【踩坑记录】
linux·服务器·centos
明月看潮生1 小时前
青少年编程与数学 01-011 系统软件简介 04 Linux操作系统
linux·青少年编程·操作系统·系统软件·编程与数学
aitav02 小时前
⚡️ Linux Docker 基本命令参数详解
linux·运维·docker
量子-Alex2 小时前
【反无人机检测】C2FDrone:基于视觉Transformer网络的无人机间由粗到细检测
网络·transformer·无人机
姓刘的哦2 小时前
ubuntu中使用docker
linux·ubuntu·docker
代码程序猿RIP2 小时前
【Linux】(1)—进程概念-⑤进程调度
linux·运维