基于MSP430、STM32的2.4G无线游戏遥控器实现

发布者:自由漫步最新更新时间:2017-11-04 来源: eefocus关键字:MSP430  STM32  2.4G  无线游戏遥控器 手机看文章 扫描二维码
随时随地手机看文章

历时7天,跨度两个多星期,才将微型四轴的遥控器调试好,中间除了备考两科考试,其余时间全在宿舍蹭网消磨青春,不得不说状态不好,实际上内心也极度的空虚。

之前将微型四轴的机体做好,迫不及待的进行了一下测试,天真的以为,飞机不用遥控器也可以,实际上我设想的是直接用手头的开发板对其进行简单的增减速,为此我还 特意为它写了一个触摸控制界面,只有三个触控点,一个加速,一个减速,一个停止,非常无聊。

基于MSP430、STM32的2.4G无线游戏遥控器实现

后来发现,没有一个遥控器真的非常不方便,周六便去二手市场仅用5元便淘得一飞机遥控器,里面电池都还没用完,质量算上乘。这遥控器是红外遥控的,用手机看了下红外管,能够正常发光实际上,我当然最希望直接对现有电路进行一下线路修改就实现最方便了,事情往往没有那么顺利。

基于MSP430、STM32的2.4G无线游戏遥控器实现

仔细端详了这块板子,一大堆的元件,右上角唯一的一块芯片却也被磨去型号,对于我这种电路经验较少的青年自然无从下手,遂决定重新开发一块。但是为了能够跟原先机壳匹配,电路的摸样和尺寸,完全根据原板用尺子测量而规划。

基于MSP430、STM32的2.4G无线游戏遥控器实现

遥控器板子采用低功耗MSP430G2553主控,NRF24L01发射遥控信号。对于操纵杆,说白了就是一个双方向和一个四方向的电位器,通过430内部AD采样便可得到操纵命令,电路十分简洁。实际上,遥控器的程序也相当的简单,就我目前需要实现的功能来看。只需要根据AD门限值判断出 上下左右 的方向,然后直接发送给接收机即可。电源稳压用ASM1117-3.3V实测它的压降有1V,所以至也得4.3V供电,事实上买回来这破东西的时候里面就残存有6节干电池,测了一下电压还有6V,足够我调试挥霍。实现代码如下:

基于MSP430、STM32的2.4G无线游戏遥控器实现

在遥控板子左上角的排针是我预留的程序调试和烧写端口,同样的为了方便,我并不需要再做下载器了,直接采用TI推出的大学计划的LaunchPad可以完美的实现程序调试和烧写,这块LaunchPad最值钱的地方就在于它的仿真器,官方才卖8美元,而一个430仿真器市面价格是200,上学期学校给了一块比赛用,电子工程师之家网站又送了我一块,那块G2553就是我从上面抠下来的。

基于MSP430、STM32的2.4G无线游戏遥控器实现

当然,最为重点的地方便在于接收端了,怎么实现接收到的数据能够操控电脑游戏?这点由于之前我做了有线重力感应的游戏遥控器,我试图仍然采用此方法,就是通过STM32把命令接收下来,然后通过串口传到我的VC上位机,用上位机的程序实现键盘敲击的命令。

                     基于MSP430、STM32的2.4G无线游戏遥控器实现

         VC上位机上,我同样用的是keybd_event事件来实现按键的按下和弹起。

基于MSP430、STM32的2.4G无线游戏遥控器实现

那天晚上我测试了电脑上的所有程序窗口以及几个小游戏,发现都没有问题,可以实现操控,第二天我想正式在极品飞车上测试的时候,终于暴露除了问题,根本没有效果!是的,VC的这段代码在游戏里面无法实现操控,为什么其它的程序可以,而就是这大型的游戏不行,后来百度查了一下,终于看出点端倪,好像是说这种游戏的操作用的那种操控方式是直接读取电脑键盘的那个端口来接收命令的,我用VC写的那段代码实际上只是模拟出了系统按键而已。网上也没有给出解决方法,后来我问了下一个以前通过影子系统认识的一位程序开发工程师,他告诉我用Winio来向键盘端口写入命令达到驱动级的命令试试。

                     基于MSP430、STM32的2.4G无线游戏遥控器实现

