Paso 6: código de
Este código no puede trabajar, no dude en cambiarlo y quiero saber cómo cambió. Esto es dominio del público./*
Este Introdúzca está basado en el acelerómetro Memsic 2125 leer código de http://www.arduino.cc/en/Tutorial/Memsic2125
y el RCServoMotorsControlledWithAccelMeter2
basado en el código de ejemplo de ITP
http://ITP.nyu.edu/physcomp/Labs/servo
Estos bocetos han sido modificados y reelaborados por Chris Barta.
therocketgeek.wordpress.com
Este ejemplo de código es de dominio público.
*/
#include < Servo.h >
Servo myservo;
const int xPin = 11; X salida del acelerómetro
const int yPin = 12; Y salida del acelerómetro
lastPulse largo = 0; Tiempo en milisegundos del pulso del pasado
int refreshTime = 10; Tiempo entre pulsos
int minSensorValue [xPin] = {-180, -180}; puede leer el valor menos el acelerómetro
int maxSensorValue [yPin] = {180, 180}; el mayor valor que el acelerómetro puede leer
int anchura de impulso [xPin] [yPin] = {0, 0}; Anchura de pulso para los servos
int sensorRange [xPin] [yPin] = {maxSensorValue [0] - minSensorValue [0]
maxSensorValue [1] - minSensorValue [1]};
int i = 0;
fase de int = 0; variable para seleccionar el motor servo para conducir
void setup()
{
myservo.Attach (1, 45, 135); definir qué pines son los servos en
myservo.Attach (2, 45, 135); el ángulo mínimo
myservo.Attach (3, 45, 135); puede girarse
myservo.Attach (4, 45, 135); y el ángulo máximo
myservo.Attach (5, 45, 135); puede girarse
myservo.Attach (6, 45, 135);
myservo.Attach (7, 45, 135);
myservo.Attach (8, 45, 135);
myservo.Write(90); conjunto servo a mitad de carrera (90 grados)
pinMode (xPin, entrada); set x valor del acelerómetro como insumo
pinMode (yPin, entrada); ajuste y de acelerómetro como insumo
}
void loop()
{
variables para leer las anchuras de pulso:
int pulseX, pulseY;
variables que contienen las aceleraciones resultantes
int accelerationX, accelerationY;
leer pulso de ejes x e y:
pulseX = pulseIn(xPin,HIGH);
pulseY = pulseIn(yPin,HIGH);
convertir el ancho de pulso de aceleración
accelerationX y accelerationY en milli-g es:
gravedad de la tierra es 1000 milli-g o 1 g.
accelerationX = ((pulseX / 10) - 500) * 8;
accelerationY = ((pulseY / 10) - 500) * 8;
el servo de pulso otra vez si la actualización tiempo (20ms) han pasado:
Si (millis() - lastPulse > = refreshTime) {}
Si (accelerationX < 0) / / si el cohete se mueve fuera del eje x entonces
{
myservo.Attach(1); los dos servos 1.3 se moverán para oponerse a la circulación
myservo.Write(135); la dirección del servo 1
myservo.Attach(3); los dos servos son uno frente al otro
myservo.Write(45); entonces tienen que moverse las direcciones "opuestas"
} else if (accelerationX > 0); Si el cohete va
(accelerationY > 0); x, y la dirección
{
myservo.Attach(5); luego los servos en el uppersection
myservo.Write(135); umbral (5,7) contrarrestar el movimiento en esa dirección
myservo.Attach(7);
myservo.Write(45);
}
} else if (accelerationX = 0); Si entonces no hay ningún movimiento
(accelerationY = 0); mantener los servos con el cohete
{
myservo.Attach(5);
myservo.Write(90);
myservo.Attach(7);
myservo.Write(90);
}
{
Si (accelerationX > 0) / / igual cosa en la otra dirección
{
myservo.Attach(1);
myservo.Write(45);
myservo.Attach(3);
myservo.Write(135);
} else if (accelerationX < 0);
(accelerationY < 0);
{
myservo.Attach(5);
myservo.Write(45);
myservo.Attach(7);
myservo.Write(135);
Si (accelerationX = 0);
(accelerationY = 0);
{
myservo.Attach(5);
myservo.Write(90);
myservo.Attach(7);
myservo.Write(90);
}
}
Si (accelerationX = 0); Si no hay ningún movimiento
{
myservo.Attach(1); Mantenga los servos con el cohete
myservo.Write(90);
myservo.Attach(3);
myservo.Write(90);
}
}
Si (accelerationY < 0)
{
myservo.Attach(2);
myservo.Write(45);
myservo.Attach(4);
myservo.Write(135);
} else if (accelerationX > 0);
(accelerationY < 0);
{
myservo.Attach(6);
myservo.Write(135);
myservo.Attach(8);
myservo.Write(45);
}
{
Si (accelerationX = 0);
(accelerationY = 0);
{
myservo.Attach(6);
myservo.Write(90);
myservo.Attach(8);
myservo.Write(90);
}
}
{
Si (accelerationY > 0)
{
myservo.Attach(2);
myservo.Write(135);
myservo.Attach(4);
myservo.Write(45);
} else if (accelerationX < 0);
(accelerationY > 0);
{
myservo.Attach(6);
myservo.Write(45);
myservo.Attach(135);
myservo.Write(135);
}
{
Si (accelerationX = 0);
(accelerationY = 0);
{
myservo.Attach(6);
myservo.Write(90);
myservo.Attach(8);
myservo.Write(90);
}
}
}
Si (accelerationY = 0);
{
myservo.Attach(2);
myservo.Write(90);
myservo.Attach(4);
myservo.Write(90);
}
{
Delay(100); Esto es para repetir el tiempo de retardo para que los servos pueden ponerse
}
}
También, usted puede ir a https://sites.google.com/site/arduinorocket/products-experiment . Es casi lo mismo excepto hay muescas.