2012年1月7日 星期六

Wiimote : 支援 Windows 7 64 bit 的 Wiimote Whiteboard 1.3 (2012.01.15更新)

Wiimote 電子白板的座標軟體,我一直都使用當初下載到 Smoothboard 最後免費釋出的 0.4.6 版,雖然它是舊的測試版,但是在 Windows 7 64 bit 仍然可以跑得好好的。Johnny Chung Lee 網站上 Wiimote Whiteboard 最後一個版本為 v0.3,但是它在 Windows 7 64 bit 上只能進行四點定位,再來模擬滑鼠的部份就無法正常工作。如果只想用這個雖然陽春但是可以免費使用、簡單操作的程式怎麼辦?沒關係,在下面的網站中,有人把 Johnny Chung Lee 的程式稍微改良以後,可以順利的在 Windows 7 64 bit 上運作。

現在座標軟體其實比較多了,不過,好用的幾乎都商品化,要註冊付費才能正常的使用。真不想花錢,或是懶得找,上面的 blog 中可以找到改良過的 Wiimote Whiteboard。不過,我測試過,它放在比較上方的連結所下載的 version 1.2 有 bugs ,程式中的定位按鈕(Calibrate Location)按下去沒反應,游標控制的 checkbox 點選以後不會立即有效,左上角會固定出現滑鼠指標.......,在文章下方的回應中, Per Thomas 有貼了一個 Version1.3 的連結,記得要下載這個修正過的版本:

這支程式除了解決了 Windows 7 64 bit 的問題,它還在工具的最上方加了一個可以進行藍芽連線的按鈕(Connect),看了 source ,它是直接用系統的函數來進行這部份的功能,不像我的 WiimoteAutoConnect 是靠別人開發的函數庫(其實也只用到它整個功能的一丁點而已)。不過,試了一下,藍芽配對連線的部份用起來怪怪的,而且,被它嘗試連線失敗以後,Wiimote 的四個藍色 LED 就一直閃個不停,連我的 WiimoteAutoConnect 都會搜尋不到任何藍芽裝置,必須把 Wiimote 電源切掉再重開才能正常使用。有空我再來追一下它的 source ,看能不能把這個 bug 除掉。
對我來說,使用 Smoothboard 最大的好處是,當我們在找尋 Wiimote 擺放的最佳位置時,左下角的 IR dot 觀側區會讓我清楚的看到紅外線筆在哪一個相對位置,這樣,可以很快調整的 Wiimote 的位置及角度。另一個就是當 Wiimote 的『可視範圍』大於螢幕時,我們可以自訂那些區域感應到紅外線時要執行的功能。這樣的需求,拿 Per Thomas 的這個版本來改,應該是可行的。時間~時間~想做的事很多,我需要的是時間啦!

後記

還是忍不住把 source 拿來修改了,目前多加了以下的功能:
  • 可以在下面灰底的小矩形中監看 IR dots 在 Wiimote 的視界中大概的位置。
  • 加入了右鍵的功能,只要在原地按著 IR pen 約 2 秒鐘(會出現旋轉的圈圈),觸發的滑鼠事件會自動變成右鍵按一下。不過,因為是模擬的,和直接按滑鼠右鍵有一點點不同,在某些軟體下和想像的運作方式可能會不同。以 Windows 的小畫家為例,在使用畫筆時,按右鍵是以背景色(或顏色2)來上色,但是在這種模擬右鍵下,只能畫出一個點,而無法使用拖曳的方式來畫出線,此缺點可以用下面另一種按滑鼠右鍵來替代。
  • 在螢幕以外的範圍按,可執行指定的功能:目前提供螢幕左右兩側,按上面時送方向鍵〔上〕,按下面時送方向鍵〔下〕;如果在螢幕下方按一下,〔下一次的滑鼠按鍵會變成右鍵〕。這裡的右鍵因為是像切換開關一樣,要在螢幕中再按一下才開始執行右鍵的功能,所以支援滑鼠的拖曳,不會有前述長按後執行右鍵無法拖曳的問題。
  • 視窗最小化以後會自動由工作列上消失,以滑鼠點選一下在 System Tray 的小圖示以後才會還原回來。
  • 加了中文化的功能,如果用的是中文視窗(zh-TW)會自動顯示中文。
