mir fehlt nach langer Suche im Netz und hier im Forum eine Idee für ein DPad. Auch im 3D Druckbereich finde ich nichts passendes.
Das nachfolgende wäre eine Option (sofern es das diagonale Drücken - zwei Tasten gleichzeitig unterstützt)… Das Produkt ist nicht zu finden und lt. Post nicht mehr verfügbar. Außerdem würde ich bei Bestellung in Übersee 3 Wochen warten müssen. Das ist keine Option.
Ich habe ein analog Tactical Switch Modul. Ich hatte ein 5D Schalter-Modul. Habe genügend Taster um mir selbst etwas zu löten. Was habe ich vor: ich bastele mir eine kleine Handheld- Spiel-Konsole. Rein kommt da ein Mega Mini Pro. 2,42 Zoll oLED, etc.. Funktioniert alles schon (mit Tastern auf dem Steckbrett).
Problematisch ist die Größe der Schaltermatrix. Ich möchte wenig Kabel. Deshalb wäre die Lösung das via analoger Schaltung zu bewerkstelligen ideal. Allerdings kann man nicht zwei Tasten gleichzeitig drücken. Erkannt wir immer nur der zuerst gedrückte (zumindest in meinen Versuchen). Wiederum kein Problem, wenn ich 9 Taster verwende, habe ich die Diagonalen abgedeckt.
Ich hadere mit den Widerständen. Wie müsste ich die dimensionieren, wenn mir die üblichen verfügbaren Widerstände (aus den Einsteigersets etc.) vorliegen. Es gibt zahlreiche Schaltungen im Netz. Manche verwenden immer den gleich Widerstand zwischen den Schaltern und GND, andere empfehlen unterschiedliche Werte analog 1,2,4, 8, 16… etc. 9 von diesen Widerständen wird ein Platzproblem. SMD Widerstände zu fummelig.
Der Aufwand eine Key-Pad-Schaltung zu löten wäre ähnlich. Ich brauche dann ein paar weniger Kabel, als die 9 Schalter direkt anzuschließen. Pins hätte ich genug zur Verfügung, aber dann auch 6 bzw. 9 Kabel + 1 GND, die ich unterbringen müsste.
Einen Joystick könnte man auch nehmen (und ein digitales Verhalten simulieren - auch schon programmiert und getestet). Aber für einige Spiele möchte ich das klassische Arcade Feeling mit Mikroschaltern.
Ideen, Empfehlungen werden erbeten ;-) Vielleicht hatte von Euch jemand schon mal eine ähnliche Anforderung und Ratschläge aus der Praxis.
noch ein wenig konkreter… das ist der Entwurf für das Gehäuse. Links ein Joystick. Mitte das oLED, darunter der Mega Mini, rechts die Taster. Das ganze wird 16 x 16 cm (bis jetzt) und die Lage der Komponenten noch nicht final (das ist nur ein Entwurf)
Wenn es unbedingt analog sein muss, würde ich mit gleichen Werten und in Reihenschaltung arbeiten, die Auswertung mit einem swicth/case - Konstrukt und dort den Reaktionsbereich einschränken.
Wenn Du die 1,2,4,8 Variante nimmst, wird das Widerstandsarray parallel angeordnet und Du kannst dann auch 2 Werte gleichzeitig auswerten, da diese eine Summe bilden.
Okay… dann muss ich gestehen, dass mir der Unterschied von den verschiedenen gegoogelten Schaltungen gar nicht aufgefallen ist, oder ich hatte immer den parallelen Ansatz gefunden, der wohl etwas mit dem Prinzip der Spannungsteilung zu tun hat. Deshalb habe ich das auch nicht kapiert, dass das mit den zwei Tasten nicht geht. Nun habe ich meine eigene Schaltung getestet. Die ist ähnlich wie diese hier. Da funktioniert das mit den zwei Tasten gleichzeitig. Mit dem Module funktioniert es nicht. Das ist dann in Reihe geschaltet? Ich bin verwirrt. Hast du evtl. ein Beispiel für eine Reihenschaltung mit Widerständen?
Variante A: Reihenschaltung - es wird nur der erste Wert ermittelt
// EDIT: in einer früheren Version waren A0 und GND vertauscht
// und der Pullup hinter einer Taste versteckt
1K 1K 1K 1K RR
GND--+-|___|-+-|___|-+-|___|-+-|___|-+--* +-|___|-- +5V
| | | | | |
\1 \2 \3 \4 \5 |
\ \ \ \ \ |
| | | | | |
+-------+-------+-------+-------+-------+-------- A0
Variante B: Parallelschaltung - es werden auch mehrere Werte erkannt
R1
A0 --+-|___|-+-\1 ---+
| \ |
| R2 |
+-|___|-+-\2 ---+
| \ |
| R3 |
+-|___|-+-\3 ---+
| \ |
| R4 |
+-|___|-+-\4 ---+
| \ |
| R5 |
+-|___|-+-\5 ---+--- +5V
| \
| RR
+-|___|------------- GND
Die Variante Reihenschaltung: Nachteil: Es wird immer nur eine Taste erkannt. Immer die, die dichter am Eingangspin ist.
In dem Fall, wenn Du Taste 3 und 4 drückst, wird nur Taste 3 erkannt.
Vorteil: Wenn ein Tastendruck erkannt wird, ist es genau diese Taste, eine zweite Taste kann nicht zusätzlich erkannt werden
Die Variante Parallelschaltung: Vorteil: Für eine diagonale braucht es keine Taste auf der diagonale, sondern nur die Kreuztasten, da mehrere Tasten gleichzeitig einen gemeinsamen Wert bilden.
Nachteil: Du kannst nicht sicher sein, dass nach dem ersten erkannten Tastendruck genau diese Taste gemeint ist. Wird die Diagonale mit dem Kreuz ausgelöst musst Du einen klitzekleinen Moment ab dem ersten auslösen warten.
Das lässt sich softwareseitig lösen, ist aber aufwändiger, als in der Reihenschaltung nur eine Taste zu erkennen.
In der Variante Matrix - also für Deine geplante 3x3 brauchst Du 6 Pins. Ist genauso Aufwand wie Parallelschaltung.
Wenn Taste 4 und dann gleichzeitig Taste 3 gedrückt wird, wird erst Taste 4 und dann nur Taste 3 erkannt. Alles was weiter vom Eingang entfernt ist, wird "kurzgeschlossen"
Über alle 5 Widerstände ergibt sich ein PULLUP - damit kann Taste 1 nach GND gehen und liefert in einem Switch-Case Konstrukt bei 0 ... 3 den ersten Taster zurück
Um den selben Effekt zu erzieheln, müsste in der Parallelschaltung GND und 5V getauscht werden, es kann aber nicht der gesamte ADC-Bereich genutzt werden, da ein Spannungsteiler immer aktiv ist.
Egal welcher Taster betätigt wird, liegt am betätigten Taster oben GND an. Das ist dann über eine variable Anzahl von Widerständen mit A0 verbunden. Ob das 0 oder 5 1k Widerstände sind, ist egal.
Aktuell bildet sich bei Variante A kein Spannungsteiler. Um das zu reparieren könntest du einen Widerstand in die GND Leitung einbauen.
Oder hast du den Pullup am Pin aktiviert? Da könntest du dann die Verbindung mit 5V weglassen. Da würde mich aber die Kalibrierung im Code interessieren.
Nach der Suche, wo der Fehler herkommt: Im Original waren das 10 Tasten - und schon beim ersten kopieren für ein anderes Projekt ist der PULLUP verloren gegangen.
Hallo zusammen, vielen Dank für Euren Input insbesondere an @my_xy_projekt für die Beispiele. Lustigerweise ist mir gestern auch eingefallen, was du mit Reihenschaltung meinst. Natürlich sind die Schalter immer parallel. Nur die Widerstände nicht. Ich stand auf der Leitung. Tut mir leid. Du hast es richtig beschrieben. Ich habe nicht genau genug gelesen…
Aufgebaut hatte ich die Parallelvariante gestern abend noch. Hatte Widerstände in meinem Sortiment gefunden. Visuell geprüft und getestet heute morgen: 10, 20, 47, 100, 220, 470, 1K, 2K2, 4K7.
Das ganze ist aber zu ungenau im unteren Wertebereich. Ist ja auch hier im Forum und im Web oft beschrieben. Nun hast du völlig recht… da ich parallel arbeite, bräuchte ich nur 4 (vielleicht 5 - Select / Fire) Taster. Da kommt aber das Problem, einen Mechanismus zu erfinden, der es mir erlaubt, auch zwei Tasten gleichzeitig zu drücken. Eben das, was ein D-Pad oft erlaubt. Ein paar 3D Probedrucke waren leider Fehlinvestitionen (das ist alles zu wackelig). Was man da so im Netz findet, sind meist nur Ersatzteile / alternative Caps für Controller diverser Firmen.
Werde das wohl alles nochmal durchdenken (das mache ich zwar nun schon seit ein paar Tagen), aber es bringt auch nichts etwas übers Knie zu brechen.
Mit den mir aktuell zur Verfügung stehenden Mitteln, sehe ich aktuell zwei Optionen: 9 Taster mit gleichen Widerständen in Reihe. 4 (5) Taster mit Widerständen parallel. Und eine dritte Option fällt mir vielleicht noch ein. Möglicherweise doch zwei Joysticks (ein Hall Effekt für präzise Analogwerte) und ein Modul KY-023 (für den Rest / als DPad). Oder schöner erklärt hier… Muss dann auf das Arcade-Feeling mit den klickenden Mikroschaltern verzichten ;-)
oha… das habe ich jetzt mal gegoogelt. Geht das in die Richtung wie hier zu sehen? Da ist ein Wokwi Beispiel. Wenn man da ein wenig mit den Werten rumspielt (0b0~1) funktioniert das auch.
Das hat das selbe "Problem" als würdest Du für jeden Taster einen Pin am Arduino nehmen.
Du musst mindestens pollen. Bei 8 bit bekommst Du keine 9 Tasten. Wenn Du das mit 2 gleichzeitig gedrückten Tasten für die Diagonalen machen willst, musst Du auch wieder den ersten Tastendruck zwschenspeeichern und nach x ms ein zweites Mal abfragen, ob eine zweite Taste gedrückt ist.
Alternativ bestünde die Möglichkeit, dass mit einem I/O-Expander mit INT zu bauen.
Wird der INT ausgelöst, wird der Timer gestartet und nach xx ms der Inhalt geholt. Bis dahin hat die zweite Taste ausgelöst und Du musst nur einmal für alle States lesen.
Kommt eben drauf an, wie zeitkritisch die Aktionen sind.
Ich würde einfach ein PFC-8574 auf die Platine löten.
Das geht Problemlos mit bis zu 16 Tasten. Fertige Libs dafür gibt es im Netz.
Bei einer 9er Martix bleiben halt ein paar Leitungen unbelegt, ist völlig egal.
Dann das Teil via I2C abfragen.
danke @pucki, @Rintin und @my_xy_projekt. Ich muss das nochmal durchdenken. Heute werde ich nochmal einen Zettel und Stift zur Hand nehmen und das zeichnen. Die Portexpander wären gar nicht mal schlecht. Zwei Kabel zum Controller, den Rest kann ich seitlich verbergen. Blöd nur, dass ich hier dann auch wieder Widerständen verlöten muss, da vermutlich die internen gering dimensionierten Pull-Ups nicht reichen.
Ich bin inzwischen eigentlich soweit, dass ich das DPad verworfen habe. Also das Drücken von zweit Tasten um die Diagonalen abzubilden. 9 klare Tasten ohne viel Drum rum, was wackelt, verrutsch oder bricht. Dafür brauche ich eine Lösung, die mit Kabeln zum Controller auskommt. Das wäre mit dem Shiftregister oder mit dem Portexpander gegeben (allerdings brauchen beide wohl auch Pull-Up’ Widerstände oder irre ich mich und einen Shiftregister IC für mehr als 8 Ausgänge müsste ich noch finden - der 74HC595 hat nur 8, oder?).