【网络编程】TCP机械臂测试

news2025/1/13 8:02:00

通过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:指定角度

 

 核心代码

#include<myhead.h>
#define SER_PORT 8888 //与服务器一致
#define SER_IP "192.168.0.134" //服务器ip地址
#define CLI_PORT 8888//客户端端口号
#define CLI_IP "192.168.119.128"//客户端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);
	//1.2端口快速重用
	int opt = 1;
	setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
	//2.绑定IP地址和端口号
	//2.1填充地址信息结构体
	// struct sockaddr_in cin;
	// cin.sin_family = AF_INET; //通信域
	// cin.sin_port = htons (CLI_PORT);//端口号
	// cin.sin_addr.s_addr = inet_addr(CLI_IP);//ip地址
	// //2.2绑定工作
	// if(bind(cfd,(struct sockaddr *)&cin,sizeof(cin))==-1)
	// {
	// 	perror("bind error");
	// 	return -1;
	// }
	// printf("bind success\n");

	//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连接到fwq
	if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
	{
		perror("connect error");
		return -1;
	}
	printf("连接服务器成功\n");
	//4.数据收发
	char rbuf[5] = {0xff,0x02,0x00,0x00,0xff};
	char bbuf[5] = {0xff,0x02,0x01,0x00,0xff};
	char key = 0;
	//发送初始化命令
	send(cfd,rbuf,sizeof(rbuf),0);
	sleep(1);
	send(cfd,bbuf,sizeof(bbuf),0);
	//发送数据
	while(1)
	{
		printf("请输入>>>>");
		scanf("%c",&key);
		getchar();
		if (key == 'q')
		{
			break;
		}
		
		switch (key)
		{
			//机械臂红色角度增加
		case 'w':
			rbuf[3] += 3;
			if(rbuf[3] > 90)
			{
				rbuf[3] = 90;
			}
			send(cfd,rbuf,sizeof(rbuf),0);
			break;
			//机械臂红色角度减少
		case 's':
			rbuf[3] -= 3;
			if(rbuf[3] < -90)
			{
				rbuf[3] = -90;
			}
			send(cfd,rbuf,sizeof(rbuf),0);
			break;
			//机械臂蓝色角度增加
		case 'a':
			bbuf[3] += 3;
			if(bbuf[3] > 180)
			{
				bbuf[3] = 180;
			}
			send(cfd,bbuf,sizeof(bbuf),0);
			break;
			//机械臂蓝色角度减少
		case 'd':	
			bbuf[3] -= 3;
			if(bbuf[3] < 0)
			{
				bbuf[3] = 0;
			}
			send(cfd,bbuf,sizeof(bbuf),0);
			break;
		default:
			printf("输入错误\n");
			break;
		}
	}
	//5.关闭套接字
	close(cfd);
	return 0;
}

演示视频

机械臂演示视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AFSim 仿真系统----《普朗克黑体辐射定律的区间积累》

参考文献 《普朗克黑体辐射函数的积分》&#xff0c;W. K. Widger, Jr. 和 M. P. Woodall&#xff0c;发表在《美国气象学会公报》&#xff0c;第57卷&#xff0c;第10期&#xff0c;1976年10月&#xff0c;页码1217-1219 上述参考文献描述了一种在不依赖于需要大量迭代的数值…

Visual Studio Code 安装与 C/C++ 语言运行总结

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Visual Studio Code&#xff08;简称 VS Code&#xff09;是由微软开发的一款轻量级、强大的代码编辑器&#xff0c;支持多种编程语言和开发框架。由于其丰富的插件生态系统和灵活的配置选项&#xff0c;VS…

gitlab实现CI/CD自动化部署

gitlab实现CI/CD自动化部署 项目根目录中新增gitlab-ci.yml在gitlab上查看gitlab-runner配置方法配置服务器环境推送代码&#xff0c;触发runner&#xff0c;实现自动构建和部署参考 gitlab支持通过配置CI/CD实现自动化部署我们的代码项目&#xff0c;主要核心就是配置gitlab-c…

【MySQL数据库】单机、集群、分布式的区别

单机、集群和分布式是计算机系统中三种不同的架构模型,它们在资源管理、任务执行和性能优化方面有显著区别。 图片来源 1. 单机(Standalone) 单机指的是单一计算机系统,即所有的计算任务和数据都在一台计算机上处理。单机系统的特点包括: 硬件限制:受限于单台机器的计…

ARM处理架构中的PMU(Performance Monitoring Unit)和 AMU(Activity Monitors Unit)简介

在 ARM 架构中,PMU(Performance Monitoring Unit)和 AMU(Activity Monitors Unit)是用于性能分析和监控的硬件单元,但它们的功能和应用场景有所不同。以下是它们的主要区别: 1. PMU (Performance Monitoring Unit) 功能:PMU 是一种用于监控处理器性能的硬件单元。它可…

简述MYSQL聚簇索引、二级索引、索引下推

一丶聚簇索引 InnoDB的索引分为两种&#xff1a; 聚簇索引&#xff1a;一般创建表时的主键就会被mysql作为聚簇索引&#xff0c;如果没有主键则选择非空唯一索引作为聚簇索引&#xff0c;都没有则隐式创建一个索引作为聚簇索引&#xff1b;辅助索引&#xff1a;也就是非聚簇索…

Spring Web MVC入门(下)

