DIY - Alps 7 way switch

U

User 18304

Liebe Alle,

ihr kennt sicher den Alps 7 Way Switch
RKJXT1F42001

3.jpg

Rauf, Runter, Rechts, Links - Push - Encoder Links sowie Rechts.
in meinen Anfängen habe ich dieses Teil auf meinen Fanatec Lenkrädern sehr gerne genutzt
der Umstieg auf SC2 und die damit verfügbaren Lenkräder kennen wir - hier gibt es nur wenige die den 7 way verbauen
Auch button boxes mit diesem Bauteil sind mir kaum bekannt.

nach ein paar Monaten weiss ich warum :-)

das hat mir persönlich keine Ruhe gelassen - und so habe ich mir bei Mouser diesen Alps bestellt und getestet

https://www.mouser.at/ProductDetail...a9SxuDEVbLTyqSwpZh_oJEy_sGnwjtpQaAq4GEALw_wcB

was soll ich sagen - das Ding hat so seine Tücken - denn bei jedem Klick in eine Richtung wird gleichzeitig push ausgegeben
und das will man eigentlich nicht - verändert man leicht die Verkabelung - COM mit GND tauschen - dann hat man bis zum Klick das gewünschte Ergebnis (input der Richtung ohne Push) aber sofern man den Stick über den Klick bewegt dann kommt auch der Push.

Knobs
Funky Switch PCB and Knobs by Conspicuous19 - Thingiverse
Fucky switch knob by TkillB - Thingiverse

was habe ich nun alles getestet

1) Arduino
funktioniert weder mit normalen buttons - noch in der Matrix
egal was man macht - klickt man in eine Richtung wird immer Push aktiviert

2) LeoB
Man hört sehr viele Gerüchte - mit LB soll er funktionieren
ergo habe ich mir ein BBi 32 und ein BU0836A bestellt
beide liefern das gleiche Bild - naja die 70EUR hätte ich mir sparen können

auf seiner webseite ist ein alps ohne encoder - und es wird korrekt hingewiesen dass Push immer bei einer Richtung aktiviert wird
Push button is also activated when the stick is pushed in any direction

3) OSH - hier hatte ich einen Tip von Simline GT bekommen
er verkauft den ALPS mit einem PCB - macht den Einbau viel einfacher
und was soll ich sagen - verwendet man den ALPS in Verbindung mit einer Diode dann kann der OSH den ALPS korrekt umsetzen
Die funktionierende Lösung seht ihr in meiner Stream Deck Button Box

4.jpg

https://www.mouser.at/ProductDetail/512-1N4148
https://opensimhardware.wordpress.com/pedal-button-controller/

der spannende Teil - eine Bluepill zu finden die einen STM32 chip hat und der auch korrekt funktioniert
von 5 amazon bestellungen gingen 4 zurück weil es immer fake Chips waren
ich dachte einen gefunden zu haben der korrekte chips verwendet - nur leider war bei der 2 Bestellung wieder fakes im Paket

OSH ist eine super sache - kann ich nur empfehlen - günstig und gut - leider kein Nextion Support soweit ich gelesen habe

4) das Problem umgehen
ein Freund hat mir geholfen mit IC Bausteinen das Thema zu umgehen
am Ende kam so eine Schaltung dabei heraus - liegt bei ca 4EUR HW und 90 Minuten Lötarbeit

2.jpg

den schaltplan verteile ich gerne per PN

5) SC2 wireless
wir wissen das Ascher wheels (andere auch) den ALSP verbaut haben. Baut man ein wheel selbst dann wird man schnell feststellen dass der SC2 chip limitiert ist - es gibt für wheelbauer eine spezielle SW um die Ports umzustellen (ENC oder Button - if/when logiken - usw) - und genau mit dieser SW funktioniert es und der ALPS agiert wie wir uns das wünschen ;-) nur leider haben wir im DIY Bereich keinen Zugang zu dieser SW


6) ein eigenes PCB
der oben angesprochen Freund und ein weiterer haben mit mir gemeinsam ein Arduino PCB entworfen - die Idee eines Arduino PCB für die DIY community ist nicht neu (siehe OSH oben) aber mir fehlen leider ein paar Dinge - Nextion und der ALPS - ergo sollte in naher Zukunft eine Platine fertig sein welche den ALPS bändigen kann (und noch so einige andere Features) - egal ob Lenkrad oder Button Box.

