3GO模拟飞行网|3GO Cyber Air Force

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: Akar

Freetrack on Wiimote(参数对比、实际效果对比视频、红外LED选择、主动/反射方案)

[复制链接]
发表于 2008-10-28 19:42:51 | 显示全部楼层
原帖由 chard 于 2008-10-28 19:09 发表
还有个问题,红外管是要用脉冲电流来驱动(在直流电流会烧管),这个要用什么方法来决结呢???


不会烧管子...........但是要看你怎么连的........其实和LED一个用法.
发表于 2008-10-28 19:44:24 | 显示全部楼层
原帖由 chard 于 2008-10-28 19:09 发表
还有个问题,红外管是要用脉冲电流来驱动(在直流电流会烧管),这个要用什么方法来决结呢???

LED从来就是直流驱动的吧,什么时候变成脉冲的了?
 楼主| 发表于 2008-10-29 13:04:05 | 显示全部楼层
原帖由 WING_HAMMER 于 2008-10-28 19:42 发表
想了一下,根据WII remote的原理,直接读X,Y坐标,那如果是1灯的模式,则会出现在中点附近灵敏度高,大角度时灵敏度低的问题,就如同把摇杆曲线反过来了,原因是在中点附近LED运动的时候,运动方向和Wii接收的方向是 ...



技术问题,可以通过修改GlovePIE的代码来实现。
发表于 2008-10-29 23:30:00 | 显示全部楼层
楼主:软件:GlovePIE、蓝牙驱动、wiinRemote在哪里下载?想做一个了
发表于 2008-10-31 16:42:09 | 显示全部楼层
还有940nm的红外管要到哪里去买啊,问遍了电子城中卖元件的商铺都只有普通的那种小角度的。
 楼主| 发表于 2008-11-2 00:28:22 | 显示全部楼层
原帖由 csxcz 于 2008-10-29 23:30 发表
楼主:软件:GlovePIE、蓝牙驱动、wiinRemote在哪里下载?想做一个了


这个……
google一下吧……,这个wiitrack不使用wiinRemote,但是你下载也无妨。
 楼主| 发表于 2008-11-2 00:29:53 | 显示全部楼层
原帖由 chard 于 2008-10-31 16:42 发表
还有940nm的红外管要到哪里去买啊,问遍了电子城中卖元件的商铺都只有普通的那种小角度的。


实在不可以的话,你可以自己把小角度的红外管磨制成平头带倒角的形状即可。

DIY专区有图例贴,搜一下即可,没有什么难度的。
发表于 2008-11-2 09:25:15 | 显示全部楼层
原帖由 Akar 于 2008-11-2 00:28 发表


这个……
google一下吧……,这个wiitrack不使用wiinRemote,但是你下载也无妨。

好的,我已经买好了wiiremote右手,软件也下载好了,不过对于代码一窍不通,还请各位多加指导啊,现在只少一个蓝牙适配器了?什么型号的蓝牙适配器都可以吗?谢谢
 楼主| 发表于 2008-11-2 17:24:07 | 显示全部楼层

你选的这款应该可以,IVT很好用

蓝牙适配器是不是什么型号都可以啊?这种行不行?全世界最小的迷你蓝牙适配器V2.0+EDR usb即插即用免驱 1年包换
功能:
-支持蓝牙新技术,Broadcom 2045芯片,提供合法地址码;


-免驱版,推荐配合最新IVT5.0.5.178使用;
-蓝牙V2.0+EDR;
-USB2.0规范,向下兼容USB1.1/1.2;
-USB总线供电,无须接电源,LED灯指示;
-超薄极轻、内置天线,不需USB连线,使用、携带方便;
-频率:2.400-2.4835Ghz;
-传播频率:频率跳变;
-传播光谱(FHSS);
-传输速率: 3Mbit/s(EDR),传输速度更快捷;
-工作范围:25m(实测);
-安全:128 bits安全模式;
-支持所有Windows系统,包括Windows vista;
-支持EDR安全模式;
-实现无线传输文件、影音、无线打印无线组网等功能;
-无线连接带有蓝牙技术的设备(如电脑/PDA/手机/打印机等/无线游戏手柄);
-支持VOIP语音通话,可无缝连接Skype软件。http://auction1.taobao.com/aucti ... a18ecba98f248.jhtml
 楼主| 发表于 2008-11-2 17:26:08 | 显示全部楼层

