Stap 6: Code
Deze code kan niet werken, voel je vrij om te veranderen en laat me weten hoe je het veranderd. Dit is van het publiek domein./*
Deze scketch is gebaseerd op de Memsic 2125 versnellingsmeter code van http://www.arduino.cc/en/Tutorial/Memsic2125 leest
en de RCServoMotorsControlledWithAccelMeter2
op basis van de code van de steekproef van de ITP
http://ITP.NYU.edu/physcomp/Labs/servo
Deze schetsen werden aangepast en herzien door Chris Barta.
therocketgeek.WordPress.com
Deze voorbeeldcode is in het publieke domein.
*/
#include < Servo.h >
Servo myservo;
Const int xPin = 11; X output van de versnellingsmeter
Const int yPin = 12; Y-uitgang van de versnellingsmeter
lange lastPulse = 0; Tijd in milliseconden van de laatste puls
int refreshTime = 10; Tijd die nodig is tussen pulsen
int minSensorValue [xPin] = {-180,-180}; de laagste waarde de versnellingsmeter kunt lezen
int maxSensorValue [yPin] = {180, 180}; de grootste waarde die de versnellingsmeter kunt lezen
int pulseWidth [xPin] [yPin] = {0, 0}; Pulsbreedte voor de servomotoren
int sensorRange [xPin] [yPin] = {maxSensorValue [0] - [0], minSensorValue
maxSensorValue [1] - minSensorValue [1]};
int i = 0;
int fase = 0; variabele te selecteren van de servomotor te rijden
VOID Setup
{
myservo.attach (1, 45, 135); definiëren wat de servo's zijn op pin
myservo.attach (2, 45, 135); de minimale hoek
myservo.attach (3, 45, 135); dat kan worden gedraaid
myservo.attach (4, 45, 135); en de maximale hoek
myservo.attach (5, 45, 135); dat kan worden gedraaid
myservo.attach (6, 45, 135);
myservo.attach (7, 45, 135);
myservo.attach (8, 45, 135);
myservo.write(90); servo ingesteld op halverwege (90 graden)
pinMode (xPin, INPUT); set x-waarde van de versnellingsmeter als input
pinMode (yPin, INPUT); instellen van y-waarde van de versnellingsmeter als input
}
void loop
{
variabelen om te lezen van de puls breedte:
int pulseX, pulseY;
variabelen bevatten de resulterende versnellingen
int accelerationX, accelerationY;
Lees puls van x - en y - assen:
pulseX = pulseIn(xPin,HIGH);
pulseY = pulseIn(yPin,HIGH);
de pulsbreedte omzetten in versnelling
accelerationX en accelerationY zijn in milli-g's:
aardse zwaartekracht is 1000 milli-g's, of 1 g.
accelerationX = ((pulseX / 10) - 500) * 8;
accelerationY = ((pulseY / 10) - 500) * 8;
Pulse de servo opnieuw als het vernieuwen (20ms) tijd verstreken:
Als (millis() - lastPulse > = refreshTime) {}
Als (accelerationX < 0) / / als de raket wordt dan uit de x-as verplaatst
{
myservo.attach(1); de twee servo's 1,3 zal bewegen zich te verzetten tegen het verkeer
myservo.write(135); de richting van servo 1
myservo.attach(3); de twee servo's zijn tegenover elkaar
myservo.write(45); dus ze moeten verplaatsen 'tegengestelde' richtingen
} else if (accelerationX > 0); Als de raket gaat in
(accelerationY > 0); de x, y-richting
{
myservo.attach(5); vervolgens de servo's in de uppersection
myservo.write(135); (5,7) vensterbank neutraliseren de beweging in die richting
myservo.attach(7);
myservo.write(45);
}
} else if (accelerationX = 0); Als er vervolgens geen verkeer bestaat
(accelerationY = 0); houden van de servo's uitgelijnd met de raket
{
myservo.attach(5);
myservo.write(90);
myservo.attach(7);
myservo.write(90);
}
{
Als (accelerationX > 0) / / hetzelfde ding alleen in de andere richting
{
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);
Als (accelerationX = 0);
(accelerationY = 0);
{
myservo.attach(5);
myservo.write(90);
myservo.attach(7);
myservo.write(90);
}
}
Als (accelerationX = 0); Als er geen verkeer bestaat
{
myservo.attach(1); dan houden de servo's uitgelijnd met de raket
myservo.write(90);
myservo.attach(3);
myservo.write(90);
}
}
Als (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);
}
{
Als (accelerationX = 0);
(accelerationY = 0);
{
myservo.attach(6);
myservo.write(90);
myservo.attach(8);
myservo.write(90);
}
}
{
Als (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);
}
{
Als (accelerationX = 0);
(accelerationY = 0);
{
myservo.attach(6);
myservo.write(90);
myservo.attach(8);
myservo.write(90);
}
}
}
Als (accelerationY = 0);
{
myservo.attach(2);
myservo.write(90);
myservo.attach(4);
myservo.write(90);
}
{
delay(100); Dit wil herhalen tijd vertragen zodat de servo's kunnen inhalen
}
}
Ook kun je naar https://sites.google.com/site/arduinorocket/products-experiment . Het is vrij veel het zelfde ding, behalve er inspringingen zijn.