1.jpg

ich hoffe jeden der sich schon mal mit diesem Thema auseinander gesetzt hat etwas weiter geholfen zu haben - der ALPS ist ein super Bauteil - nur leider nicht so einfach zu bändigen

LG - Peter
 
Zuletzt bearbeitet:
U

User 26677

Kommt der Push Befehl denn zeitgleich oder ist das ähnlich zum prellen von Tastern?

Hätte jetzt spontan so einen Ansatz im Kopf gehabt einfach einen Input abzuwarten und dann zu prüfen was danach kommt. Je nach Zeit kann man hier ja filtern ob die Eingabe gewünscht war oder nicht.

Wie sieht deine Lösung aus?

Hatte jetzt auch über eine Button Box nachgedacht und wie man die Schalter Encoder etc intelligent verkabelt ohne bei einer Matrix durcheinander zukommen.

Bin also zuletzt bei einer Schaltung mit HC165 und HC595 hängen geblieben. Dann würde man recht einfach per Bus und 4 genutzten Pins am Arduino eine 8x8 Matrix betreiben können. Das sollte wohl für vieles ausreichen, zumal ich in Windows per Joystick Library wohl keine 64 Buttons unter bekomme außer ich schließe den Arduino als Keyboard an, der Teensy dürfte das zulassen.

Ich vermute das deine Schaltungen ähnlich sind oder?
 
U

User 18304

Kommt der Push Befehl denn zeitgleich oder ist das ähnlich zum prellen von Tastern?

Hätte jetzt spontan so einen Ansatz im Kopf gehabt einfach einen Input abzuwarten und dann zu prüfen was danach kommt. Je nach Zeit kann man hier ja filtern ob die Eingabe gewünscht war oder nicht.

Wie sieht deine Lösung aus?

Hatte jetzt auch über eine Button Box nachgedacht und wie man die Schalter Encoder etc intelligent verkabelt ohne bei einer Matrix durcheinander zukommen.

Bin also zuletzt bei einer Schaltung mit HC165 und HC595 hängen geblieben. Dann würde man recht einfach per Bus und 4 genutzten Pins am Arduino eine 8x8 Matrix betreiben können. Das sollte wohl für vieles ausreichen, zumal ich in Windows per Joystick Library wohl keine 64 Buttons unter bekomme außer ich schließe den Arduino als Keyboard an, der Teensy dürfte das zulassen.

Ich vermute das deine Schaltungen ähnlich sind oder?

zeitgleich, und das ist genau das problem
den rest deiner fragen schau ich mir morgen an ;-)
 
U

User 82

Hallo Peter,

vielen Dank für deinen Einsatz.
Ich habe den gleichzeitigen Push über die Software abgeschaltet.

