Kippschalter für Buttonbox (Gamepad)

Hallo, ich möchte mir gerne eine Buttonbox erstellen, welche danach am PC als Gamepad erkannt wird. Dazu habe benutze ich einen Ardunio Micro. Zu meinem Kippschalter mit LED gibt es hier folgenden Schaltbild.
Ich möchte nun dass, wenn der Kippschalter auf ON gestellt wird, dies am Eingang des Gamepad registriert wird und dass die LED leuchtet. Leider bekomme ich es nicht hin, dass beides auf einmal geht. Im ersten Bild sieht man dass zwar die LED aufleuchtet, jedoch kein Eingang registriert wird.
Beim zweiten Bild durch Anschließen vom +-Pin vom Kippschalter an den GND vom Board wird wenn der Kippschalter betätigt wird, dies am Gamepad registriert, LED bleibt jedoch aus.=> Dies ist ja ein Kurzschluss oder?

Hier noch mein Code:

// Simple gamepad example that demonstraits how to read five Arduino
// digital pins and map them to the Arduino Joystick library.
//
// The digital pins 2 - 6 are grounded when they are pressed.
// Pin 2 = UP
// Pin 3 = RIGHT
// Pin 4 = DOWN
// Pin 5 = LEFT
// Pin 6 = FIRE
//
// NOTE: This sketch file is for use with Arduino Leonardo and
//       Arduino Micro only.
//
// by Matthew Heironimus
// 2016-11-24
//--------------------------------------------------------------------

#include <Joystick.h>

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
  1, 0,                  // Button Count, Hat Switch Count
  true, true, false,     // X and Y, but no Z Axis
  false, false, false,   // No Rx, Ry, or Rz
  false, false,          // No rudder or throttle
  false, false, false);  // No accelerator, brake, or steering

void setup() {
  // Initialize Button Pins
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);

  // Initialize Joystick Library
  Joystick.begin();
  Joystick.setXAxisRange(-1, 1);
  Joystick.setYAxisRange(-1, 1);
}

// Last state of the buttons
int lastButtonState[5] = {0,0,0,0,0};

void loop() {

  // Read pin values
  for (int index = 0; index < 5; index++)
  {
    int currentButtonState = !digitalRead(index + 2);
    if (currentButtonState != lastButtonState[index])
    {
      switch (index) {
        case 0: // UP
          if (currentButtonState == 1) {
            Joystick.setYAxis(-1);
          } else {
            Joystick.setYAxis(0);
          }
          break;
        case 1: // RIGHT
          if (currentButtonState == 1) {
            Joystick.setXAxis(1);
          } else {
            Joystick.setXAxis(0);
          }
          break;
        case 2: // DOWN
          if (currentButtonState == 1) {
            Joystick.setYAxis(1);
          } else {
            Joystick.setYAxis(0);
          }
          break;
        case 3: // LEFT
          if (currentButtonState == 1) {
            Joystick.setXAxis(-1);
          } else {
            Joystick.setXAxis(0);
          }
          break;
        case 4: // FIRE
          Joystick.setButton(0, currentButtonState);
          
          break;
      }
      lastButtonState[index] = currentButtonState;
    }
  }

  delay(10);
}

Was muss ich machen dass beides aufeinmal funktioniert?

LG

zickes

Hallo,
ich denke es fehlen Dir ein paar Grundlagen. Warum hast Du Minus an den Schalter angeschlossen, das macht doch keinen Sinn. Was ist Verbraucher ?. Wie hast Du den Kippschalter denn mit Deinem Arduino verbunden, wie ist die LED angeschlossen. Für eine normale LED benötigst Du noch einen Widerstand als Strombegrenzung.

Schaltbilder zu alle dem findest Du im Netz und in der Hilfe der IDE und auch die Beispiele unter Datei / Beispiele sind hilfreich.

Wenn Deine Schaltbilder stimmen, dann hast Du das MicroBoard schon gegrillt
Der VCC verträgt nur 5V. (Vorausgesetzt es ist ein 5V Board mit Spannungsregler drauf)

.

Das ist Dein Problem.
Der Schalter schaltet + durch! Wenn Du den Pullup verwendest ist der Pin immer HIGH. Du musst den Eingang als reinen INPUT einrichten und mit einem externen Widerstand (z.B. 1kOhm) auf GND ziehen. Also ein Ende des Widerstands an Pin 5 und das andere Ende an GND und im Code auf pinMode(6, INPUT); ändern.

In dem Fall schon. Der Schalter hat eine integrierte LED.

Gruß, Jürgen

aber wieso pin5 und nicht pin 6?

Sorry, natürlich Pin 6!

PS: Könnte ja jetzt behaupten das ich nur prüfen wollte ob alle schön mitdenken. :wink:

Ist es so richtig. Schwarz+braun Kabel sind für GND. ROT für 5V und Geld geht an Pin 6. Zwischen pin 6 und GND am Audrino ist ein Widerstand von 1k ohm. Jedoch wird jetzt genau das Umgekehrte gemacht. Kippschalter off dann registriert Gamepad was und Led leuchtet nicht und umgekehrt leuchtet Led jedoch kein Eingang. Code wurde natürlich geändert

Ja ich wiess es ist im Moment nicht optimal verkabelt aber bevor ich es anständig mache, möchte ich es dass es ersteinmal funktioniert

LG



Mach mal das ! vor dem digitalRead weg. Das ! invertiert das Signal. Dann sollte es passen. Zumindest wenn Du nicht da noch andere Taster oder Schalter angeschlossen hast die gegen GND schalten.

Gruß, Jürgen

Ok werde das mal testen. Ist die Verkablung richtig ?

Weitgehend. Du solltest nur vermeiden über den Schalter Spannung auf den Eingang zu bringen, wenn der Arduino noch nicht am USB Port hängt. Zwar gibt es intern Dioden die dafür sorgen das er vielleicht nicht gleich kaputt geht, aber gut tut es nicht. Wenn aber irgendwann mehr Last am Arduino hängt, könnte es schon mal den Port grillen.
Später willst Du ja die Verkabelung ja sowieso neu aufbauen. Da dann bitte nicht mit 2 USB Anschlüssen.

Sonst passt es.

Gruß, Jürgen

Ok ich kann den Zweiten Usb Anschluss wegnehmen und alles über die pin VCC und GND am Ardunio machen. Ist ja das was du meinst oder?Sorry für die Frage aber ich kommen gebürtig nicht aus einem deutschsprachigen Raum

Gruß aus Luxemburg

Genau, einfach an VCC und GND anklemmen. Bei den paar Schaltern und den LEDs ist das problemlos möglich. Man muß nur immer auf die Belastung des einzelnen Ports (max. 20mA) und des kompletten Arduino (alle Ports zusammen max. 200mA) achten. Da die im Schalter eingebauten LEDs sowieso für 12V ausgelegt sind, sollte das keine Probleme machen.

Dafür ist Dein Deutsch aber sehr gut. Hätte ich jetzt nicht bemerkt das deutsch nicht Deine Muttersprache ist. Wenn ich manchmal im deutschen Teil des Forums so mitlese, packt mich das Grauen...

Gruß, Jürgen

1 Like

Ein Pin ist nicht das gleiche wie ein Port. Ein Port sind i.d.R. 8 Pins zusammen

Jürgen ich danke dir sehr für deine Hilfe. Es funktioniert jetzt. Dank deiner Hilfe. Vielen vielen Dank