本次实验还是需要用到PCF8591模数转换器,莫非它要取代双色LED成为新的常驻嘉宾吗?
本次实验是摇杆实验。这个玩意可以用于操控机器人或者是树莓派的遥控小车。当然,生活中最常见的用途还是在游戏手柄上。不知道你打不打游戏,有没有用过手柄玩游戏呢?
本人有一个游戏手柄,玩3a还是挺爽的,哈哈
1.实验器材
- 树莓派开发板
- 40p软排线+T型转接板+面包板
- PS2手柄模块
- PCF8591模数转换器模块(实验12)
- 一些跳线
- 一个一字螺丝刀
2.实验原理
手柄模块通过以90度角安装两个电位计来判断当前的X值和Y值,从而计算出手柄的方向。再加上一个按钮,来判断手柄被按下(也就是游戏手柄上的L3和R3键的原理)
处于静止位置时,此模块从X和Y产生约2.5V的输出。移动操纵杆将导致输出在0v到5V之间变化,具体取决于其方向。如果将此模块连接到微控制器,则可能会在其静止位置读取大约512的值(由于弹簧和机构的微小误差而引起的细微变化)。移动操纵杆时,应该看到该值从0变为到1023,具体取决于其位置。
该模块有两个模拟输出(对应X和Y坐标)和一个数字输出,表示是否在Z轴上按下。
在本实验中,我们将引脚X和Y连接到PCF8591A/D转换器的模拟输入端口,以便将模拟量转换为数字量。然后在树莓派上编程以检测操纵杆的移动方向
2.1电路图
2.2接线图
树莓派 | T型转接板 | PCF8591 |
---|---|---|
SDA | SDA | SDA |
SCL | SCL | SCL |
5V | 5V | VCC |
GND | GND | GND |
PS2手柄模块 | T型转接板 | PCF8591 |
---|---|---|
VRY | * | AIN 0 |
VRX | * | AIN 1 |
SW | * | ANI 2 |
5V | 5V | 5V |
GND | GND | GND |
这个是我的接线图,其实可以直接用双母头跳线直接连接PCF8591和手柄模块,不过还是借助了T型转接板来连接二者。
3.效果演示
3.1代码示例
1 | //PS2操作杆实验 |
这部分比较好理解,代码也很直观。只有home位置需要我们单独进行计算(即手柄处于正中心区域且没有按下的情况,才是home的情况)
3.2效果翻车
不过轮到实际测试的时候,翻大车了。在我还没有动摇杆的时候,它就会显示出左和按钮被按下的提示。我尝试修改代码来修复这个错误,发现并不可行
于是我直接把代码给注释掉,加了一个打印X\Y\B
当前值的代码
结果呢,在我没动摇杆的时候,打印出来的X和Y都是乱七八糟的。只有按下摇杆的B=0可以被正常检测到,其他的方位啥的都是毫无反应。
直接给这个模块下达了死亡通知书,拜拜了您嘞!
结语
通过学习这个模块的代码,可以看到实际上一些零部件的基本原理并不是非常难掌握。不过你想把一个摇杆变成一个完整的游戏手柄,那就需要更复杂的控制代码和手柄的内部芯片来转义这些数字值了。
有什么问题的话,可以在评论区提出呢
还是有所收获的,要是摇杆没坏就好了
- 本文标题:【树莓派】实验14-PS2游戏手柄摇杆
- 创建时间:2022-05-13 16:10:14
- 本文链接:posts/423245526/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!