Tässä esimerkissä käytetään [Arduino Mega 2560|http://wiki.metropolia.fi/display/koneautomaatio/Arduino] sekä joystickia kahden [servomoottorin|https://wiki.metropolia.fi/display/koneautomaatio/Servomoottori] ohjaamiseen. Toinen servomoottori on ohjelmoitu toimimaan joysticin kahvan sivuttaisliikkeen mukaan ja toinen pystyliikkeen mukaan. Systeemiin on liitetty myös punainen ja vihreä led, kuvaamaan toisen servomoottorin liikesuuntaa (vihreä vasemmalle, punainen oikealle). Servomoottorien korvaaminen DC moottoreilla on myös mahdollista, silloin systeemiin on kuitenkin lisättävä nopeudensäädin ja akku ([katso esimerkki|https://wiki.metropolia.fi/display/koneautomaatio/Harjattoman+DC-moottorin+ohjaaminen+Arduino+kehitysalustan+ja+potentiometrin+avulla]).
Joystick on kytketty Arduinon 5,5V jännitteeseen, maadoitukseen (GND) sekä kahteen analogiseen sisäänmenoon (A0 ja A1). Servomoottorit on kytketty 5,5V jännitteen ja maadoituksen lisäksi myös molemmat omaan digitaaliseen ulostuloon (12 ja 13). Molemmat ledit on kytketty omaan digitaaliseen ulostuloon (10 ja 11) sekä maadoitukseen.
Käytetty koodi:
{code}#include <SoftwareSerial.h>
#include <Servo.h>
Servo yservo; // create servo-Y object to control a servo
Servo xservo; // create servo-X object to control a servo
int yaxel = 0; // analog pin used to connect the joysticks Y-axis.
int val; // variable to read the value from the analog pin
int xaxel = 1; // analog pin used to connect the joysticks X-axis.
int val2; // variable to read the value from the analog pin
void setup()
{
yservo.attach(13); // attaches the servo-Y on pin 13 to the servo object
xservo.attach(12); // attaches the servo-X on pin 12 to the servo object
Serial.begin(115200);
pinMode(11, OUTPUT); // Green led
pinMode(10, OUTPUT); // Red led
}
void loop()
{
val = analogRead(yaxel); // reads the value of the joystick Y-axis (value between 0 and 1023)
val = map(val, 0, 1023, 0, 254); // scale it to use it with the servo-Y (value between 0 and 254)
val2 = analogRead(xaxel); // reads the value of the joystick X-axis (value between 0 and 1023)
val2 = map(val2, 0, 1023, 0, 254); // scale it to use it with the servo-X (value between 0 and 254)
yservo.write(val); // sets the servo-Y position according to the scaled value
xservo.write(val2); // sets the servo-X position according to the scaled value
delay(15); // waits for the servo to get there
Serial.println(val);
Serial.println(val2);
if(val2>134)
{
digitalWrite(11, HIGH); // Light to Green Led if value is higher enough
}
else(digitalWrite(11, LOW));
if(val2<120)
{
digitalWrite(10, HIGH);
}
else(digitalWrite(10, LOW)); // Light to Red Led if value is lower enough
}{code}
!servotarduino.JPG|border=1! |