Paso 3: Sketch de Arduino
Basado en código de http://www.ideavirus.it/ adaptada con la ayuda de Oliver en London Hackspace. Incluye son: wire.h, string.h, stdio.h y Servo.h - por alguna razón Instructables les cae cuando pegue mi código.#include
#include
#include
#include / / controla el servo del disparador sólo
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 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 = 70; ajustado para servos FutabaS3003
int minPulse = 600; ajustado para servos FutabaS3003
int minPulse2 = 600; ajustado para servos FutabaS3003
int maxPulse = 2400; posición máxima servo
int maxPuls2e = 2400; 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); se fija el servo de gatillo en el pin 8 al objeto servo
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()
{
Wire.beginTransmission (0x52);
Wire.Send (0 x 40);
Wire.Send (0 x 00);
Wire.endTransmission ();
}
void send_zero()
{
Wire.beginTransmission (0x52);
Wire.Send (0 x 00);
Wire.endTransmission ();
}
int t = 0;
void loop()
{
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;
int c_button = 0;
Si ((telefonía [5] >> 0) & 1)
z_button = 1;
Si ((telefonía [5] >> 1) & 1)
c_button = 1;
interruptor (c_button) {}
caso 1:
MUOVI (telefonía [3], telefonía [2]);
rotura;
caso 0:
MUOVI (telefonía [1] / 2 + 0x3E, telefonía [0] / 2 + 0x3E);
rotura;
}
interruptor (z_button) {}
caso 0:
para (pos = 90; pos > = 120; pos += 1) / / dispara el gatillo cuando presiona el botón Z
{
myservo.Write(POS);
Delay(15);
}
para (pos = 120; pos > = 90; pos-= 2) / / devuelve el disparo al centro
{
myservo.Write(POS);
Delay(15);
}
rotura;
caso 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;
void printNunchuckData()
{
int joy_x_axis = telefonía [0];
int joy_y_axis = telefonía [1];
int accel_x_axis = telefonía [2];
int accel_y_axis = telefonía [3];
int accel_z_axis = telefonía [4];
int z_button = 0;
int c_button = 0;
Si ((telefonía [5] >> 0) & 1)
z_button = 1;
Si ((telefonía [5] >> 1) & 1)
c_button = 1;
Si ((telefonía [5] >> 2) & 1)
accel_x_axis += 2;
Si ((telefonía [5] >> 3) & 1)
accel_x_axis += 1;
Si ((telefonía [5] >> 4) & 1)
accel_y_axis += 2;
Si ((telefonía [5] >> 5) & 1)
accel_y_axis += 1;
Si ((telefonía [5] >> 6) & 1)
accel_z_axis += 2;
Si ((telefonía [5] >> 7) & 1)
accel_z_axis += 1;
Serial.Print (i, DEC);
Serial.Print ("\t");
Serial.Print ("X:");
Serial.Print (joy_x_axis, DEC);
Serial.Print ("\t");
Serial.Print ("Y:");
Serial.Print (joy_y_axis, DEC);
Serial.Print ("\t");
Serial.Print ("AccX:");
Serial.Print (accel_x_axis, DEC);
Serial.Print ("\t");
Serial.Print ("Accy de la presión:");
Serial.Print (accel_y_axis, DEC);
Serial.Print ("\t");
Serial.Print ("AccZ:");
Serial.Print (accel_z_axis, DEC);
Serial.Print ("\t");
Serial.Print (z_button, DEC);
Serial.Print ("");
Serial.Print (c_button, DEC);
Serial.Print ("\r\n");
i ++;
}
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;
}