if (!digitalRead(15) == HIGH) {
Joystick.hat(0);
Joystick.button(11,0); //verhindert das PUSH auch aktiv ist
 
U

User 18304

Kommt der Push Befehl denn zeitgleich oder ist das ähnlich zum prellen von Tastern?

JA

Hätte jetzt spontan so einen Ansatz im Kopf gehabt einfach einen Input abzuwarten und dann zu prüfen was danach kommt. Je nach Zeit kann man hier ja filtern ob die Eingabe gewünscht war oder nicht.

Wie sieht deine Lösung aus?

unsere Lösung ist entweder ein kombination aus ICs
die aus meiner Sicht eine einfach SW Logic nachstellen

1.jpg

Hatte jetzt auch über eine Button Box nachgedacht und wie man die Schalter Encoder etc intelligent verkabelt ohne bei einer Matrix durcheinander zukommen.

kommt drauf an welche Lösung man ansieht
beim OSH sind Push und die Richtungen in der Matrix
die Encoder ein normaler Pin Eingang

2.jpg

bei unserem Arduino konzept habe wir keine Matrix - das war einer der Ziele des Projektes
hier wird es auch eine 64 input Variante geben - einfach 8 ICs anstatt 4 wie oben dargestellt

Bin also zuletzt bei einer Schaltung mit HC165 und HC595 hängen geblieben. Dann würde man recht einfach per Bus und 4 genutzten Pins am Arduino eine 8x8 Matrix betreiben können. Das sollte wohl für vieles ausreichen, zumal ich in Windows per Joystick Library wohl keine 64 Buttons unter bekomme außer ich schließe den Arduino als Keyboard an, der Teensy dürfte das zulassen.

Ich vermute das deine Schaltungen ähnlich sind oder?

siehe oben - nein - ohne Matrix - wie gesagt wir nutzen schaltregister - 8 inputs pro IC

Ich hoffe ich konnte deine Fragen beantworten

LG - Peter
 
U

User 24897

Das wäre ja suuuuper!
Ich habe bis jetzt auch noch keinen Weg gefunden meine beiden ALPS zu verwenden.
Hatte gehofft, dass ein Bodnar BU0836A dafür taugt.

Ich wäre also auch sehr an deiner DIY Lösung interessiert!
Das wäre dann nach SC2 wireless die Lösung schlecht hin.

PS: welche Kappen passen denn eigentlich auf den Switch?
 
U

User 18304

gebt uns noch ca 3-4 wochen
wir haben aktuell 5 boards
wir werden diese in den kommende 2 wochen testen
dann weitere für die community bestellen
 
U

User 24897

Ich ahbe wheels zum fahren, hat also keine Eile.
Bin trotzdem gespannt und "heiß" auf den switch. Es ist wirklich viel angenehmer damit! Merke ich jedes mal wieder wenn ich ein Fanatec Lenkrad bediene.
 
U

User 18304

sehe ich auch so - ergo habe ich aktuell 4 verbaut - 2 links 2 rechts in button boxen
 
U

User 26677

Kommt der Push Befehl denn zeitgleich oder ist das ähnlich zum prellen von Tastern?

JA

Hätte jetzt spontan so einen Ansatz im Kopf gehabt einfach einen Input abzuwarten und dann zu prüfen was danach kommt. Je nach Zeit kann man hier ja filtern ob die Eingabe gewünscht war oder nicht.

Wie sieht deine Lösung aus?

unsere Lösung ist entweder ein kombination aus ICs
die aus meiner Sicht eine einfach SW Logic nachstellen

Anhang anzeigen 88824


Hatte jetzt auch über eine Button Box nachgedacht und wie man die Schalter Encoder etc intelligent verkabelt ohne bei einer Matrix durcheinander zukommen.

Okay danke für die Darstellung.

Was mir gerade nicht einleuchtet ist der untere Teil mit Button pressed. Grundsätzlich wollt ihr ja filtern ob zwei Buttons oder einer gedrückt wurde, also ob eine Richtung gedrückt und der Knopf gedrückt wurde ODER ob nur der Button gedrückt wurde.

Der untere Teil der bei BUTTON_pressed lässt doch immer durch sobald ich eine Aktion ausführe?
Ihr hab dort ODER verwendet, richtig? Dann löst der Button doch grundsätzlich immer mit aus?

kommt drauf an welche Lösung man ansieht
beim OSH sind Push und die Richtungen in der Matrix
die Encoder ein normaler Pin Eingang

Anhang anzeigen 88825

bei unserem Arduino konzept habe wir keine Matrix - das war einer der Ziele des Projektes
hier wird es auch eine 64 input Variante geben - einfach 8 ICs anstatt 4 wie oben dargestellt

Bin also zuletzt bei einer Schaltung mit HC165 und HC595 hängen geblieben. Dann würde man recht einfach per Bus und 4 genutzten Pins am Arduino eine 8x8 Matrix betreiben können. Das sollte wohl für vieles ausreichen, zumal ich in Windows per Joystick Library wohl keine 64 Buttons unter bekomme außer ich schließe den Arduino als Keyboard an, der Teensy dürfte das zulassen.

Ich vermute das deine Schaltungen ähnlich sind oder?

siehe oben - nein - ohne Matrix - wie gesagt wir nutzen schaltregister - 8 inputs pro IC

Ich hoffe ich konnte deine Fragen beantworten

LG - Peter

Okay 8 Register nehmen und dedizierte Eingänge haben wäre natürlich auch eine Idee, dann bau ich keine Matrix und spar mir Dioden wegen des Ghostings. Hatte ich ehrlich gesagt gar nicht so direkt aufm Schirm.. Wieso auch immer..

Ich hätte in meiner Idee 2 Register gehabt, einmal Ausgänge und eben die entsprechenden Ausgänge, somit 8x8=64 lesbare Knöpfe. Das wollte ich auf ne möglichst kleine Platine inkl. Dioden bringen und könnte dann gemütlich Knöpfe anlöten wo ich Sie haben möchte. Durch die Dioden könnte man das Ghosting unterbinden. Welche Variante platzsparender und günstiger ist kann ich gerade nicht abschätzen.
 
U

User 10249

Hallo, ich soll hier mal "meine" Lösung zum 7way schildern... ich habe das ganze Lenkrad leider nicht selbst gebaut da es mein zweit OSW (Simucube) für meinen zweit Sim ist... dieses OSw kit habe ich damals hier im Forum samt dem Lenkrad von Ringo Wachtendorf abgekauft. So und an meinem 7 Way Switch fielen mir beim zerlegen des Lenkrades diese kleinen Kügelchen auf die aussehen wie Dioden und an jedem Kabel vom encoder kommend hängen bevor es von dort aus weiter geht zum Board. Ich denke diese Dioden (?) verhindern diesen extra "push" nach jeder Richtungseingabe...
Das Board im Lenkrad ist ein Teensy USB Board - V3.2 >> https://www.microcenter.com/product/454388/pjrccom-teensy-usb-board---v32
Ich habe net so viel Ahnung aber dieses Board scheint mir perfekt ... ich hatte am Lenkrad 9 Push Button, 2 Rotarys mit Push, zwei magnetic shifter und den 7 way und es waren noch Steckplätze frei - das Board wird super sauber und völlig unkompliziert plug and play mäßig als Button Controller erkannt u alle Knöpfe lassen sich so völlig problemlos in jedem Rennspiel belegen ohne über irgendwelche Umwege wie Simhub die Tasten zu belegen. Dazu ist das ganze Teil noch sehr sehr klein u kompakt!

f87e77c0-0855-4f66-80f7-9b2a0b7887aa.jpg

400322c6-54d1-4d5d-8a11-f515e273fe89.jpg

[COLOR=rgba(0, 0, 0, 0.87)][COLOR=rgba(0, 0, 0, 0.87)]


[/COLOR]
[COLOR=rgba(0, 0, 0, 0.87)][URL="https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.microcenter.com%2Fproduct%2F454388%2Fpjrccom-teensy-usb-board---v32&psig=AOvVaw2VMRAZoz-FAyCj8KziU2nZ&ust=1605912149076000&source=images&cd=vfe&ved=2ahUKEwiMluGK14_tAhUcEGMBHVC8Cr4Qjhx6BAgAEBI"]PJRC.COM Teensy USB Board - V3.2
[/COLOR]
Micro Center
[/URL]








[/COLOR]
[COLOR=rgba(0, 0, 0, 0.87)]PJRC.COM Teensy USB Board - V3.2[/COLOR]
 
U

User 24897

Es gibt die Möglichkeit sich die Wireless Platinen für Simucube konfiguriert schicken zu lassen.
So ist die Nutzung der ALPS 7 Way Switchs möglich.

https://simtechracing.co.uk/shop/wireless-wheels/simucube-wireless-button-plate-module/

[h=2]Description[/h]Compatible with both the Simucube2 and Simucube1 the SC1 requires a wireless receiver upgrade see details here

  • Connect up to 16 Buttons and 5 Encoders wirelessly to Simucube force feedback controller.
  • Supports up to 2 x 7 way Funky Switches
  • Supports most rotary encoders
  • Incredibly low energy consumption
  • Requires 2 AA Batteries
The module pin outs can be pre-programmed by us before dispatch.
If you select this option please use the contact form stating your requirements

Please Note: Compatable with most 7-way “Funky Switches”
 
U

User 13987

Moin.

Ich habe vor einigen Tagen meine Alps von Aliexpress erhalten und habe mich mal an ihnen versucht. Außerdem habe ich noch ein Gehäuse entworfen, welches für eigene Projekte verwendet werden kann. Die Inspiration hatte ich von Peters OMP-Lenkrad, danke dafür.


IMG_4227.JPG

IMG_4228.JPG

Ich habe echt Mühe gehabt, die richtige PIN-Belegung aus den Grafiken herauszulesen, weswegen ich dann alle Pole mit dem Multimeter getestet habe und somit die Belegung herausgefunden habe.

IMG_4237.jpg

Ich habe einen einfachen Sketch geschrieben, der die einzelnen Funktionen prüft. Außerdem konnte ich das Problem lösen, dass beim Drücken in eine Richtung auch der Pushbutton ausgelöst wird.

Mit meinem Sketch kann ich nun folgendes tun:
- Pushbutton drücken und auch in jede Richtung bewegen, es wird nur der Pushbutton getriggert
- Richtungstasten drücken ohne dabei den Pushbutton auszulösen
- Encoder wie gewünscht nutzen

Somit kann ich alle 7 Funktionen des Switches einzeln aktivieren, ohne mehrere Buttons auf einmal zu drücken. Testen sehr gerne erwünscht, ich meine es funktioniert alles wie gewollt. Das ganze läuft derzeit auf einem Arduino Uno ohne Joysticklibrary, sollte jedoch problemlos auf den Pro Micro übertragbar sein.

Zur Demonstration habe ich noch ein Video bei Youtube hochgeladen um das ganze zu verdeutlichen:

Hier noch der Sketch:
C:
// Rotary Encoder Inputs
#define inputCLK 4
#define inputDT 5

int counter = 0;
int currentStateCLK;
int previousStateCLK;

const int pushPin =  12;
const int upPin =  11;
const int downPin =  10;
const int leftPin =  8;
const int rightPin =  9;

int pushState = 0;
int upState = 0;
int downState = 0;
int leftState = 0;
int rightState = 0;
String encdir = "";

int timer = 0;

void setup() {
  pinMode (inputCLK, INPUT_PULLUP);
  pinMode (inputDT, INPUT_PULLUP);
  pinMode(pushPin, INPUT_PULLUP);
  pinMode(upPin, INPUT_PULLUP);
  pinMode(downPin, INPUT_PULLUP);
  pinMode(leftPin, INPUT_PULLUP);
  pinMode(rightPin, INPUT_PULLUP);
  previousStateCLK = digitalRead(inputCLK);

  Serial.begin(9600);
}

void loop() {
  pushState = digitalRead(pushPin);
  upState = digitalRead(upPin);
  downState = digitalRead(downPin);
  leftState = digitalRead(leftPin);
  rightState = digitalRead(rightPin);

  currentStateCLK = digitalRead(inputCLK);

  if (pushState == LOW) {
    if (timer >= 5) {
      Serial.println("push");
    } else {
      if (upState == LOW) {
        Serial.println("up");
        timer = 0;
      } else if (downState == LOW) {
        Serial.println("down");
        timer = 0;
      } else if (leftState == LOW) {
        Serial.println("left");
        timer = 0;
      } else if (rightState == LOW) {
        Serial.println("right");
        timer = 0;
      } else {
        Serial.println("push");
        Serial.println(timer);
        timer++;
      }
    }
  } else {
    timer = 0;
  }

  // If the previous and the current state of the inputCLK are different then a pulse has occured
  if (currentStateCLK != previousStateCLK) {

    // If the inputDT state is different than the inputCLK state then
    // the encoder is rotating ccounterclockwise
    if (digitalRead(inputDT) != currentStateCLK) {
      counter --;
      encdir = "CCW";
    } else {
      // Encoder is rotating clockwise
      counter ++;
      encdir = "CW";
    }
    Serial.print("Direction: ");
    Serial.print(encdir);
    Serial.print(" -- Value: ");
    Serial.println(counter);
  }

  // Update previousStateCLK with the current state
  previousStateCLK = currentStateCLK;
  delay(1);
}

Beste Grüße und ich hoffe, dass ich nichts übersehen habe :)
Michael
 
Zuletzt bearbeitet:

Ähnliche Themen

Antworten
6
Aufrufe
601
Benutzer 23124
Antworten
5
Aufrufe
764
Benutzer 8111
Antworten
2
Aufrufe
549
Benutzer 18146
Antworten
4
Aufrufe
1K
Benutzer 18304
Oben