Neues Projekt Button Box für LS 22 (Neuling)

Hallo zusammen, erst mal kurz zu mir: Ich bin 55 und neu im Thema Arduino.
Ich habe einen Arduino Leonardo und ein UNO "The most complete Starter Kid" mit dem ich auch schon das ein oder andere Experiment erfolgreich durchgeführt habe. Kurz und gut daraus endstand die Idee (da ich passionierter LS22 Spieler bin) eine Buttonbox selber zu bauen der von einem Leonardo gesteuert wird.
Jetzt bin ich seid drei Tagen damit beschäftigt den Joystick an meinen Rechner zu bringen.
Die Box soll am Schluss ca. 30 Schalter haben und einen kleinen Joystick zum ausführen verschiedener Funktionen.
Ich habe mir einen Haufen Videos und Websites angeschaut zum Thema und mir einen kleinen Testaufbau gemacht bei dem nun 5 Buttons schon mal sauber einbinden lassen und auch gut Funktionieren.

Als nächstes will ich den kleinen Analogen Joystick den ich habe einbinden und verzweifele daran diesen in meinen Code einbinden :wink:
Der Joystick ist ein kleiner Analoger der im Set enthalten ist (soll später gegen einen anderen getauscht werden.
Er hat die Anschlüsse: GND, +5V, VRx, VRy, SW
VRx und VRy sind auf A0 und A1 angeschlossen aber ich bekomme es nicht hin das dieser mit Windows zusammen arbeitet

Hier mal der Code mit dem meine Buttons funktionieren:

#include <Joystick.h>

Joystick_ Joystick;

int xValue = 0; // variable to store x value
int yValue = 0; // variable to store y value
int notPressed = 0; // variable to store the button's state => 1 if not pressed

void setup() {
  // Initialize Button Pins
  
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);

  
  

  // Initialize Joystick Library
  Joystick.begin();
}


// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 7;

// Last state of the button
int lastButtonState[6] = {0,0,0,0,0,0};

void loop() {

  // Read pin values
  for (int index = 0; index < 6; index++)
  {
    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index])
    {
      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
    }
  }

  delay(50);
}

Weiter bin ich noch nicht gekommen ich hoffe mir kann jemand sagen wie und an welcher Stelle ich hier nun den kleinen Joystick ins Spiel bringe so das dieser funktioniert. Nicht falsch verstehen ich hab nun drei Tage getestet gemacht und versucht einen Haufen gelesen und komme einfach nicht weiter.

Vielleicht kann mir hier im Forum wer auf die Sprünge helfen.

Solltet ihr noch weitere Informationen benötigen dann bitte nachfragen soweit ich kann beantworte ich die Fragen natürlich gerne.

In diesem Sinne allen einen schönen Sonntag

Willkommen im Forum :slight_smile:

Zeige mall link zum Joy. hat der wirklich Potis oder doch Microschalter
wenn der hat Potis muss man den über Analogen Pin auslesen.
Mein mini Joystick hat 4 Microschalter verbaut.

Der hat einen Microschalter der sich als Button verwenden lässt.

Ist zu diesem hier baugleich:

Link zum großen A

Vermeide Magische Nummern

 pinMode(8, INPUT_PULLUP);
 pinMode(9, INPUT_PULLUP);
 pinMode(10, INPUT_PULLUP);
 pinMode(11, INPUT_PULLUP);
 pinMode(12, INPUT_PULLUP);
 pinMode(7, INPUT_PULLUP);

zB 8 ist links
und schreibe mall Kommentare was soll was sein

Der hat doch Potis. Also müssen an Analog Pins dran.
Lerne mall wie das wird gemacht

oder

Danach erweitere das um zweitem Poti, den klemmst Du auf A1

Ist das diese Library? GitHub - MHeironimus/ArduinoJoystickLibrary: An Arduino library that adds one or more joysticks to the list of HID devices an Arduino Leonardo or Arduino Micro can support.

Ich denke das läuft am Ende auf sowas hinaus:

auto valueX = analogRead(A0);
Joystick.setXAxis(valueX);

Also das Projekt kenne ich wie gesagt ich wühle mich da schon ein paar Tage durch :slight_smile:

Ja der hat Potis aber halt nur zwei Ausgänge VRx und VRy und wenn ich das richtig verstanden habe sind och A0 und A1 analoge Eingänge oder nicht ?
Wenn der vier Ausgänge hätte wäre das klar dann könnte ich oben, unten, rechts, und links ansteuern aber so funktioniert das hier nicht

