讀取wii搖桿之值
螢幕上顯示的有toy X,Y 為搖桿兩軸
accel X,Y,Z 為加速度三軸
button Z,C 為兩顆按鈕
以下為code
#include "stdio.h"
#include "conio.h"
#define USE_COMMON
#include "roboard.h"
#include "roboard_dll.h"
const unsigned char wii_addr = 0x52;
int joy_x_axis;
int joy_y_axis;
int accel_x_axis;
int accel_y_axis;
int accel_z_axis;
int z_button;
int c_button;
void wii_data(unsigned char*);
int main(){
roboio_SetRBVer(RB_110);
unsigned char buf[6];
i2c_Initialize(I2CIRQ_DISABLE);
i2c0_SetSpeed(I2CMODE_FAST, 400000L);
i2c0master_StartN(wii_addr, I2C_WRITE, 2);
i2c0master_WriteN(0x40);
i2c0master_WriteN(0x00);
while(!kbhit()){
i2c0master_StartN(wii_addr, I2C_WRITE, 1);
i2c0master_WriteN(0x00);
delay_ms(5);
i2c_Receive(wii_addr,buf,6);
for(int i = 0; i < 6; i++)
buf[i] = (buf[i] ^ 0x17) + 0x17;
wii_data(buf);
printf("toy X:%d\ttoy Y:%d\n",joy_x_axis,joy_y_axis);
printf("accel X:%d\taccel Y:%d\taccel Z:%d\n", accel_x_axis, accel_y_axis, accel_z_axis);
printf("button Z:%d\tbutton C:%d\n",z_button,c_button);
system("cls");
}
i2c_Close();
return 0;
}
void wii_data(unsigned char *buf){
joy_x_axis = buf[0];
joy_y_axis = buf[1];
accel_x_axis = buf[2] << 2;
accel_y_axis = buf[3] << 2;
accel_z_axis = buf[4] << 2;
z_button = 1;
c_button = 1;
if ((buf[5] >> 0) & 1) z_button = 0;
if ((buf[5] >> 1) & 1) c_button = 0;
if ((buf[5] >> 2) & 1) accel_x_axis += 2;
if ((buf[5] >> 3) & 1) accel_x_axis += 1;
if ((buf[5] >> 4) & 1) accel_y_axis += 2;
if ((buf[5] >> 5) & 1) accel_y_axis += 1;
if ((buf[5] >> 6) & 1) accel_z_axis += 2;
if ((buf[5] >> 7) & 1) accel_z_axis += 1;
}


請問一下 這個硬體要怎麼接 謝謝
回覆刪除請參考文章:
刪除[教學] 如何wii搖桿接上I2C