本来因为急于求成,代码风格注释什么的都没在意,就没好意思把代码拿出来。。。
读取游戏摇杆需要用到DirectX ,一般玩游戏的电脑都有DirectX ,但开发需要SDK ,所以要下载DirectX SDK。
然后就是枚举设备,具体怎么读取可以参考一本叫《 Visual C++游戏编程基础》 的书,到处都有电子书下载,在有一章节讲了游戏摇杆怎么读取,但那个版本好像是DirectX7,有点老了,有的API名字已经变了,具体可以参照安装好了的DirectX SDK 目录下的示例程序,也可以参考我的读取程序。
读出来了摇杆数值以后就是用串口控制单片机,在单片机端就是通过串口然后对指令一个解析,我定义的指令是4个字节长,以@开头,以#结束,中间两个表示舵机A该转的角度,和舵机B该转的角度,单片机端接收指令主要代码在下面,我用的飞思卡尔。
void interrupt 20 SCI0_ISR(void)
{
unsigned char rdata;
SCI0CR2_RIE=0;
//此处为串口中断需要处理的事情
rdata = Sci0Read();
switch(rdata)
{
case '@': //起始符号
sci_count = 0;
sci_ready = 0;
break;
case '#': //终结符号
sci_data[sci_count++] = 0;
sci_ready = 1;
break;
default:
sci_data[sci_count++] = rdata;
}
SCI0CR2_RIE = 1;
}
当主程序检测到sci_ready为1以后,就读取接收缓冲区,分别控制产生的PWM来控制舵机转过多少角度,具体舵机怎么控制可以百度。。。
上位机在枚举按键的时候就可以设定X轴和Y轴的上限和下限,在此处我设定的是下限0,上限180度,这样在摇杆静止居中的时候就是中间90度,舵机也转在中间位置,在后面付上的代码中,因为后来改来控制云台了,所以在串口发送部分发送的数据有变化,是发送的控制云台的指令。。。在代码中也有我自己写的串口类,只需要简单设置一下串口属性就行了,比如comm.OpenComm(L"com2",9600);打开串口2,波特率9600, XXXXXXXtLenght(0);设置接收到几个比特以后发送接收到消息,这里设置成0就是每收到一个字节都发送一次消息。具体怎么用在源代码里也有。。-_-附上上位机代码,已经被我从控制舵机修改成控制监控球芯了,效果可以在论坛中另一篇帖子中找到 ^_^
另代码稍微有点乱,没什么注释,高手莫见笑[s:220]
上位机.rar
13.32KB
RAR
36次下载
200字以内,仅用于支线交流,主线讨论请采用回复功能。