In dem Code werden bisher nur die Buttons an getriggert noch nicht der Joystick selber hier nochmal mit Kommentaren

#include <Joystick.h>

Joystick_ Joystick;

int xValue = 0; // variable to store x value
int yValue = 0; // variable to store y value
int notPressed = 0; // variable to store the button's state => 1 if not pressed

void setup() {
  // Initialize Button Pins
  
  pinMode(8, INPUT_PULLUP); // Button 1
  pinMode(9, INPUT_PULLUP); // Button 2
  pinMode(10, INPUT_PULLUP); // Button 3
  pinMode(11, INPUT_PULLUP); // Button 4
  pinMode(12, INPUT_PULLUP); // Button 5
  pinMode(7, INPUT_PULLUP); // Button 6 can be expanded if necessary

  
  

  // Initialize Joystick Library
  Joystick.begin();
}


// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 7;

// Last state of the button
int lastButtonState[6] = {0,0,0,0,0,0};

void loop() {

  // Read pin values
  for (int index = 0; index < 6; index++)
  {
    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index])
    {
      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
    }
  }

  delay(50);
}

Ja diese Library ist das und das könnte in diese Richtung gehen ich weiß nur nicht wo an welcher Stelle ich das in meinem Code einbauen soll bzw. muss

Die entsprechenden Libs sind alle im Downloadpaket enthalten.
Beispielsketch ist dieser

//www.elegoo.com
//2016.12.09

// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output

void setup() {
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(9600);
}

void loop() {
  Serial.print("Switch:  ");
  Serial.print(digitalRead(SW_pin));
  Serial.print("\n");
  Serial.print("X-axis: ");
  Serial.print(analogRead(X_pin));
  Serial.print("\n");
  Serial.print("Y-axis: ");
  Serial.println(analogRead(Y_pin));
  Serial.print("\n\n");
  delay(500);
}

Allerdings alles "nur" für den Uno

Würde ich ans Ende von loop() packen.

Ich teste das mal und schau mal was passiert ich geb euch dann Bescheid aber schon mal Danke für die bis hierhin gegebene Hilfe

Ja A0 und A1 sind analog

und der Joy hat auch +5V und GND also sind so angeklemmt

Ist nur ein Poti gezeigt!

Das würde ich noch ein wenig weiter treiben und auch die Pins in ein Array packen

const auto ButtonNum = 6;
int ButtonPin[ButtonNum] = {8, 9, 10, 11, 12, 7};

Die initialisierung der Pins kann man dann mit einer Schleife machen.

Dann wird aus

digitalRead(index + pinToButtonMap)

ein

digitalRead(ButtonPin[index])

Damit wird der Code leichter erweiterbar.

@Rintin lass den mall die Joysticks zum laufen bringen.
Schönheit OP kann man naher machen :wink:
Könne die Joy Lib nicht und habe dort auf die schnelle nix gefunden für analoge Joy.

Wenn ich so was sehe für Analogen Eingang dann Danke.
Wie soll das Funktionieren?

Auszug aus dem Handbuch:


SEL soll vermutlich der Switch (SW) sein.

Also Handbuch passt nicht zum Sketch :wink:
Gezeichnet korrekt A0. A1
Im Sketch wird jedoch D0, D1 verwendet = mehr als Falsch dazu kommt das am 0, und 1 hängt Serial.
Und Ja SW ist der Drucktaster am Joy

Da haben die wohl die "A" vergessen.
Super wenn ein Komplettpaket den Anfänger gleich frustriert.

Ist auch meine Meinung.

Okay getestet und für gut empfunden :slight_smile: Der Joystick funktioniert genau so:

auto valueX = analogRead(A0);
Joystick.setXAxis(valueX);   

auto valueY = analogRead(A1);
Joystick.setYAxis(valueY);

Das mit dem Array muss ich mir mal anschauen wo und wie ich das reinpacke klingt aber gut, da es ja noch einige Buttons mehr werden und das erst mal die Lösung war die Funktionierte. Ich werde mich damit mal eingehend beschäftigen,

Muss aber mal schauen ob ich eventuell noch Potis einbinden kann in das System.
Aber erst mal das Array

Danke @Rintin es war so einfach und ich hab drei Tage gesucht :slight_smile: