Stap 4: De Code
Eerst moet u het testen van de Wii motion Plus, als het werkt dan moet je gewoon om verbinding te maken met de Wii nunchuck en het zal ook werken.Opmerking: Ik heb de originele code van deze webpagina:
http://Arduino.CC/Forum/index.php/topic, 8507.0.html
Ik heb niet de code die ik gewoon vast om te kunnen draaien in de nieuwe Arduino IDE 1.0.2 maken. en ik heb toegevoegd nieuwe code voor de
LEDs, alle credits zijn voor knuckles904.
OK eerst moet u Ga naar uw bibliotheek arduino en vinden het draad tapijt ga dan naar Utility en vind de archief-twi.h openen
met wordpad en verwijder de lijnen van //#define ATMEGA8 #endinf en plakken deze lijndiensten in plaats daarvan:
#define ATMEGA8
#ifndef CPU_FREQ ^ M
#define CPU_FREQ 16000000L
#endif
#ifndef TWI_FREQ ^ M
#define TWI_FREQ 100000L
#endif
Het twi.h archief bewaren en nu open uw arduino IDE en kopieer en plak de code:
#include < Wire.h >
bytegegevens [6]; zes gegevensbytes
int yaw, pitch, roll; drie assen
int yaw0, pitch0, roll0; kalibratie nullen
ongeldig wmpOn() {}
Wire.beginTransmission(0x53); WM + vertrekt gedeactiveerd op adres 0x53
Wire.write(0xFE); 0x04 verzenden adres 0xFE activeren WM +
Wire.write(0x04);
Wire.endTransmission(); WM + springt naar adres 0x52 en is nu actief
}
ongeldig wmpSendZero() {}
Wire.beginTransmission(0x52); nu op het adres 0x52
Wire.write(0x00); nul om aan te geven dat wij willen info sturen
Wire.endTransmission();
}
ongeldig calibrateZeroes() {}
for (int i = 0; ik < 10; i ++) {}
wmpSendZero();
Wire.requestFrom(0x52,6);
for (int i = 0; ik < 6; i ++) {}
data[i]=Wire.Read();
}
yaw0 += (((gegevens [3] >> 2) << 8) + data [0]) / 10; gemiddelde 10 lezingen
pitch0 += ((([4] gegevens >> 2) << 8) + gegevens [1]) / 10;
roll0 += ((([5] gegevens >> 2) << 8) + gegevens [2]) / 10;
}
Serial.Print("Yaw0:");
Serial.Print(yaw0);
Serial.Print ("Pitch0:");
Serial.Print(pitch0);
Serial.Print ("Roll0:");
Serial.println(roll0);
}
ongeldig receiveData() {}
wmpSendZero(); verzenden van nul voor elke aanvraag (hetzelfde als nunchuck)
Wire.requestFrom(0x52,6); de zes bytes voor aanvragen van de WM +
for (int i = 0; ik < 6; i ++) {}
data[i]=Wire.Read();
}
yaw = ((gegevens [3] >> 2) << 8) + data [0]-yaw0;
toonhoogte = ((gegevens [4] >> 2) << 8) + gegevens [1]-pitch0;
Roll = ((gegevens [5] >> 2) << 8) + gegevens [2]-roll0;
}
Zie http://wiibrew.org/wiki/Wiimote/Extension_Controllers#Wii_Motion_Plus
voor meer info over wat elke byte vertegenwoordigt
VOID Setup {}
Serial.begin(115200);
Serial.println ("WM + tester");
Wire.begin();
wmpOn(); inschakelen WM +
calibrateZeroes(); kalibreert nullen
delay(1000);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
pinMode (10, OUTPUT);
pinMode (9, OUTPUT);
pinMode (8, OUTPUT);
pinMode (7, OUTPUT);
}
void loop {}
receiveData(); gegevens ontvangen en berekenen yaw pitch en roll
Serial.Print ("yaw:"); //see diagram op randomhacksofboredom.blogspot.com
Serial.Print(yaw); voor info op welke as is die
Serial.Print ("pitch:");
Serial.Print(pitch);
Serial.Print ("roll:");
Serial.println(roll);
delay(100);
Als (worp > = 1000) {}
digitalWrite(12,HIGH);
}
anders als (worp < =-1000) {}
digitalWrite(11,HIGH);
}
anders als (yaw > = 1000) {}
digitalWrite(10,HIGH);
}
anders als (yaw < =-1000) {}
digitalWrite(9,HIGH);
}
anders als (roll > = 1000) {}
digitalWrite(8,HIGH);
}
anders als (roll < =-1000) {}
digitalWrite(7,HIGH);
}
else {}
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(8,LOW);
digitalWrite(7,LOW);
}
}