Paso 4: Código de Arduino
El código tiene algunos elementos no necesarios que son insignificantes!
#include / / biblioteca Arduino Wire.h
#include / / biblioteca Arduino string.h
#include / / biblioteca Arduino Stdio.h
#include / / biblioteca Arduino Servo.h
Servo myservo; crear objeto servo para controlar el servo de gatillo
int pos = 90; variable para almacenar la posición del servo de gatillo
telefonía de uint8_t [6];
int cnt = 0;
int ledPin = 13;
int ledPin12 = 12;
int Z_trig;
int servoPin = 7;
int servoPin2 = 6;
anchura de impulso de int = 0;
int pulseWidth2 = 0;
lastPulse largo = 0;
lastPulse2 largo = 0;
int z_button = 0;
int c_button = 0;
int refreshTime = 20; ajustado para servos Hi-Tech
int minPulse = 300; ajustado para servos Hi-Tech 3-11
int minPulse2 = 300; ajustado para servos Hi-Tech 3-11
int maxPulse = 2500; posición máxima servo
int maxPuls2e = 2500; posición máxima servo
tiempo de int = 10;
#define pwbuffsize 10
largo pwbuff [pwbuffsize];
pwbuffpos largo = 0;
pwbuff2 largo [pwbuffsize];
pwbuffpos2 largo = 0;
void setup()
{
myservo.Attach(8);
Serial.Begin (9600);
Wire.Begin ();
nunchuck_init ();
pinMode (servoPin, salida);
pinMode (servoPin2, salida);
anchura de impulso = minPulse;
pulseWidth2 = minPulse2;
Serial.Print ("setup\n final");
}
void nunchuck_init() / / apretón de manos de monja-mandril de Wii
{
Wire.beginTransmission (0x52);
Wire.Send (0 x 40);
Wire.Send (0 x 00);
Wire.endTransmission ();
}
void send_zero() / / apretón de manos de monja-mandril de Wii
{
Wire.beginTransmission (0x52);
Wire.Send (0 x 00);
Wire.endTransmission ();
}
int t = 0;
void loop()
{
pinMode (ledPin12, salida); Juegos pin 12 como una salida para que el solenoide puede ser controlado por el botón de Wii Nunchuck Z
t ++;
fin = millis();
Si (t == 1) {}
t = 0;
Wire.requestFrom (0x52, 6);
mientras que (Wire.available ()) {}
telefonía [cnt] = nunchuk_decode_byte (Wire.receive ());
digitalWrite (ledPin, HIGH);
CNT ++;
}
Si (cnt > = 5) {}
int z_button = 0; Inicializa Z a cero
int c_button = 0; Inicializa C a cero
Si ((telefonía [5] >> 0) & 1) / / bytes examina cinco desde la Wii-Nunchuck para posición de botón Z
z_button = 1; sistemas Z 1
Si ((telefonía [5] >> 1) & 1) / / bytes examina cinco desde la Wii-Nunchuck para posición de botón Z
c_button = 1; C se establece en 1
interruptor (c_button) {/ / caso de declaración de estado de botón para C
caso 1:
MUOVI (telefonía [1] / 2 + 0x3E, telefonía [0] / 2 + 0x3E); Activa Control de Accelromiter para Wii-Nunchuck
rotura;
caso 0:
MUOVI (telefonía [3], telefonía [2]); defalt control Joystick para Wii-nunchuck
rotura;
}
interruptor (z_button) {/ / caso de declaración de estado de botón para Z
caso 1: {}
digitalWrite (ledPin12, bajo); solenoide por defecto es off
Z_trig = 0;}
rotura;
caso 0: {}
Si (Z_trig == 0) {}
digitalWrite (ledPin12, HIGH); Activa el solenoide
Delay (20);
digitalWrite (ledPin12, bajo); desactiva el solenoide si botón Z llevó a cabo para proteger a de última hora
Z_trig = ;}} 1
rotura;
}
}
CNT = 0;
send_zero();
}
updateServo();
Delay(dtime);
}
void updateServo()
{
Si (millis() - lastPulse > = refreshTime) {}
digitalWrite (servoPin, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite (servoPin, bajo);
digitalWrite (servoPin2, HIGH);
delayMicroseconds(pulseWidth2);
digitalWrite (servoPin2, bajo);
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) {}
inclinación del flotador = (700 - x * 2 * 2);
flotador tilt2 = (0x7E - y + 0x7E) * 2 * 2;
inclinación = (inclinación);
anchura de impulso = (inclinación * 5) + minPulse;
tilt2 = (tilt2-288);
pulseWidth2 = (tilt2 * 5) + minPulse2;
pwbuff [pwbuffpos] = anchura de impulso;
pwbuff2 [pwbuffpos2] = pulseWidth2;
Si (++ pwbuffpos == pwbuffsize) pwbuffpos = 0;
Si (++ pwbuffpos2 == pwbuffsize) pwbuffpos2 = 0;
anchura de impulso = 0;
pulseWidth2 = 0;
para (int p = 0; p anchura de impulso += pwbuff [p];
pulseWidth2 += pwbuff2 [p];
}
anchura de impulso = pwbuffsize;
pulseWidth2 = pwbuffsize;
}