給電跟連接 SDA, SCL(MEGA2560 是 D20 跟 D21, UNO 是 A4 跟 A5)
就可以讀出數據
#include <Wire.h>
const int NGnd = 18;//負極
const int NVcc = 19;//正極
static uint8_t NBuff[6];
void setup(){
Serial.begin(19200);
PowerSetup();
WiiNunchuckInit();
}
void loop(){
delay(Run());
}
void PowerSetup(){
pinMode(NGnd,OUTPUT);
pinMode(NVcc,OUTPUT);
digitalWrite(NGnd,LOW);
digitalWrite(NVcc,HIGH);
delay(200);
}
void WiiNunchuckInit(){
Wire.begin();
Wire.beginTransmission(0x52);
Wire.write(0x40);
Wire.write(0x00);
Wire.endTransmission();
}
void SendRequest(){
Wire.beginTransmission(0x52);
Wire.write(0x00);
Wire.endTransmission();
}
char Decode(char c){
c = (c ^ 0x17) +0x17;
return c;
}
int GetData(){
int count = 0;
Wire.requestFrom(0x52,6);
while(Wire.available()){
NBuff[count] = Decode(Wire.read());
count++;
}
SendRequest();
if(count >= 5){
return 1;
}
return 0;
}
int Run(){
GetData();
int joy_x = NBuff[0];
int joy_y = NBuff[1];
int accel_x = NBuff[2];
int accel_y = NBuff[3];
int accel_z = NBuff[4];
int button_c = 0;
int button_z = 0;
if((NBuff[5] >> 0) & 1){
button_z = 1;
}
if((NBuff[5] >> 1) & 1){
button_c = 1;
}
if((NBuff[5] >> 2) & 1){
accel_x += 2;
}
if((NBuff[5] >> 3) & 1){
accel_x += 1;
}
if((NBuff[5] >> 4) & 1){
accel_y += 2;
}
if((NBuff[5] >> 5) & 1){
accel_y += 1;
}
if((NBuff[5] >> 6) & 1){
accel_z += 2;
}
if((NBuff[5] >> 7) & 1){
accel_z += 1;
}
Serial.print("joy:");
Serial.print(joy_x,DEC);
Serial.print(",");
Serial.print(joy_y,DEC);
Serial.print(" \t");
Serial.print("accle:");
Serial.print(accel_x,DEC);
Serial.print(",");
Serial.print(accel_y,DEC);
Serial.print(",");
Serial.print(accel_z,DEC);
Serial.print(" \t");
Serial.print("button:");
Serial.print(button_z,DEC);
Serial.print(",");
Serial.print(button_c,DEC);
Serial.println("");
return 100;
}