Arduino Leonardo & Joystick als Mausersatz

In diesem Beitrag möchte ich dir zeigen, wie du einen Arduino Leonardo mit einem kleinen Joystick als Mausersatz am Computer einsetzen kannst.

Arduino Leonardo - Joystick als Mausersatz
Dieses Video ansehen auf YouTube.

Dieser Beitrag ist aus einem Kommentar zum bereits veröffentlichten Beitrag zum Arduino UNO & Joystick Beitrag entstanden.

Bezug eines Joysticks für den Arduino Leonardo

Es gibt den kleinen Joystick für den Anschluss am Arduino oder auch Raspberry Pi (oder vergleichbarer Mikrocontroller) auf ebay.de für knapp 4 € aus dem asiatischen Raum.

Joystick für den Arduino / Raspberry Pi
Joystick für den Arduino / Raspberry Pi

Aber du findest diesen auch auf amazon.de oder aliexpress.com für einen ebenso günstigen Preis.

Warum ein Arduino Leonardo und kein UNO?

Der Leonardo verfügt über die Fähigkeit als USB HUD zu dienen. Das bedeutet das du über diesen Mikrocontroller Maus & Tastaturbefehle senden kannst.

Im Beitrag Arduino Lektion 68: 4×4 Matrix Tastatur habe ich bereits gezeigt wie man Tastaturbefehle an einen Computer sendet und somit die Software Eclipse steuern kann.

Aufbau der Schaltung am Arduino Leonardo

Für den Aufbau der Schaltung benötigst du einen Arduino Leonardo ein paar Breadboardkabel sowie einen Joystick.

Aufbau der Schaltung "Joystick am Arduino Leonardo"
Aufbau der Schaltung “Joystick am Arduino Leonardo”

Erstellen des Programmes in der Arduino IDE

Der nachfolgende Quellcode basiert auf dem Beispiel “Mouse.move()” aus der Arduino Referenz. Jedoch habe ich dieses etwas abgewandelt.

In meinem Fall war die X Koordinate vertauscht!

#include <Mouse.h>

// Taster des Joyesticks am digitalen Pin D2 angeschlossen
#define mouseBtn 2

// Pins der Achsen
#define xAxis A0
#define yAxis A1

// Mausgeschwindigkeit
int range = 5;

// Geschwindigkeit der Maus
int responseDelay = 15;

// Schwellwert für die übernahme einer Positionsänderung
int threshold = range / 4;
int center = range / 2;

void setup() {
  pinMode(mouseBtn, INPUT_PULLUP);
  Mouse.begin();
}

void loop() {
  int xAxisValue =  analogRead(xAxis);
  xAxisValue = 1023 - xAxisValue;

  int yAxisValue =  analogRead(yAxis);

  int xReading = calcDisplayPosition(xAxisValue);
  int yReading = calcDisplayPosition(yAxisValue);

  Mouse.move(xReading, yReading, 0);

  delay(responseDelay);

  if (digitalRead(mouseBtn) == LOW) {
    Mouse.press(MOUSE_LEFT);
  } else {
    Mouse.release(MOUSE_LEFT);
  }
}

int calcDisplayPosition(int axisValue) {
  int reading = map(axisValue, 1023, 0, 0, range);
  int distance = reading - center;
  if (abs(distance) < threshold) {
    distance = 0;
  }
  return distance;
}

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.