Schritt 4: Arduino Code
Der Code hat ein paar un-nötig Elemente, die zu vernachlässigen sind!
#include / / Arduino Library Wire.h
#include / / Arduino Bibliothek string.h
#include / / Arduino Bibliothek Stdio.h
#include / / Arduino Library Servo.h
Servo Myservo; Erstellen Sie Servo-Objekt um Trigger Servo Steuern
Int pos = 90; Variable, die Trigger-Servo-Position speichern
uint8_t Outbuf [6];
Int Cnt = 0;
Int-LedPin = 13;
Int ledPin12 = 12;
Int Z_trig;
Int ServoPin = 7;
Int servoPin2 = 6;
Int PulseWidth = 0;
Int pulseWidth2 = 0;
lange LastPulse = 0;
lange lastPulse2 = 0;
Int Z_button = 0;
Int C_button = 0;
Int RefreshTime = 20; optimiert für High-Tech-servos
Int MinPulse = 300; optimiert für Hi-Tech-3-11-servos
Int minPulse2 = 300; optimiert für Hi-Tech-3-11-servos
Int MaxPulse = 2500; maximale Servoposition
Int maxPuls2e = 2500; maximale Servoposition
Int Dtime = 10;
#define Pwbuffsize 10
lange Pwbuff [Pwbuffsize];
lange Pwbuffpos = 0;
lange pwbuff2 [Pwbuffsize];
lange pwbuffpos2 = 0;
void setup()
{
myservo.Attach(8);
Serial.Begin (9600);
(Wire.Begin);
(Nunchuck_init);
PinMode (ServoPin, Ausgang);
PinMode (servoPin2, Ausgang);
PulseWidth = MinPulse;
pulseWidth2 = minPulse2;
Serial.Print ("fertige Setup\n");
}
void nunchuck_init() / / Wii Nonne-Futter-Handshaking
{
Wire.beginTransmission (0x52);
Wire.Send (0 x 40);
Wire.Send (0 x 00);
(Wire.endTransmission);
}
void send_zero() / / Wii Nonne-Futter-Handshaking
{
Wire.beginTransmission (0x52);
Wire.Send (0 x 00);
(Wire.endTransmission);
}
Int t = 0;
void loop()
{
PinMode (ledPin12, Ausgang); Sätze pin 12 als Ausgang, so dass das Magnetventil von der Wii Nunchuck Z-Taste kontrolliert werden können
t ++;
endlich = millis();
Wenn (t == 1) {}
t = 0;
Wire.requestFrom (0x52, 6);
während (Wire.available ()) {}
Outbuf [Cnt] = Nunchuk_decode_byte (Wire.receive ());
DigitalWrite (LedPin, HIGH);
CNT ++;
}
Wenn (Cnt > = 5) {}
Int Z_button = 0; Z initialisiert auf Null
Int C_button = 0; C initialisiert auf Null
Wenn ((Outbuf [5] >> 0) & 1) / / prüft Byte 5 aus der Wii-Nunchuck für die Position der Z-Taste
Z_button = 1; Z festgelegt auf 1
Wenn ((Outbuf [5] >> 1) & 1) / / prüft Byte 5 aus der Wii-Nunchuck für die Position der Z-Taste
C_button = 1; C festgelegt auf 1
Schalter (C_button) {/ / Case Anweisung für C Schaltflächenstatus
Fall 1:
Muovi (Outbuf [1] / 2 + 0x3E, Outbuf [0] / 2 + 0x3E); Aktiviert Accelromiter Steuerelement für Wii Nunchuck
zu brechen;
Fall 0:
Muovi (Outbuf [3], Outbuf [2]); Vorgabe Joystick-Steuerung für die Wii nunchuck
zu brechen;
}
Schalter (Z_button) {/ / Case Anweisung für Z Schaltflächenstatus
Fall 1: {}
DigitalWrite (ledPin12, LOW); Magnetventil Standard ist off
Z_trig = 0;}
zu brechen;
Fall 0: {}
Wenn (Z_trig == 0) {}
DigitalWrite (ledPin12, HIGH); Aktiviert das Magnetventil
Verzögerung (20);
DigitalWrite (ledPin12, LOW); das Magnetventil wird deaktiviert, wenn Z Taste gehalten, vor Bruch zu schützen
Z_trig = 1 ;}}
zu brechen;
}
}
CNT = 0;
send_zero();
}
updateServo();
Delay(dtime);
}
void updateServo()
{
Wenn (millis() - LastPulse > = RefreshTime) {}
DigitalWrite (ServoPin, HIGH);
delayMicroseconds(pulseWidth);
DigitalWrite (ServoPin, LOW);
DigitalWrite (servoPin2, HIGH);
delayMicroseconds(pulseWidth2);
DigitalWrite (servoPin2, LOW);
LastPulse = millis();
}
}
Int ich = 0;
Char Nunchuk_decode_byte (Char X)
{
x = (X ^ 0x17) + 0x17;
Return x;
}
void Muovi (uint8_t x uint8_t y) {}
Neigung zu schweben = (700 - X * 2 * 2);
tilt2 schweben = (0x7E - y + 0x7E) * 2 * 2;
Neigung (Tilt) =;
PulseWidth = (kippen * 5) + MinPulse;
tilt2 = (tilt2-288);
pulseWidth2 = (tilt2 * 5) + minPulse2;
Pwbuff [Pwbuffpos] = PulseWidth;
pwbuff2 [pwbuffpos2] = pulseWidth2;
Wenn (++ Pwbuffpos == Pwbuffsize) Pwbuffpos = 0;
Wenn (++ pwbuffpos2 == Pwbuffsize) pwbuffpos2 = 0;
PulseWidth = 0;
pulseWidth2 = 0;
für (Int p = 0; p PulseWidth += Pwbuff [p];
pulseWidth2 += pwbuff2 [p];
}
PulseWidth / = Pwbuffsize;
pulseWidth2 / = Pwbuffsize;
}