我想研究出如何判斷一個點是否在某個四邊形內的演算法以後,就可以再加入在畫面外按滑鼠時的自訂功能。另外,改了半天都無法解決 AutoConnect 連線功能時好時壞的情形,需要再研究一番。反正可以暫時用我自己的  WiimoteAutoConnect  。



檔案下載

更新紀錄
  • 2012.01.15 加入一個 OutsideScreenToggles.ini ,裡面記錄了螢幕外由左上角開始順時針旋轉的 12 個感應區塊要做什麼動作,依照此設定執行指令。目前尚差一個圖形化設定的界面。暫時得自行參考 Virtual Key Codes 的資料
  • 2012.01.14 修正長按的圓形動畫會閃爍的問題。把訊息中文化,如果是 zh-TW 會自動換成正體中文。
  • 2012.01.14 對準螢幕「長按」時會出現「旋轉圓形」的動畫,提醒準備進入一次右鍵的模式。
  • 2012.01.12 將 WiimoteLib 的 source 置入專案中,這樣就不用 WiimoteLib.dll ,只要一個 WiimoteWhiteboard.exe 就可以使用。
  • 2012.01.11 稍微修改了在超出螢幕下方按一下,讓它在下一次的滑鼠模擬是右鍵的動作,可以執行右鍵的拖曳動作。
    解決電量如果超過 100% 程式會出現錯誤而結束的問題。
  • 2012.01.10 本來以為要判斷是否在螢幕範圍內 click 會很複雜,繞了一大圈,原來利用 warpedPos 就可以知道經過轉換以後的滑鼠游標位置,因為轉換過的座標是矩形的,所以要判斷是在哪一個「象限」click 變成很容易:小於 0 或大於 Width / Height 的通通是在螢幕外按。這樣一來,要加入 Outside Screen Toggle 的功能就可行,目前加入在右側的部份按會變成 Mouse Right Click 測試。有空再加入設定的畫面,這樣就可以自訂功能。
    另外,修改了 MoveMouse ,把原來在超過螢幕按一下,滑鼠游標仍會移動,改成不移動。
  • 2012.01.09 加入最小化後不佔工作列,利用 NotifyIcon 讓它縮到「System Tray」。
  • 2012.01.08 修改判斷是否使用 MS Bluetooth Stack 的程式碼,改用 BluetoothFindFirstRadio 來判斷。
  • 2012.01.07 將網路上下載回來的 1.3 source 改了一下,加入可監看 IR dots 的功能和右鍵的功能,AutoConnect 的部份有稍做修改,但未把問題徹底解決。

6 則留言:

  1. 我想增加控制燈號的功能,但是在WiimoteMainForm.cs中(其餘沒改)加入一個CheckBox寫的事件卻沒用(其中一部分如下,是控制LED2)

    Wiimote wm = new Wiimote();

    private bool LED2 = false;

    private void
    LEDBox2_CheckedChanged(object sender, EventArgs e)
    {
    if (LEDBox2.Checked)
    {
    LED2 = true;
    wm.SetLEDs(LED1, LED2, LED3, LED4);
    }
    else
    {
    LED2 = false;
    wm.SetLEDs(LED1, LED2, LED3, LED4);
    }
    }

    請問還需要加入什麼

    回覆刪除
  2. 剛剛忘了提到
    我是使用您提供的1.3.1.11版修改的

    回覆刪除
  3. 樓上這位訪客您好:
    其實我對 C# 並沒有那麼熟,都是邊試邊看再修正,真要我回答,只能猜啦!
    我看原來的 source 中,有關 Wiimote 的控制是寫在 Controller Class 中,WiimoteMainForm.cs 中的事件再去引發 Controller 中的事件讓它執行,這樣說不知對不對,您參考看看。

    回覆刪除
  4. 終於搞定了

    wm.SetLEDs(LED1, LED2, LED3, LED4);
    改成
    controller.wm.SetLEDs(LED1, LED2, LED3, LED4);
    再將Controller.cs裡的
    Wiimote wm = new Wiimote();
    改成
    internal Wiimote wm = new Wiimote();
    就行了

    回覆刪除
  5. thanks alot! and thanks for google translate :D

    回覆刪除

 
© 2009. Design by Pocket