DeadKnight

if starting then
wait 200 ms
PIE.FrameRate = 100Hz
if Wiimote.dot2vis = true then
var.XOffset = (Wiimote.Dot1x + Wiimote.Dot2x) / 2
var.YOffset = (Wiimote.Dot1y + Wiimote.Dot2y) / 2
else
var.XOffset = Wiimote.Dot1x
var.YOffset = Wiimote.Dot1y
endif
var.Angle = 1200
endif

//Sensitivity
if pressed(NumPadMinus) and var.Angle < 3000 then
var.Angle = var.Angle + 50
say (var.Angle)
else
var.Angle = var.Angle
endif
if pressed(NumPadPlus) and var.Angle > 50 then
var.Angle = var.Angle - 50
say (var.Angle)
else
var.Angle = var.Angle
endif


//Maprange
var.MinIRX = var.XOffset - var.Angle
var.MaxIRX = var.XOffset + var.Angle
var.MinIRY = var.YOffset - var.Angle
var.MaxIRY = var.YOffset + var.Angle
//Center View
if NumPad5 || Joystick2.Button2 then
if Wiimote.dot2vis = true then
var.XOffset = (Wiimote.Dot1x + Wiimote.Dot2x) / 2
var.YOffset = (Wiimote.Dot1y + Wiimote.Dot2y) / 2
else
var.XOffset = Wiimote.Dot1x - var.TempX
var.YOffset = Wiimote.Dot1y - var.TempY
endif
say "center"
endif
//Mapset
if Wiimote.dot2vis = true then
var.TempDot2x = Wiimote.Dot2x
var.TempDot1x = Wiimote.Dot1x
var.TempDot2y = Wiimote.Dot2y
var.TempDot1y = Wiimote.Dot1y
var.X = (Wiimote.Dot1x + Wiimote.Dot2x) / 2
var.Y = (Wiimote.Dot1y + Wiimote.Dot2y) / 2
var.TempX = abs(Wiimote.Dot1x - Wiimote.Dot2x) / 2
var.TempY = abs(Wiimote.Dot1y - Wiimote.Dot2y) / 2
var.dotCount=2
else
if var.TempDot1x < var.TempDot2x then
var.X = Wiimote.Dot1x + var.TempX
else
var.X = Wiimote.Dot1x - var.TempX
endif
if var.TempDot1y < var.TempDot2y then
var.Y = Wiimote.Dot1y + var.TempY
else
var.Y = Wiimote.Dot1y - var.TempY
var.dotCount=1
endif
endif
//smoothing

var.FakeTrackIRYaw = ensureMapRange(var.X, var.MaxIRX, var.MinIRX , -180, 180)
var.FakeTrackIRPitch = ensureMapRange(var.Y, var.MinIRY, var.MaxIRY , -180, 180)

var.accelerateYaw = abs(var.FakeTrackIRYaw) * var.FakeTrackIRYaw * 0.30
var.acceleratePitch = abs(var.FakeTrackIRPitch) * var.FakeTrackIRPitch * 0.25

var.FakeTrackIRYaw = sign(var.FakeTrackIRYaw) * min(abs(var.accelerateYaw), abs(var.FakeTrackIRYaw * 2)) + var.FakeTrackIRYaw * 0.5
var.FakeTrackIRPitch = sign(var.FakeTrackIRPitch) * min(abs(var.acceleratePitch), abs(var.FakeTrackIRPitch * 2)) + var.FakeTrackIRPitch * 0.5

var.FakeTrackIRYaw = EnsureRange(var.FakeTrackIRYaw, -170, 170)
var.FakeTrackIRPitch = EnsureRange(var.FakeTrackIRPitch, -90, 90)

var.FakeTrackIRYaw = smooth(var.FakeTrackIRYaw,60)
var.FakeTrackIRPitch = smooth(var.FakeTrackIRPitch,60)

FakeTrackIR.Yaw = var.FakeTrackIRYaw
FakeTrackIR.Pitch = var.FakeTrackIRPitch

debug = var.Angle + ' Battery=' + Wiimote.Battery + ' Yaw=' + FakeTrackIR.Yaw + ' Pitch=' + FakeTrackIR.Pitch
 楼主| 发表于 2008-11-2 17:28:34 | 显示全部楼层

代码基本上是使用Basic的语句和语法,非常简单