后来发现,效果是一样的,并且由于我对VC++编程经验不丰富,直接操作了端口导致给电脑带来了不好的后果,导致了我笔记本的键盘按键出现了紊乱,当然对于我的电脑这一切都不是问题,由于Powershadow的保护,很多问题重启之后便得到了解决。

    我不相信用VC不可以实现,但是这已经涉及到计算机的端口这些跟底层相关的东西,专研下去对我来讲太困难,毕竟缺少专业的知识和经验。经过考虑我终于还是决定采用比较简单的方案,直接通过单片机模拟出键盘的PS/2协议,让电脑就认为它是一个键盘,这样子,所有的操作对于电脑的任何程序必定都是有效的。PS/2的协议相对来讲,也是比较简单,跟串口有点类似,一个时钟脉冲发送一位数据,只要知道键盘的编码,给电脑发过去就OK了。

基于MSP430、STM32的2.4G无线游戏遥控器实现

对于该时序的实现代码如下

基于MSP430、STM32的2.4G无线游戏遥控器实现

基于MSP430、STM32的2.4G无线游戏遥控器实现

而键盘的扫描码可以查表获得,分为通码和断码,对于键盘来讲,按键按下的时候就是向电脑发送了通码,释放的时候,就是给电脑发送了断码,这个我用示波器也看过键盘的波形,为此发波学弟还特意给我抱来一台数字示波器,真心非常的感谢。

基于MSP430、STM32的2.4G无线游戏遥控器实现

         键盘的协议有些比较有趣的地方,比如,你先按下‘上’不放,然后按下‘左’,那么就只有‘左’是有效的了,并且此时你放开‘左’,‘上’虽然依旧按下,但是它已经无效了。那为什么在游戏里面我可以同时按下上和右,并且它们都是有效的呢,因为游戏里面只要收到按键的通码之后没有收到到按键的断码,那么它都是在执行命令的。而这段协议可以通过以下代码实现。

基于MSP430、STM32的2.4G无线游戏遥控器实现
          基于MSP430、STM32的2.4G无线游戏遥控器实现
             基于MSP430、STM32的2.4G无线游戏遥控器实现

整个接收电路我直接用开发板兼万用板搭了个简单的3.3V转5V电路实现,显得有些凌乱,但不缺美丽。为了能够在我I5处理器的acer上实现当然还得PS/2转USB接口

基于MSP430、STM32的2.4G无线游戏遥控器实现

最后,进行《极品飞车》实战测试

基于MSP430、STM32的2.4G无线游戏遥控器实现

实际上,我很少玩游戏,但是也略懂,在《极品飞车》里除了控制方向键之外,还有按ALT键液氮加速的,当然我也考虑到了这点,事实上,我在遥控器的板子上预留了两个按键专用的端口,可以实现。


关键字:MSP430  STM32  2.4G  无线游戏遥控器 引用地址:基于MSP430、STM32的2.4G无线游戏遥控器实现

上一篇:STM32 USB设备电路设计
下一篇:基于cortex-M3、ADXL345的重力感应遥控器的实现

推荐阅读最新更新时间:2024-03-16 15:43

