RoBoard魔人的機器人日誌

2011/11/12

[教學] 如何讀取wii搖桿

上一次有提到wii的搖桿要如何接上I2C的線

這次就說明一下如何讀取

首先可以看到
http://www.windmeadow.com/node/42
這個網站

他有完整的說明

不過我這邊再仔細的說一次
  • WII搖桿的Speed
根據網站上寫的
Since the nunchuck uses "Fast" I2C, we will need to change the default speed:
#define TWI_FREQ 400000L.
可以得知
speed_mode為fast
bps為400000L
 


  • WII搖桿傳輸的基本設定
文件中提到
For the Arduino to communicate with the nunchuck, it must send a handshake. So first send 2 bytes "0x40,0x00". Then send one byte "0x00" each time you request data from the nunchuck. The data from the nunchuck will come back in 6 byte chunks.
在一開始必須先傳兩個byte給搖桿
分別為0x40與0x00

然後再每次讀取前必須先傳一個0x00給搖桿

傳輸完後會回傳6個byte回來

建議在傳輸完0x00後delay一小段時間


  • wii解碼
這邊是比較多人容易忽略的

再文件中似乎沒提到
不過在下面的範例程式有提到
char
nunchuk_decode_byte (char x)
{
  x = (x ^ 0x17) + 0x17;
  return x;
}
 
這表示傳回的6個byte都必須先經過解碼才可以使用
否則會得到錯誤的值
解碼的方式為 先將值XOR 0x17再加上0x17



  • 如何解讀6個BYTE
首先要先了解到搖桿有哪些值會讀入
有搖桿,加速度,兩顆按鍵

搖桿有XY兩軸
加速度則有XYZ三軸
所以對照到文中的表格
  1. 第一個byte為搖桿的X軸
  2. 第二個byte為搖桿的Y軸
  3. 第三個byte為加速度的X軸的前8個bit
  4. 第四個byte為加速度的Y軸的前8個bit
  5. 第五個byte為加速度的Z軸的前8個bit
  6. 第六個byte   先分為8個bit看
           第一個bit為Z鍵 0為按下 1為沒按下
           第二個bit為C鍵 0為按下 1為沒按下
           接著
           第三及第四為加速度X的後兩個bit
           第五及第六為加速度Y的後兩個bit
           第七及第八為加速度Z的後兩個bit

所以這裡可以得知加速度一共有10個bit

這樣就可以讀出所有wii搖桿的資訊了









影片及code將會補貼...
Share:

0 留言:

張貼留言

技術提供:Blogger.

追蹤者