守候_海阔天空

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

转载请注明出处。

-------------------------------------------------------2015/9/15

公司做模拟操作,需要用到一些外设。Wii控制器(后简称wiimote)、含有陀螺仪、键位、红外(IR)、蓝牙、等优秀“基因”。用来模拟场景做射线检测,或者重力游戏在适合不过。

一、硬件篇:在连接设备的时候回提示重启电脑,提示好关闭和保存好工程。

1、蓝牙模块(推荐2.0、虽然已经有更高版本但是毕竟几年前的东西,考虑兼容也还是选择2.0.)

2、wiimote

------------------------------------------------理论上有这两个东西就可以工作了,但根据不同需求,以下外设可选。

3、红外接收器[可选,无论usb-a,usb-b均可]

说明:本红外设备还有一个usb的口子,刚开始我以为是用来传输数据的,其实不是,只是供电,所以不管是原生wii的红外接收器,还是某宝上购买的usb-a的那种常规均可,只要能为其供电。我这里选用usb-a的

4、controller[可选]由于手柄上具备controller功能,加上项目部需要,所以这里没有选购也不涉及,如有问题,请自行克服。

二、连接篇

1、首先安装蓝牙驱动,如果购买的蓝牙有自带驱动和连接程序,可以不参考这篇文章,截止本书书写采用系统是win7,64bit

推荐IVT的蓝牙驱动,附上连接,这里

安装完成后先不要着急重启,然后运行客户端:

a,同时按住,wiimote的 ①②键,开启手柄蓝牙。

b,启动客户端搜索设备

c,当搜索到设备后点右键搜索到的手柄,点搜索服务。

d,完成搜索服务后,选择蓝牙人机输入。等待连接,当连接成功后,会自动安装手柄驱动文件。安装完成后,会提示重启电脑,那就重启吧。

 

建立好连接后基本上就完成了大部分工作,以下工作我就提供国外找到的开发包吧。里面是一些C++到处来的类,但是使用者无需担心。已经有人为我们处理好了逻辑。

---------------------------------------------------------------------------------------------

开发篇:这里其实我需要将的很少,几乎没有,提一下就行,折腾硬件才是乐趣所在。下载以下package

1、控制类:wiiMote,不装逼,反正这个对象随便申明,就算你申明再多其实成员函数都是一个功能。

void Start () 
{
        wiiMote wiiControllerListener;
        wiiControllerListener = new wiiMote();

        // 然后就可以无节操的获取到控制器的任何东西了
        float _x = wiiControllerListener.getIrX(0);
        float _y = wiiControllerListener.getIrY(0);
}

2.讲以下控制器中包含的函数

// 控制器开始
wiimote_start()

// 释放控制器,在OnApplicationQuit调用,或者不需要使用控制器时调用
wiimote_stop()

// 获取当前控制器连接个数
int wiimote_count()

// 获取控制器是否可用,参数是控制器索引,第一个控制器为0
bool wiimote_available( int which )

// 判断控制器是否已经开启红外检测功能
bool wiimote_isIRenabled( int which )

// 开启控制器的红外设备
bool wiimote_enableIR( int which )

// 是否有扩展输入设备,即上诉设备中第四个扩展控制器 
bool wiimote_isExpansionPortEnabled( int which )

// 让wii震动
// 参数一:震动的手柄是哪个?
// 参数二:震动的时间是多长(秒为单位)
wiimote_rumble( int which, float duration)

// 获取电量
double wiimote_getBatteryLevel( int which )

// 获取各个轴的加速度,提醒这里用的是byte,范围因此是0-255
byte wiimote_getAccX(int which)
byte wiimote_getAccY(int which)
byte wiimote_getAccZ(int which)

// 获取旋转,这里需要你把wii放平,然后横向的渲染
float wiimote_getRoll(int which)

// 获取wii所在的最高点
float wiimote_getPitch(int which)

// 获取红外方向-1,1
float getIrX(int which);
float getIrY(int which);

 

posted on 2015-09-15 14:32  守候_海阔天空  阅读(1012)  评论(2)    收藏  举报