#include #define GATE1 4 #define GATE2 5 #define DECODE(X) ((X ^ 0x17) + 0x17) uint8_t nunchuckMin1[5]; uint8_t nunchuckMin2[5]; uint8_t nunchuckMax1[5]; uint8_t nunchuckMax2[5]; uint8_t nunchuck1[6]; uint8_t nunchuck2[6]; int count; int state = LOW; bool printflag = false; void setup() { for(int i=0; i<5; i++) { nunchuckMin1[i] = 255; nunchuckMin2[i] = 255; nunchuckMax1[i] = 0; nunchuckMax2[i] = 0; } nunchuckInit(); digitalWrite(GATE1, HIGH); digitalWrite(GATE2, LOW); Serial.begin(9600); } void loop() { count = 0; Wire.requestFrom(0x52, 6); while(Wire.available()) { nunchuck1[count] = DECODE(Wire.read()); count++; } if(count >= 5) { for(int i=0; i<5; i++) { if(nunchuck1[i] == 255) { //Serial.print(i); //Serial.println(" 255あり"); continue; } if(nunchuck1[i] < nunchuckMin1[i]) { nunchuckMin1[i] = nunchuck1[i]; printflag = true; } if(nunchuck1[i] > nunchuckMax1[i]) { nunchuckMax1[i] = nunchuck1[i]; printflag = true; } } changeNunchuck(); sendZero(); delay(10); if(printflag) { Serial.println("[Nunchuck1]"); printData(nunchuckMin1, nunchuckMax1); printflag = false; } } count = 0; Wire.requestFrom(0x52, 6); while(Wire.available()) { nunchuck2[count] = DECODE(Wire.read()); count++; } if(count >= 5) { for(int i=0; i<5; i++) { if(nunchuck2[i] == 255) { Serial.print(i); Serial.println(" 255あり"); continue; } if(nunchuck2[i] < nunchuckMin2[i]) { nunchuckMin2[i] = nunchuck2[i]; printflag = true; } if(nunchuck2[i] > nunchuckMax2[i]) { nunchuckMax2[i] = nunchuck2[i]; printflag = true; } } changeNunchuck(); sendZero(); delay(10); if(printflag) { Serial.println("[Nunchuck2]"); printData(nunchuckMin2, nunchuckMax2); printflag = false; } } } void printData(uint8_t* nunmin, uint8_t* nunmax) { Serial.print("JoyX MIN: "); Serial.print(nunmin[0]); Serial.print(" JoyX MAX: "); Serial.print(nunmax[0]); Serial.print(" JoyY MIN: "); Serial.print(nunmin[1]); Serial.print(" JoyY MAX: "); Serial.println(nunmax[1]); Serial.print(" AccX MIN: "); Serial.print(nunmin[2]); Serial.print(" AccX MAX: "); Serial.print(nunmax[2]); Serial.print(" AccY MIN: "); Serial.print(nunmin[3]); Serial.print(" AccY MAX: "); Serial.print(nunmax[3]); Serial.print(" AccZ MIN: "); Serial.print(nunmin[4]); Serial.print(" AccZ MAX: "); Serial.println(nunmax[4]); } void changeNunchuck() { if (state == LOW) { digitalWrite(GATE1, LOW); digitalWrite(GATE2, HIGH); state = HIGH; } else { digitalWrite(GATE1, HIGH); digitalWrite(GATE2, LOW); state = LOW; } } void sendZero() { Wire.beginTransmission(0x52); Wire.write(0x00); Wire.endTransmission(); } void nunchuckInit() { pinMode(GATE1, OUTPUT); pinMode(GATE2, OUTPUT); digitalWrite(GATE1, HIGH); digitalWrite(GATE2, HIGH); Wire.begin(); Wire.beginTransmission(0x52); Wire.write((uint8_t)0x40); Wire.write((uint8_t)0x00); Wire.endTransmission(); }