TCP机械臂控制

通过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 <head.h>
#include <linux/input.h>
#define SER_PORT 8888            // 服务器端口号
#define SER_IP "192.168.118.58"  // 服务器IP
#define CLI_PORT 9000            // 客户端端口号
#define CLI_IP "192.168.250.100" // 客户端IPint main(int argc, const char *argv[])
{// 1、创建用于连接的客户端套接字int cfd = socket(AF_INET, SOCK_STREAM, 0);if (cfd == -1){perror("socket error");return -1;}printf("socket success cfd = %d\n", cfd); // 3// 设置端口号快速重用int reuse = 1;if (setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){perror("setsockopt error");return -1;}printf("端口号快速重用成功\n");// 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);/*2.2 绑定端口号和IPif(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 连接服务器if (connect(cfd, (struct sockaddr *)&sin, sizeof(sin)) == -1){perror("connect error");return -1;}printf("连接成功!\n");// 定义控制机械臂的容器char buf_red[5] = {0xff, 0x02, 0x00, 0x00, 0xff};           // 红色臂容器unsigned char buf_blue[5] = {0xff, 0x02, 0x01, 0x00, 0xff}; // 蓝色臂容器// 将数据发送给服务器以初始化send(cfd, buf_red, sizeof(buf_red), 0);sleep(1);send(cfd, buf_blue, sizeof(buf_blue), 0);// 定义一个读取数据的结构体变量struct input_event ie;// 打开 /dev/input/event1文件int fd = open("/dev/input/event1", O_RDONLY);if (fd == -1){perror("open error");return -1;}// 4、收发数据char ctrl = 0; // 用户输入的控制键while (1){// scanf("%c", &ctrl);        //用户输入键// getchar();// 从文件中读取当前文件中的数据// read(fd, &ie, sizeof(ie));scanf("%c", &ctrl);while (getchar() != '\n');// 输出从键盘事件文件中读取的数据// printf("ie.type = %d, ie.code = %d, ie.value = %d\n", ie.type, ie.code, ie.value);// 对输入的字符进行多分支选择switch (ctrl){case 'w':{// 红色臂角度增大buf_red[3] += 2;if (buf_red[3] >= 90){buf_red[3] = 90;}// 将数据发送给服务器send(cfd, buf_red, sizeof(buf_red), 0);}break;case 's':{// s键按下buf_red[3] -= 2;if (buf_red[3] <= -90)buf_red[3] = -90;// 将数据发送给服务器send(cfd, buf_red, sizeof(buf_red), 0);}break;case 'a':{// A键按下buf_blue[3] += 2;if (buf_blue[3] >= 180)buf_blue[3] = 180;// 将数据发送给服务器send(cfd, buf_blue, sizeof(buf_blue), 0);}break;case 'd':{// D键按下buf_blue[3] -= 2;if (buf_blue[3] <= 0)buf_blue[3] = 0;// 将数据发送给服务器send(cfd, buf_blue, sizeof(buf_blue), 0);}break;case 16:goto END;}}END:// 5、关闭套接字close(cfd);return 0;
}

效果:

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

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

相关文章

最近接到一个大项目,给公司设计抢商品代金劵业务

我们公司是做汽车金融方面的工作&#xff0c;在业内还挺大。目前单量来源于2&#xff0c;3线城市&#xff0c;随着大环境越老越差位了吸引他们&#xff0c; 公司决定给全国的客户&#xff0c;销售等发一些商品 1.总体学习了京东开源秒杀系统设计思路和方案。 我们公司决定进行…

博途PLC 高速计数器复位功能块(HC_Reset)

高速计数器的使用和编码器应用请参考下面文章链接: 1、普通开关计米功能块(博途高速计数器应用) https://rxxw-control.blog.csdn.net/article/details/132354435https://rxxw-control.blog.csdn.net/article/details/1323544352、S7-1200PLC编码器转速测量功能块(高速计数…

c++算法学习笔记 (15) 质数

1.试除法判断某个数是否为质数 #include <iostream> using namespace std; const int N 50005; bool is_prime1(int n) { // 暴力写法&#xff1a;O(n)if (n < 2)return false;for (int i 2; i < n; i){if (n % i 0)return false;}return true; } // 优化&…

含“AI”量上涨,智能模组SC208系列助力智慧零售全场景高质发展

AI正重塑智慧零售产业&#xff0c;加速零售在采购、生产、供应链、销售、服务等方面改善运营效率和用户体验。零售行业经历了从线下到线上再到全渠道融合发展过程&#xff0c;“提质、降本、增效、高体验”是亘古不变的商业化与智能化方向。含“AI”量逐渐上涨的智慧零售正经历…

Git——IDEA中的使用详解

目录 Git1、IDEA中配置Git2、将本地项目推送到远程仓库2.1、创建项目远程仓库2.2、初始化本地仓库2.3、连接远程仓库2.4、提交到本地仓库2.5、推送到远程仓库 3、克隆远程仓库到本地4、基本操作4.1、代码提交到暂存区4.2、暂存区代码提交到本地库4.3、推送到远程仓库4.4、撤销本…

VMware的二次开发