先用别人现成的代码就可以
发表于 2008-11-7 15:29:45 | 显示全部楼层
原帖由 Akar 于 2008-11-2 17:28 发表
先用别人现成的代码就可以

好的,蓝牙适配器已到货,下午就去买940nm的红外管,上面的代码是两灯的还是一灯的?直接拷贝在GlovePIE中执行就好了吗?谢谢
 楼主| 发表于 2008-11-14 17:54:34 | 显示全部楼层
原帖由 csxcz 于 2008-11-7 15:29 发表

好的,蓝牙适配器已到货,下午就去买940nm的红外管,上面的代码是两灯的还是一灯的?直接拷贝在GlovePIE中执行就好了吗?谢谢



最后面的代码是2led的方案,我建议你做4led,到时候根据需要遮住不需要的led即可。

copy-->run!
发表于 2008-11-15 03:08:29 | 显示全部楼层
要遮严实........红外有一定的穿透能力........
 楼主| 发表于 2008-11-15 11:05:54 | 显示全部楼层

单LED版高速版代码

==以下开始粘贴==
if starting then
   wait 200 ms
   PIE.FrameRate = 100Hz
   var.XOffset = Wiimote.Dot1x
   var.YOffset = Wiimote.Dot1y
   var.Angle = 1800
   var.Zoom = -0.4
endif
//Sensitivity
if pressed(NumPadMinus) and var.Angle < 1800 then
   var.Angle = var.Angle + 100
   say (var.Angle)
else
   var.Angle = var.Angle
endif
if pressed(NumPadPlus) and var.Angle > 100 then
   var.Angle = var.Angle - 100
   say (var.Angle)
else
   var.Angle = var.Angle
endif


//Zoom
if pressed(NumPad8) and var.Zoom < 0.5  then var.Zoom = var.Zoom + 0.05
if pressed(NumPad2) and var.Zoom > -0.4 then var.Zoom = var.Zoom - 0.05

//Freeze for shooting
if Joystick2.button4 then
FakeTrackIR.z = 0.3                //这是当Joystick2.button4按下情况下的z(Zoom)轴值,可以根据自己需要调整
else
FakeTrackIR.z = var.Zoom     //这是当Joystick2.button4放开情况下的z(Zoom)轴值,可以根据自己需要调整


//Maprange
var.MinIRX = var.XOffset - var.Angle
var.MaxIRX = var.XOffset + var.Angle
var.MinIRY = var.YOffset - var.Angle
var.MaxIRY = var.YOffset + var.Angle


//Center View
if pressed(NumPad5) then
   var.XOffset = Wiimote.Dot1x
   var.YOffset = Wiimote.Dot1y
   say "校准居中"
endif
//Mapset
   var.TempDot1x = Wiimote.Dot1x
   var.TempDot1y = Wiimote.Dot1y
   var.X = Wiimote.Dot1x
   var.Y = Wiimote.Dot1y
   var.TempX = Wiimote.Dot1x
   var.TempY = Wiimote.Dot1y

//smoothing
var.TrackIRYawOld = var.FakeTrackIRYaw
var.TrackIRPitchOld = var.FakeTrackIRPitch
var.FakeTrackIRYaw = ensureMapRange(var.X, var.MaxIRX, var.MinIRX , -360, 360)
var.FakeTrackIRPitch = ensureMapRange(var.Y, var.MinIRY, var.MaxIRY , -360, 360)

FakeTrackIR.Yaw = smooth(var.FakeTrackIRYaw,30)
FakeTrackIR.Pitch = 1.5 * smooth(var.FakeTrackIRPitch,30)
if FakeTrackIR.Pitch > 90 then Beep(5000,6)
debug = var.Angle + ' Battery=' + Wiimote.Battery + ' Yaw=' + FakeTrackIR.Yaw + ' Pitch=' + FakeTrackIR.Pitch + ' Zoom=' +var.Zoom
endif  //endif for "if Joystick2.button4 then"
==到此为止==

因为是解释执行的方式,故为了取得最快速的响应,我把过多的注释都去除了;
红色部分可以根据自己需要调整的部分,包括键盘、摇杆的功能按键设置和Zoom值的初始设定与调整。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|3GO模拟飞行网|3GO Cyber Air Force ( 沪ICP备08002287号|沪ICP备14050587号 )

GMT+8, 2024-11-16 16:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表