1. 响应 1.1 返回静态页面 创建前端页面&#xff0c;如下图所示&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Index页面</title> </head> <body>Hello,Spring MVC…

利用栈去实现队列

利用栈实现队列 今天我们利用两个栈去实现队列&#xff08;因为是用c去实现队列没有c中的库函数所以我们要先手搓一个栈再去使用&#xff09; 没有实现的去看我的这篇文章&#xff1a;利用顺序表对栈的实现-CSDN博客 回顾一下特性&#xff1a;栈----先进后出、后进先出&…

我常用的几个傻瓜式爬虫工具,收藏!

爬虫类工具主要两种&#xff0c;一种是编程语言第三方库&#xff0c;比如Python的scrapy、selenium等&#xff0c;需要有一定的代码基础&#xff0c;一种是图形化的web或桌面应用&#xff0c;比如Web Scraper、后羿采集器、八爪鱼采集器、WebHarvy等&#xff0c;接近于傻瓜式操…

汇量科技Mintegral发布全新产品矩阵:助力广告主高效增长与变现

近期&#xff0c;汇量科技旗下程序化互动式广告平台Mintegral正式推出全新产品命名&#xff0c;期望通过简洁明确的产品名称&#xff0c;更好地传达Mintegral的品牌理念&#xff0c;使客户与平台的每一次接触都更加直接高效。 Mintegral AppGrowth(原Mintegral Self-Service Pl…

【idea】 已经commit还没push怎么修改commit信息?

前言&#xff1a; 有时候填写commit信息时手快确认了&#xff0c;要push时发现信息有误&#xff0c;此时想重新更改信息。 此方法适用于在idea里commit了的&#xff0c;且还未push。 &#xff08;u1s1&#xff0c;用idea来推送真的又快又方便&#xff0c;自此之后再也没碰过小乌…

Leetcode面试经典150题-112.路径总和

解法都在代码里&#xff0c;不懂就留言或者私信 超级简单的题&#xff0c;不过有隐形的坑 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.v…

算法定制与双光谱技术融合:提升巡检车入侵检测系统效能

一、应用背景 在当今数字化和信息化时代&#xff0c;算法已经成为企业提高效率、优化决策的重要工具。随着大数据、人工智能技术的迅速发展&#xff0c;客户对算法的需求呈现出爆发式增长。这种需求不仅体现在数量上&#xff0c;更体现在质量上&#xff0c;尤其是对算法定制化…

Dav_笔记13:SQL Access Advisor 之 1 Summary

SQL Access Advisor概述 SAA Summary 在调整数据库以实现复杂的数据密集型查询的最佳性能时&#xff0c;物化视图&#xff0c;分区和索引是必不可少的。 SQL Access Advisor通过为给定工作负载推荐适当的物化视图集&#xff0c;物化视图日志&#xff0c;分区和索引&#xff0c;…

macOS Sequoia 15 beta 5 (24A5309e) Boot ISO 原版可引导镜像下载

macOS Sequoia 15 beta 5 (24A5309e) Boot ISO 原版可引导镜像下载 iPhone 镜像、Safari 浏览器重大更新、备受瞩目的游戏和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接&#xff1a;https://sysin.org/blog/macOS-Sequoia-boot-iso/&#xff0c…

基于JAVA的外来人口管理系统设计与实现,源码、部署+讲解

摘 要 在新型冠状病毒性肺炎流行的背景下&#xff0c;我国数亿流动人口应该受到高度关注和保护。并让这一易感染人群离开成为“受害者传染源”的双重风险&#xff0c;的确是一项关键而富有挑战性的任务。因此&#xff0c;本毕业设计是以规模复杂的外来人口及居民群体为典例&am…

UI-无限循环列表

无限循环列表 创建 在任意节点上&#xff0c;添加Scroller&#xff0c;ScrollView组件&#xff0c;和RectMask2D组件&#xff1a; 其中列表的大小&#xff0c;依赖Rect的大小。 界面参数介绍 ViewPort&#xff1a;视口大小 SrollDirction:滚动方向 MovementType&#xff1a…

go语言后端开发学习(五)——如何在项目中使用Viper来配置环境

前言 在之前的文章中我们就介绍过用go-ini来读取配置文件,但是当时我们在介绍时说了他只能读取.ini格式的配置文件所以局限性较大,这里我们介绍一个适用范围更大的配置管理第三方库——Viper。 什么是Viper Viper是适用于Go应用程序&#xff08;包括Twelve-Factor App&#…

算法-差分, 二维前缀和, 离散化

文章目录 本节提要1. 一维差分1.1 一维差分原理分析1.2 一维差分例题应用 2. 等差数列差分2.1 等差数列差分原理分析 3. 二维前缀和3.1 二维前缀和原理分析3.2 二维前缀和例题应用 本节提要 本节的主要目标是一维差分的总结, 包括一维差分, 一维等差数列差分; 二维差分和二维前…

唐诡探案外传-MySQL误操作之“寻凶”

序幕&#xff1a;字符集被修改之谜 立秋后的第一天下午&#xff0c;太阳仍不知疲倦地炙烤着大地&#xff0c;办公室内的中央空调不停歇地鼓吹着冷风。某办公楼内&#xff0c;IT部门的阿祖被同事急匆匆地找来&#xff0c;说是系统出现了奇怪的bug&#xff0c;追查之下发现测试环…