Mein Versuchsaufbau besteht aus:
- 1 x Arduino Uno-Nachbau von AZ-Delivery
- 1 x Joystick aus Freenove Starterpaket
- Kabel
- 3 x LED (rot, gelb, grün)
- 3 x 220 Ohm-Widerstände
- 2 x Servo-Motoren SG90
- 1 x Labornetzteil
Verwendete Software:
- Arduino IDE 1.8.16
- Quellcode aus dem Freenove Tutorial mit eigener Erweiterung
Anschlussplan:
Die Batterie ist nur als Platzhalter für das Labornetzteil mit einer Versorgungsspannung von 4,8 V 2,5 A eingefügt!
Der Arduino wird über den USB-Anschluss versorgt!

Folgender Quellcode wurde verwendet:
#include <Servo.h>
Servo servoX, servoY;
int angleX, angleY;
int startpos = 90;
//Joystick
int xAxisPin = 0; // define X pin of Joystick
int yAxisPin = 1; // define Y pin of Joystick
int zAxisPin = 12; // define Z pin of Joystick
float xVal, yVal, zVal; // define 3 variables to store the values of 3 direction
//Display
int xLEDPin = 3; //PWM
int yLEDPin = 5; //PWM
int zLEDPin = 2;
float xLEDValfloat;
int xLEDVal, yLEDVal;
void setup()
{
servoX.attach(9);
angleX = startpos;
servoX.write(angleX);
servoY.attach(10);
angleY = startpos;
servoY.write(angleY);
pinMode(zAxisPin, INPUT_PULLUP); // initialize the port to pull-up input
Serial.begin(115200); // initialize the serial port with baud rate 9600
Serial.println("UNO is ready!"); // print the string "UNO is ready!"
}
void loop()
{ // read analog value in XY axis
xVal = analogRead(xAxisPin);
xLEDValfloat = xVal*255/1024;
xLEDVal = (int) xLEDValfloat;
analogWrite(xLEDPin, xLEDVal);
Serial.println(xLEDVal);
if(xVal < 500.00)
{
angleX++;
servoX.write(angleX);
delay(10);
}
if(xVal > 600.00)
{
angleX--;
servoX.write(angleX);
delay(10);
}
Serial.println(xLEDVal);
yVal = analogRead(yAxisPin); // read digital value of switch in Z axis
yLEDVal = yVal*255/1024;
analogWrite(yLEDPin, yLEDVal);
if(yVal < 500.00)
{
angleY++;
servoY.write(angleY);
delay(10);
}
if(yVal > 600.00)
{
angleY--;
servoY.write(angleY);
delay(10);
}
zVal = digitalRead(zAxisPin); //print the data read above
if(zVal == 1.00)
{
analogWrite(zLEDPin, 255);
}
else
{
analogWrite(zLEDPin, LOW);
angleX = startpos;
servoX.write(angleX);
angleY = startpos;
servoY.write(angleY);
}
Serial.print("X : ");
Serial.print(xVal);
Serial.print(" \t Y : ");
Serial.print(yVal);
Serial.print(" \t Z : ");
Serial.println(zVal);
//delay(200);
}
Fazit:
- Das Grundkonstrukt funktioniert bei mir einwandfrei.
- Wenn mit der in der Arduino IDE integrierten Servo-Bibliothek gearbeitet wird, können Pin 9 und 10 nicht für andere Aus- bzw. Eingaben genutzt werden!
Meine Ausgabe-LEDs z.B. leuchteten nicht mehr.