VMware的Virtual Disk format https://www.vmware.com/app/vmdk/?srcvmdk 在这个文档中描述了VMDK的格式。 当前VMware提供了多种开发库&#xff1a; vsphere soap api: provide the interface to manage vshpere. Virtual Disk Development Kit&#xff1a;VMware Virtu…

HJ3 明明的随机数

HJ3 明明的随机数 题目描述 明明生成了&#xfffd;N个1到500之间的随机整数。请你删去其中重复的数字&#xff0c;即相同的数字只保留一个&#xff0c;把其余相同的数去掉&#xff0c;然后再把这些数从小到大排序&#xff0c;按照排好的顺序输出。 数据范围&#xff1a; 1≤…

nginx反代后java的request.getScheme获取不到https的解决办法

在实际工作中,经常会用到nginx反向代理应用,访问https页面Java 通过request.getScheme()获取不到https协议,或者response.sendRedirect重定向是http,而不是我们想要的https。 问题原因 经过反代后,协议信息没有转发到后端,或者后端没有设置 protocolHeader nginx配置 …

leetCode刷题 18. 四数之和

目录 注意&#xff1a;正常提交后有问题。 1. 思路 2. 解题方法 2.1 排序数组 2.2 双指针遍历 3. 复杂度 4. Code 题目&#xff1a; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], …

大数据面试总结 四

1、当hadoop集群中某一个节点挂了&#xff0c;内部数据流程是如何进行的&#xff1f; 每一个datanode都会定期向namenode发送heardbeat消息&#xff0c;当一段时间namenode没有接收到某一个datanode的消息&#xff0c;此时namenode就会将该datanode标记为死亡&#xff0c;并不…

TouchGFX之性能测量

TouchGFX Core开放了几个信号&#xff0c;可用于测量性能。 当这些信号在内部触发时&#xff0c;用户可在应用程序中同步触发单个GPIO&#xff0c;从而实现“渲染时间”和其他有用信号的可视化。 信号在GPIO.hpp中定义 /* 用于操作GPIO的接口类&#xff0c;以便在目标硬件上进…

力扣---完全平方数

思路&#xff1a; 还是比较好想的&#xff0c;g[i]定义为和为 i 的完全平方数的最少数量。那么递推关系式是g[i]min(g[i-1],g[i-4],g[i-9],...)1&#xff0c;数组初始化是g[0]0,g[1]1。注意这里要对g[0]初始化&#xff0c;&#xff08;举个例子&#xff09;因为在遍历到g[4]时&…

数据库迁移测试

数据库 数据源变更&#xff1a;数据库名称、数据库类型等&#xff0c;一般情况下在同类型的数据库之间迁移比较常见&#xff0c;但是也存在不同类型的数据库之间的迁移&#xff0c;例如&#xff1a;oracle到MySQL等等&#xff0c;非关系型数据库到关系型&#xff0c;关系型到非…

14 网络管理与网络安全(1)

1.网络管理 在网络管理中&#xff0c;一般采用网络管理者-网管代理模型。管理者实质上是运行在计算机操作系统之上的一组应用程序&#xff0c;代理位于被管理的设备内部。一个管理者可以和多个代理之间进行信息交换。网络管理一般采用集中式网络管理或者分布式网络管理。集中式…

基于Springboot+Vue3的大学生毕业作业设计之—招投标分析系统

有系统开发需求可私信我提供帮助哦 ~ 部分 import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.L…

七、Java中SpringBoot组件集成接入【Minio文件服务器】

七、Java中SpringBoot组件集成接入【Minio文件服务器】 1.Minio介绍2.搭建Minio服务2.1Windows部署2.2Linux部署2.3docker部署 3.Minio可视化操作4.SpringBoot接入Minio1.添加maven依赖2.yaml配置文件3.配置类4.工具类5.控制类 5.常见问题6.其他参考文章 1.Minio介绍 对象存储…

解决vue3中刷新浏览器页面的axios请求状态变为canceled

最近在开发中要加一个悲观锁的功能&#xff0c;具体需求是&#xff1a;用户1和用户2不能同时打开一个模型进行编辑&#xff0c;用户1优先进入模型后&#xff0c;要对该模型进行上锁&#xff0c;关闭该模型或刷新页面时要进行解锁&#xff0c;此时在刷新页面时出现了问题。 刷新…

英伟达 GTC 2024大会不可错过的亮点!带你一窥AI和高性能计算的最新趋势!

会议之眼 快讯 2024年的英伟达GTC大会再次掀起了科技界的热潮&#xff0c;展示了该公司在人工智能、图形处理和高性能计算领域的最新突破。来自全球各地的科技领袖、工程师和创新者齐聚一堂&#xff0c;共同探讨未来技术的前沿。在这令人期待的盛会上&#xff0c;英伟达发布了一…

C#关键字 Event

作用&#xff1a; 事件&#xff08;Event&#xff09;基本上说是一个用户操作&#xff0c;如按键、点击、鼠标移动等等&#xff0c;或者是一些提示信息&#xff0c;如系统生成的通知。应用程序需要在事件发生时响应事件。例如&#xff0c;中断。C# 中使用事件机制实现线程间的…

vue前端下载文件,java后端

vue前端 <template><div><button click"downloadFile">Download File</button></div> </template><script> import axios from axios;export default {methods: {async downloadFile() {try {const response await axio…