Stap 4: Arduino Code
De code heeft een paar un-benodigde elementen die te verwaarlozen zijn!
#include / / Arduino Library Wire.h
#include / / Arduino Library string.h
#include / / Arduino Library Stdio.h
#include / / Arduino Library Servo.h
Servo myservo; servo-object om te bepalen van trigger servo maken
int pos = 90; variabele op te slaan van de positie van de servo trigger
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; getweaked voor Hi-tech servo 's
int minPulse = 300; getweaked voor Hi-tech 3-11 servo 's
int minPulse2 = 300; getweaked voor Hi-tech 3-11 servo 's
int maxPulse = 2500; maximale servo positie
int maxPuls2e = 2500; maximale servo positie
int rekenwijze = 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, OUTPUT);
pinMode (servoPin2, OUTPUT);
pulseWidth = minPulse;
pulseWidth2 = minPulse2;
Serial.Print ("afgewerkte setup\n");
}
VOID nunchuck_init() / / Wii non-chuck handshaking
{
Wire.beginTransmission (0x52);
Wire.send (0x40);
Wire.send (0x00);
Wire.endTransmission ();
}
VOID send_zero() / / Wii non-chuck handshaking
{
Wire.beginTransmission (0x52);
Wire.send (0x00);
Wire.endTransmission ();
}
int t = 0;
void loop
{
pinMode (ledPin12, OUTPUT); sets pin 12 als een uitgang zodat het magneetventiel gecontroleerd door de Wii Nunchuck Z-knop worden kan
t ++;
eindelijk = millis();
Als (t == 1) {}
t = 0;
Wire.requestFrom (0x52, 6);
terwijl (Wire.available ()) {}
outbuf [cnt] = nunchuk_decode_byte (Wire.receive ());
digitalWrite (ledPin, hoge);
CNT ++;
}
Als (cnt > = 5) {}
int z_button = 0; initialiseert Z op nul
int c_button = 0; C initialiseert op nul
Als ((outbuf [5] >> 0) & 1) / / onderzoekt Byte vijf van de Wii-Nunchuck voor de positie van de Z-knop
z_button = 1; Z op 1 wordt ingesteld
Als ((outbuf [5] >> 1) & 1) / / onderzoekt Byte vijf van de Wii-Nunchuck voor de positie van de Z-knop
c_button = 1; C op 1 wordt ingesteld
schakelaar (c_button) {/ / verklaring voor C knoptoestand Case
Case 1:
muovi (outbuf [1] / 2 + 0x3E, outbuf [0] / 2 + 0x3E); Activeert Accelromiter controle voor Wii Nunchuck
breken;
Case 0:
muovi (outbuf [3], outbuf [2]); Defalt Joystick-controle voor Wii nunchuck
breken;
}
schakelaar (z_button) {/ / verklaring voor Z knoptoestand Case
geval 1: {}
digitalWrite (ledPin12, laag); standaard solenoïde is uitgeschakeld
Z_trig = 0;}
breken;
geval van 0: {}
Als (Z_trig == 0) {}
digitalWrite (ledPin12, hoge); Hiermee activeert u de magneetklep
vertraging (20);
digitalWrite (ledPin12, laag); de magneetklep deactiveert als Z-knop gehouden om te beschermen tegen breken
Z_trig = 1 ;}}
breken;
}
}
CNT = 0;
send_zero();
}
updateServo();
delay(DTIME);
}
VOID updateServo()
{
Als (millis() - lastPulse > = refreshTime) {}
digitalWrite (servoPin, hoge);
delayMicroseconds(pulseWidth);
digitalWrite (servoPin, laag);
digitalWrite (servoPin2, hoge);
delayMicroseconds(pulseWidth2);
digitalWrite (servoPin2, laag);
lastPulse = millis();
}
}
int i = 0;
char nunchuk_decode_byte (char x)
{
x = (x ^ 0x17) + 0x17;
return x;
}
VOID muovi (uint8_t x, uint8_t y) {}
zweven tilt = (700 - x * 2 * 2);
tilt2 zweven = (0x7E - y + 0x7E) * 2 * 2;
kantelen (tilt) =;
pulseWidth = (kantelen * 5) + minPulse;
Tilt2 = (tilt2-288);
pulseWidth2 = (tilt2 * 5) + minPulse2;
pwbuff [pwbuffpos] = pulseWidth;
pwbuff2 [pwbuffpos2] = pulseWidth2;
Als (++ pwbuffpos == pwbuffsize) pwbuffpos = 0;
Als (++ pwbuffpos2 == pwbuffsize) pwbuffpos2 = 0;
pulseWidth = 0;
pulseWidth2 = 0;
voor (int p = 0; p pulseWidth += pwbuff [p];
pulseWidth2 += pwbuff2 [p];
}
pulseWidth / = pwbuffsize;
pulseWidth2 / = pwbuffsize;
}