Arduino Wii nunchuck och Wii motion plus med uppdaterad kod för IDE 1.0.2 och lysdioder (4 / 7 steg)
Steg 4: Koden
Först måste du testa Wii motion Plus, om det fungerar sedan behöver du bara ansluta Wii nunchuck och det kommer att fungera också.Obs: Jag fick den ursprungliga koden från denna webbsida:
http://Arduino.cc/forum/index.php/topic, 8507.0.html
Jag gjorde inte koden jag bara fast den för att kunna köra i nya Arduino IDE 1.0.2. och jag har lagt ny kod för den
lysdioder, alla krediter är för knuckles904.
OK först måste du gå till biblioteket arduino och hitta tråd mattan då gå till verktyg och hitta arkiv twi.h öppna den
med wordpad och ta bort rader från //#define ATMEGA8 till #endinf och klistra in dessa rader i stället:
#define ATMEGA8
#ifndef CPU_FREQ ^ M
#define CPU_FREQ 16000000L
#endif
#ifndef TWI_FREQ ^ M
#define TWI_FREQ 100000L
#endif
Spara twi.h Arkiv och nu öppna din arduino IDE och kopiera och klistra in koden:
#include < Wire.h >
byte data [6]. sex data-byte
int yaw, pitch, rulla; tre axlar
int yaw0, pitch0, roll0; kalibrering nollor
void wmpOn() {
Wire.beginTransmission(0x53); WM + startar inaktiverade på adress 0x53
Wire.write(0xFE); Skicka 0x04 till adress 0xFE aktivera WM +
Wire.write(0x04);
Wire.endTransmission(); WM + hoppar till adress 0x52 och är nu aktiv
}
void wmpSendZero() {
Wire.beginTransmission(0x52); nu på adress 0x52
Wire.write(0x00); Skicka noll signal vi vill ha info
Wire.endTransmission();
}
void calibrateZeroes() {
för (int jag = 0; jag < 10; i ++) {
wmpSendZero();
Wire.requestFrom(0x52,6);
för (int jag = 0; jag < 6; i ++) {
data[i]=Wire.Read();
}
yaw0 + = (((data [3] >> 2) << 8) + data [0]) / 10; genomsnitt 10 avläsningar
pitch0 + = (((data [4] >> 2) << 8) + data [1]) / 10;
roll0 + = (((data [5] >> 2) << 8) + data [2]) / 10;
}
Serial.Print("Yaw0:");
Serial.Print(yaw0);
Serial.Print ("Pitch0:");
Serial.Print(pitch0);
Serial.Print ("Roll0:");
Serial.println(roll0);
}
void receiveData() {
wmpSendZero(); Skicka noll innan varje begäran (samma som nunchuck)
Wire.requestFrom(0x52,6); begära de sex byte från WM +
för (int jag = 0; jag < 6; i ++) {
data[i]=Wire.Read();
}
Yaw = ((data [3] >> 2) << 8) + data [0]-yaw0;
pitch = ((data [4] >> 2) << 8) + data [1]-pitch0;
rulle = ((data [5] >> 2) << 8) + data [2]-roll0;
}
se http://wiibrew.org/wiki/Wiimote/Extension_Controllers#Wii_Motion_Plus
för information om vad varje byte representerar
void setup() {
Serial.BEGIN(115200);
Serial.println ("WM + testare");
Wire.BEGIN();
wmpOn(); Aktivera WM +
calibrateZeroes(); kalibrera nollor
Delay(1000);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
pinMode (10, OUTPUT);
pinMode (9, OUTPUT);
pinMode (8, OUTPUT);
pinMode (7, OUTPUT);
}
void loop() {
receiveData(); ta emot data och beräkna gir pitch och rulla
Serial.Print ("yaw:"); //see diagrammet på randomhacksofboredom.blogspot.com
Serial.Print(Yaw); för information på vilken axel är som
Serial.Print ("pitch:");
Serial.Print(pitch);
Serial.Print ("rulla:");
Serial.println(roll);
Delay(100);
om (pitch > = 1000) {
digitalWrite(12,HIGH);
}
annars om (pitch < =-1000) {
digitalWrite(11,HIGH);
}
annars om (yaw > = 1000) {
digitalWrite(10,HIGH);
}
annars om (yaw < =-1000) {
digitalWrite(9,HIGH);
}
annars om (rulla > = 1000) {
digitalWrite(8,HIGH);
}
annars om (rulle < =-1000) {
digitalWrite(7,HIGH);
}
annat {
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(8,LOW);
digitalWrite(7,LOW);
}
}