Hinweis!
Dieser Beitrag enthält min. einen Partnerlink.
Info zu meinen Partnerlinks
Aufgepasst!
Günstige Hardware und kostenlose eBooks für den Arduino gibt es bei AZ Delivery
Info zu meinen Partnerlinks
Heute habe ich ein lang aufgeschobenes Projekt für Arduino endlich mal umgesetzt und mir eine Art Regie-Pult für meine Streaming-Sessions gebaut, damit ich mir die ganzen Hotkeys für die Szenenwechsel etc. nicht mehr merken muss.
Die Idee war klar: eine kleine Kiste, mit ein paar Tastern, einem USB-Anschluss und los geht’s.
Äh, Moment, kann eines meiner Arduino-Boards (Nano, Uno, Mega) das eigentlich?
Mööööp, nö!
Der kleine, aber feine Unterschied zwischen einem ATmega328P (z.B. Nano, Uno) und einem ATmega32U4 (z.B. Micro, Leonardo) ist der, dass letztgenannter als HI-Device agieren und somit ein Keyboard oder eine Maus simulieren kann.
Nur der ATmega32U4 kann mit der Keyboard.h umgehen und Maus bzw. Keyboard simulieren!
Da das ja genau das ist, was ich brauche, wurde spontan ein Pro Micro bei Amazon geordert und Kleinteilzeugs bei Conrad geshoppt.
Im Detail waren das eine kleine Kiste und ein paar Taster – tastend, nicht rastend. Ein USB-Kabel lag noch in der Teilekiste rum.
Dann ging’s an den Bau:
- Löcher bohren
- Taster montieren
- feststellen, dass das Logo fehlt
- fluchen
- Taster demontieren
- Logo setzen
- Taster montieren
- Kabel löten
- aufregen
- Kabel löten
- Kasten zu
Anschließend wurde der Micro programmiert.
Der Code dazu ist wenig aufregend:
- 2 Arrays (eins hält die Pins, das andere die Decimal-Codes für die Tasten des Num-Blocks)
- Arrays durchlaufen, um die Pins auf INPUT und HIGH zu setzen
- Keyboard initialisieren
- auf Tastendruck warten
- Tastenkombination an Rechner senden
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <Keyboard.h> //wird nur von ATmega32U4 unterstützt int keypadPins[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 16}; //Pins definieren, an denen Taster hängen int keyCode[10] = {234, 225, 226, 227, 228, 229, 230, 231, 232, 233}; //Num-Block 0-9 void setup() { //Alle Pins auf INPUT und HIGH setzen for (int i=0; i<10; i++) { pinMode(keypadPins[i], INPUT); digitalWrite(keypadPins[i], HIGH); } //Emulation beginnen Keyboard.begin(); } void loop() { //Alle Pins durchlaufen und prüfen, ob sie LOW (gedrückt) sind for (int i=0; i<10; i++) { if (digitalRead(keypadPins[i]) == LOW) { Keyboard.press(KEY_LEFT_ALT); //ALT-Key senden Keyboard.press(keyCode[i]); //Num-Block Ziffer senden ausloesen(); } } } void ausloesen () { delay(100); //Kurz warten Keyboard.releaseAll(); //Alle Tasten "lösen" delay(1000); //länger warten, bis neue Eingabe erfolgen darf } |
Das war’s eigentlich auch schon.
Eine hilfreiche Seite, um Keyboard-Eingaben zu testen ist übrigens keyboardtester.com
Die Tasten-Codes für den Num-Block fand ich im Arduino-Forum
Im OBS hab ich dann lediglich die gewünschten Szenen/Funktionen mit den Buttons verknüpft und kann nun fröhlich über die e-Zee Box meinen Stream dirigieren.
Hier noch ein paar Fotos vom Bau und eine kleine Demo meiner schlimmen Visage.
Wenn Dir dieser Beitrag geholfen hat und/oder Du mich finanziell unterstützen magst, kannst Du dies gerne per Paypal machen.
Alternativ kannst Du Dir meinen Amazon-Partnerlink in die Favoriten legen und Amazon bei Deinen zukünftigen Einkäufen darüber aufrufen:
Es entstehen Dir dadurch keine Mehrkosten, ich erhalte aber eine kleine Provision.
Über einen Kommentar freue ich mich natürlich auch :-)
Jan B-Punkt
Neueste Artikel von Jan B-Punkt (alle ansehen)
- Adventskalender Gewinnspiele 2024 - 1. Dezember 2024
- Freie News für freie User – Schneller als die Paywall - 22. April 2024
- Adventskalender Gewinnspiele 2023 - 1. Dezember 2023
- Angespielt: Starship Troopers: Extermination - 19. Mai 2023
- Fazit zum ATOMSTACK A5 pro nach zwei Monaten Nutzung - 9. Mai 2023
Mahlzeit Jan.
Cooles Ding. Bist Du eigentlich irgendwie Fachinformatiker oder so von Beruf, oder alles auf Hobbybasis gelernt?
Grüß Dich und danke für die Blumen.
Ich bin gelernter IT-Systemelektroniker, hatte mit sowas in der Ausbildung aber nie zu tun. Die Fachrichtung war eher Kommunikationskram – Telefonanlagen und Netzwerke.
Den Kram, den ich hier so zeige und mache, hab ich mir selbst beigebracht.
Hi, ich brauchte einen vernünftigen USB-Fußschalter und beim Bass-üben die Musik anzuhalten/loopen etc. Scheinbar bin ich der einzige Mensch auf der Welt, der sowas sucht. Es gibt nämlich nur Plastik-Mist oder superteure Diktierpedalerien (nachdem scythe nicht mehr verfügbar ist). Tss.
Vielen Dank für Deinen Blog.
Hi Jan,
danke für deine Anleitung. hast du einen Link zu den Schaltern von Conrad? Soweit funktioniert es bei mir. Danke!
Gruß
Stefan
Moin Stefan,
habe die Schalter damals im Laden vor Ort gekauft, weil ich sie einmal anfassen wollte, bevor sie mir dann doch nicht gefallen.
Soweit ich das sehe, sind es diese hier https://www.conrad.de/de/tru-components-tc-r13-83a-05bk-drucktaster-250-vac-1-a-1-x-ausein-tastend-1-st-1587719.html
Viele Grüße
Jan
Hi,
Ich habe Keyboard Library für ATmega32U4 an Deutsche Layout angepasst.
Alle Umlaute Ä Ü Ö und ß ESZET funktionieren.
https://github.com/MichaelDworkin/Arduino-Leonardo-USB-Keyboard-Deutsch-library
Vielleicht ist diese Bibliothek für jemanden nützlich
Ich hatte mich gerade mit dem gleichen Problem beschäftigt und die Lösung fast fertig – bis teilweise auf Tasten, die auf der deutschen Tastatur mit AltGr erzeugt werden, z. B. Backslash. Da fand ich bei der Suche nun diese Bibliothek als schon fertige, gute Lösung!!!! Das nicht unwichtige @-Zeichen wird jedoch nicht passend umgesetzt, sondern liefert mit 0x14 ebenfalls ein ‚q‘. Allerdings habe ich dazu aktuell auch keine Lösung. Gibt’s da evtl. noch eine Lösung? Noch eine Anregung: Die meisten Sonderzeichen hinter den Groß- und Kleinbuchstaben (z.B. eckige und geschweifte Klammern) liefern quasi zufällige Ergebnisse. Mit dem Code 0 würden… Weiterlesen »
Hallo Hubi,
ich habe mittlerweile neue Bibliothek geschrieben die alle Zeichen unterstützt.
https://github.com/MichaelDworkin/KeyboardMultiLanguage
schaue dir das Beispiel für Deutsch
https://github.com/MichaelDworkin/KeyboardMultiLanguage/blob/master/examples/KeyboardGerman/KeyboardGerman.ino
Keyboard.println(„abc öÖäÄüÜ ß\nXYZ q@e€\\mµ“);
Zunächst mal DANKE!!!! – Allerdings hakt es bei mir: Das @-Zeichen wird nicht dargestellt. Außerdem scheint eine Verschiebung in der GE-Mapping-Tabelle ab den Großbuchstaben vorzuliegen. Noch grobem Check liegt das ‚A‘ eine Position zu früh (Hch kann Flas essen, ohne mir zu schaden.). Fügt man dort das ‚@‘ ein, wird’s anscheinend auch nicht genommen.
Cooles Teil, kannst Du vielleicht die Verdrahtung mal zeigen. Das Bild habe ich gesehen, aber sehe nicht die Pins.
Wie Du am Code erkennen kannst, habe ich tatsächlich je Taster einen PIN benutzt.
Mehr isses tatsächlich nicht :-)
Super vielen Dank, geniale Lösung :)
Hallo! Ich komme bei einem ähnlichen Projekt nicht weiter. Wie müsste denn der code aussehen wenn: Taster 1 = Caps Lock (193) ausgeben soll, und wenn Schalter 1 (Schließer) geschlossen ist, Taster 1 = Left Ctrl (128) + Caps Lock (193) ausgeben soll? # #include int keypadPins[4] = {2, 4, 7, 8,}; int keyCode[5] = {128, 193, 225, 226, 227}; //Strg-l.,Feststelltaste,Num-Block 1,2,3 int buttonApin = 2; //Kanal 1, Numpad 1 int buttonBpin = 4; //Kanal 2, Numpad 2 int buttonCpin = 7; //Kanal 3, Numpad 3 int buttonDpin = 8; //Sprechtaste, Feststelltaste int buttonEpin = 12; //Umschaltung gross/klein, Strg-l int… Weiterlesen »
Hallo Jan.
Ich helfe einer behinderten Person (älteres Modell, wie ich) beim Einstieg in die PC-Welt. Auf der schweizerischen Tastatur muss sie „Alt Gr“ und die „2“ für den Klammeraffen @ drücken, was sie enhändig aber nicht schafft. Obwohl Windows gewisse Möglickeiten bietet, mache ich ihr lieber ein Böxlein mit den paar Tastenfunktionen, die sie wegen ihrer Behinderung einhändig nicht auslösen kann.
Dein Beitrag hat die Tür geöffnet. Der Leonardo ist bestellt.
Herzlichen Dank!
Hat’s geklappt?
Hallo,
sehr schöne Idee. Ich würde mir gern sowas bauen, allerdings mit Bluetooth.
Daher 2 Fragen:
Lg Andy
Du musst halt einen MC finden, der vom PC als HID erkannt wird. Ob das per BT geht, weiß ich nicht.
Sorry, für die späte Antwort.
Moin moin aus Kiel
Genau sowas habe ich gesucht prima Sache.
Gruß jürgen
Hallo aus Kiel zurück,
viel Spaß mit dem Projekt :-)
Moin kann mann die PINs für die tastet direkt auf gnd schalten od lieber ein Widerstand in Reihe schalten
Jürgen
Das ist so ein Thema, bei dem ich mir auch immer unsicher bin. Gebaut hab ich es damals ohne Widerstände. Ob das gut/sicher/falsch/unsicher ist, kann ich nicht sagen. Hab in E-Technik damals nie aufgepasst :-/
So teile sind angekommen.
Klappt schon sehr gut am pc mit Teamspeak.
Nur mit der Handy APP ist es wie ein Blinken wenn ich die Taste drücke u fest halte immer an aus an aus sieht mann auch gut an der led .
Bin leider kein Programmierer