STM32HAL库微秒延时函数的实现---DWT和SysTick
天下苦STM32 HAL库微秒延时久已。不占用其他定时器资源又不使用循环的方式就不能实现微秒延时函数了吗?答案是否定的,我们还有方式实现,且还不止一种方法。详情且看下文分解: 以下两种延时方式来源:Arduino_Core_STM32源码delayMicroseconds(uint32_t us)函数的实现。 利用SysTick再实现微秒延时函数 虽然SysTick已经被配置为1ms中断一次的模式,但每个1ms之间SysTick的当前值寄存器是一直在计数的(每计一个数的时间是1/SytemCoreClock)我们便可以利用该机制实现微秒延时函数。 void delayMicroseconds(uint32_t us)
[单片机]
STM32HAL库微秒延时函数的实现---DWT和SysTick
STM32自己总结如何正确创建一个工程
1、建立好文件夹,文件夹中有相应的库函数和头文件等等 以上通过我的G盘里面的建立工程模板解压即可得到 2、通过keil创建test_creat.uvproj到以目录 选择完芯片以后,弹出窗口一定要选择“否” 3、添加文件,只用添加C文件进去 添加完成以后会看到: 4、头文件路径的添加 stm32f10x_it.h ,stm32f10x.h, stm32f10x_conf.h ,core_cm3.h, system_stm32f10x.h 主要添加以上的头文件位置还有各种ppp外设头文件的位置也就是src文件夹 5.编译会出现的问题及解决方法 1、去掉STM32F10
[单片机]
<font color='red'>STM32</font>自己总结如何正确创建一个工程
STM32的IAP方案实现设计
一、什么是IAP,为什么要IAP IAP即为In Application Prog ram ming(在应用中编程),一般情况下,以 STM32 F10x系列 芯片 为主控制器的设备在出厂时就已经使用J-Link 仿真器 将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并 拆解 出来再使用J-Link重新烧录代码,这就增加了很多不必要的麻烦。站在用户的角度来说,就是能让用户自己来更换设备里边的代码程序而厂家这边只需要提供给用户一个代码文件即可。 而IAP却能很好的解决掉这个难题,一片STM32芯片的Code(代码)区内一般只有一个用户程序。而IAP方案则是将代码区划分为两部
[单片机]
<font color='red'>STM32</font>的IAP方案实现设计
STM32中的IDR和ODR寄存器
#define WARM_KEY_PIN (GPIOC- IDR&(1 5)) #define Speak(tmp) GPIOA- ODR=tmp?(GPIOA- ODR|1 12):(GPIOA- ODR&(~(1 12))) (1)IDR是查看引脚电平状态用的寄存器,ODR是引脚电平输出的寄存器。 (2)1 5表示:1左移5位(0000 0001---- 0010 0000) 1、- 在C语言中称为间接引用运算符,是二目运算符,优先级同成员运算符“.”。 2、用法: p- a,其中p是指向一个结构体的指针,a是这个结构体类型的一个成员。表达式p- a引用了指针p指向的结构体的成员a。 3、例如: str
[单片机]
MSP430常见问题与解答
============================================================================================ 1-问:JTAG 与 I/O 功能之间的 MSP430 引脚复用 答:四个引脚 P1.7 - P1.4 在 20 与 28 引脚 MSP430F1xx 器件上均同时具有 I/O 与 JTAG 功能。这些引脚的默认功能是,当器件通电时具有 I/O 功能。当测试引脚拉高时,则将这些引脚选为 JTAG。当使用交互式系统内调试程序时,这些器件的 FET 会将这些引脚处于 JTAG 模式下。如欲了解有关在使用调试程序时从 JTAG 模式发布引脚的信息,敬请参
[单片机]
MSP430 flash写入(一)
/* --COPYRIGHT--,BSD_EX * Copyright (c) 2012, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above c
[单片机]
STM32笔记(十一)---I2C读写EEPROM---硬件I2C
I2C 协议简介 I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、 CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。 在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设; STM32 标准库则是在寄存器与用户代码之间的软件层。对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。 物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。 协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准
[单片机]
<font color='red'>STM32</font>笔记(十一)---I2C读写EEPROM---硬件I2C
基于MSP430单片机的开关稳压电源设计
1 引 言    MSP430 系列单片机是美国TI公司生产的新一代16位单片机,是一种超低功耗的混合信号处理器(MixedSignal Processor),它具有低电压、超低功耗、强大的处理能力、系统工作稳定、丰富的片内外设、方便开发等优点,具有很高的性价比,在工程控制等领域有着极其广泛的应用范围。开关Boost稳压电源利用开关器件控制、无源磁性元件及电容元件的能量存储特性,从输入电压源获取分离的能量,暂时把能量以磁场的形式存储在电感器中,或以电场的形式存储在电容器中,然后将能量转换到负载。对DC-DC主回路采用Boost升压斩波电路。 2 系统结构和总设计方案   本开关稳压电源是以 MSP430
[单片机]
基于<font color='red'>MSP430</font>单片机的开关稳压电源设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved