树莓派笔记14:舵机云台(二) 远程控制云台

前面一篇已经准备好云台控制模块了,接着想实现的效果就是可以远程控制云台动作,比如在笔记本电脑上通过按方向键控制云台进行水平和垂直方向上的转动。

1 分析

首先考虑用哪种方式与树莓派通信,这里我选择用UDP的方式向树莓派发送控制指令,主要原因是传输过程简单,不需要在通信逻辑上费精力。采用UDP协议的socket,电脑端不停地发控制指令,树莓派则循环接收指令,不需要去建立连接,反正只是近距离测试,基本不会在传输上有问题。

接着考虑控制逻辑,我想实现的效果是按住某个方向键,云台就持续向某个方位转动,松开方向键就停止。为此可以这样设计,在电脑端,设定一个状态量,按下方向键的时候设置对应的位为1,松开的时候设置对应的位为0,同时socket不断地把这个状态发出去;在树莓派上,循环接收指令并读取状态,根据状态量的情况控制云台进行对应的动作,如果状态值都为0,则停止。

最后要考虑的是接收端的阻塞问题,因为树莓派端需要不停地调用socket的接收函数接收指令,同时对云台进行控制,而默认的recvfrom函数是阻塞的,为了不让程序“卡”住,可以使用setblocking()方法设置socket,参数为0就把socket设置为非阻塞模式,这样调用recvfrom如果缓冲区没数据,则抛出socket.error异常,我们只要忽略这个异常就可以继续往下运行了。

2 电脑端程序

下面显示电脑端的程序,电脑端用python处理键盘事件太麻烦,所以使用C#写了个简单的winform应用,首先初始化一个字节数组作为状态标志,第一个字节0xff是个头标志,后面四个字节分别指示上下左右:
这里写图片描述
接着为KeyDown和KeyUp分别进行事件处理:
这里写图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值