USB Button Buzzer (PBT-Serie) / USB Pushbox (PBL-Serie) – Anleitung
Contents
Treiber installieren zum Programmieren
Verbinden Sie den Button mit dem Computer, legen Sie die Treiber CD ein und warten Sie bei der Erstinstallation 3 Minuten, damit das Betriebssystem den seriellen Gerätetreiber installieren kann. Dann gehen Sie wie folgt vor:
Windows:
- Öffnen Sie die Systemsteuerung -> Gerätemanager. Wenn Sie ein “Arduino Leonardo” Gerät in der Abteilung “Anschlüsse (COM & LPT)” sehen ist die Treiberinstallation korrekt.
- In jedem anderen Fall downloaden und installieren Sie die Arduino IDE. Dann prüfen Sie erneut den Gerätemanager.
Mac:
- Öffnen Sie das “terminal” und geben Sie ein: sudo screen /dev/tty.usbmodemCHIDA1 (tippen Sie “screen /dev/tty.” und dann die mehrfach TAB-Taste um die angeschlossenen tty-Geräte nacheinander aufzulisten).
Linux:
- Öffnen Sie das “terminal” und geben Sie ein (danach erfolgt die Administrator-Passworteingabe): sudo screen
- Falls das “screen” Kommando nicht gefunden wurde, tippen Sie unter Debian/Ubuntu: “sudo apt-get install screen” und bestätigen Sie die Installation. Wenn screen gestartet wurde, beenden Sie ihn wieder mit “exit”.
- Öffnen Sie dann das serielle Gerät mit: sudo screen /dev/ttyACM0 (tippen Sie “screen /dev/ttyA” und dann die TAB-Taste mehrfach um alle seriellen Geräte nacheinander aufzulisten).
Seriell über Terminal verbinden
Windows:
- Downloaden Sie CoolTermWin.zip (Windows)
- Starten Sie CoolTerm, klicken Sie auf ‘Options’ => ‘Serial port’ => wählen Sie den letzten COM-Port in der Liste aus und wählen baud rate 115200 und klicken Sie auf ‘Ok’, dann auf ‘Connect’. Falls die Verbindung nicht hergestellt werden kann, wählen Sie einen anderen COM-Port, wählen 115200 baud und probieren es erneut.
Mac:
- Gehen Sie wie im vorigen Kapitel beschrieben vor, um mit dem Button eine serielle Verbindung aufzubauen.
- Falls das GNU-screen Kommando nicht genügend Komfort bietet, können Sie auch CoolTermMac.zip (Mac) downloaden.
- Starten Sie CoolTerm, klicken Sie auf ‘Options’ => ‘Serial port’ => wählen Sie usbmodemCHIDA1 in der Liste aus und wählen baud rate 115200 und klicken Sie auf ‘Ok’, dann auf ‘Connect’. Falls die Verbindung nicht hergestellt werden kann, wählen Sie einen anderen COM-Port, wählen 115200 baud und probieren es erneut.
Linux:
- Gehen Sie wie im vorigen Kapitel beschrieben vor, um mit dem Button eine serielle Verbindung aufzubauen.
- Falls das GNU-screen Kommando nicht genügend Komfort bietet, können Sie auch CoolTermLinux.zip (Linux) downloaden.
- Starten Sie CoolTerm, klicken Sie auf ‘Options’ => ‘Serial port’ => wählen Sie den letzten COM-Port in der Liste aus und wählen baud rate 115200 und klicken Sie auf ‘Ok’, dann auf ‘Connect’. Falls die Verbindung nicht hergestellt werden kann, wählen Sie einen anderen COM-Port, wählen 115200 baud und probieren es erneut.
Schnellstart: Hilfe
Der Button wird über serielle Kommandos programmiert. Sie geben ein Kommando in das serielle Terminal ein und senden es an den Button mit ; (Semikolon). Sie können mehrere Kommandos in einer Zeile, jeweils mit Semikolon getrennt, senden.
Verbinden Sie sich mit 115200 baud und geben Sie das Hilfe-Kommando ein: h;
Nun sollte folgende Bildschirmausgabe erscheinen (Tipp: Maximieren Sie das Terminalfenster für eine bessere Ansicht):
Grau GmbH Hardware&Software Solutions – HID Pushbutton Version 2.1.7 – 15.03.2019
–Serial commands–
?; –> show all command- and string lists
s; / save; –> save all lists to EEPROM
h; / help; –> show this help
factory; –> reset to factory settings (includes saving to EEPROM)
e1; / e0; –> echo on/off
c0;..c7; –> clear command list no. 0-7
bsp=xxx; –> set default button state polling interval in ms (default=100)
l0;..l2; –> keyboard layout 0-2: 0=GERMAN_LATIN1, 1=GERMAN_CP1252, 2=ENGLISH
str0=MyString; –> store string number
!1,0,x,x,x,x; –> set single command at index 0 in command list number 1 (default list)
cmd syntax:
![commandListNo],[index],[command],[data1],[data2],[data3]
…..
Kommandozeile und Kommandoliste
Geben Sie Ihre erste “Kommandozeile” in das Terminalfenster ein:
Der ASCII code für den Buchstaben ‘a’ ist 97. Für andere Codes schauen Sie bitte in auf dieser Seite.
Öffnen Sie nun einen Editor/eine Eingabezeile (Notepad, Wordpad, Write, Eingabeaufforderung o.Ä.) und betätigen Sie den Button, um zu prüfen ob die Taste ‘a’ beim drücken des Buttons abgesetzt wird.
Die Erklärung der “Kommandzeile” oben ist wie folgt:
- ! = Achtung – eine Kommandozeile wird programmiert! Eine Kommandozeile ist eine einzelne Zeile in der Kommandoliste und beschreibt die Betätigung und/oder das Loslassen von 1 bis 3 Tastencodes.
- 1 = Programmiere eine Kommandozeile in Kommandoliste Nummer 1. Dies ist die Standard-Kommandoliste, welche bei Betätigung ausgelöst wird. Sie können Kommandoliste 0..7 programmieren. Jede Liste wiederum kann bis zu 8 Kommandozeilen enthalten (Index 0..7).
Wenn der Button gedrückt wird, werden alle Zeilen in der Kommandoliste von Index 0 bis 7 ausgeführt (sofern diese programmierte Kommandozeilen enthalten). - 0 = In dieser Kommandoliste möchte Ich Zeile 0 (=die erste Zeile, da von 0 gezählt wird) programmieren.
- 2 = Ich möchte ein HID-KEYBOARD-KEY Kommando programmieren. Dies ist der Standard-Kommandotyp für eine Tastaturtaste. Es gibt insgesamt 7 Kommandotypen: NOFUNCTION(0), HID-SYSTEM-KEY(1), HID-KEYBOARD-KEY(2), TYPE-STRING(3), HID-CONSUMER-KEY(4), DELAY_MICROSECONDS(5), DELAY_SECONDS(6), SET_CURR_LIST_INDEX(7).
Die Syntax für die einzelnen Kommandotypen wird später erklärt. - 97 = zeige ASCII Zeichen 97.
Eine vollständige ASCII Tabelle mit Dezimal/Hexcodes finden Sie hier. Der Button akzeptiert sowohl Dezimalwerte (97) wie auch Hexwerte (0x61) als Zahlenformat.
Sie können den Dezimalwerte 97 sehr einfach mit Ihrer Tastatur testen: Öffnen Sie einen Editor (z.B. Notepad in Windows oder das Terminal in Linux). Vergewissern Sie sich, dass Ihre Tastatur NUM-LOCK eingeschaltet hat: Drücken Sie 8 auf dem numerischen Tastenblock. Wenn eine 8 angezeigt wird, ist NUM-LOCK eingeschaltet. Ansonsten betätigen sie NUM-LOCK und dann 8 erneut, so dass die Zahl 8 angezeigt wird. Dann halten Sie die linke ALT gedrückt und geben 9 7 auf dem numerischen Tastenblock ein. Danach lassen Sie die linke ALT los. Der Buchstabe “a” wird angezeigt. - 0,0 = Nulldaten/ keine weitere Tasten sollen gedrückt werden.
- ; = Kommandozeile vollständig => Zeile zum Button absenden und verarbeiten. Der Button reagiert mit der Ausgabe der neu programmierten Listen.
- s; = Speichern der aktuellen Programmierung ins EEPROM (=in den eingebauten Flashspeicher). Wenn Sie das “s;”-Kommando nicht senden gehen die neuen Einstellungen beim Abziehen des USB Stecker verloren.
Zusammenfassung:
- Eine Kommandoliste wird ausgeführt, sobald der Button betätigt wird. Standardmäßig ist dies Kommandoliste Nr. 1.
- Eine Kommandoliste aus bis zu 8 Kommandozeilen. Sie können alle programmierten Kommandolisten mit den Kommandozeilen auflisten, indem Sie ?; eingeben.
- Eine vollständige Kommandozeile besteht IMMER aus 6 Eingabewerten, welche durch Kommata getrennt sind und wird direkt über das serielle Terminal eingegeben.
- Eine Kommandozeile wird zum Button abgesandt durch ein Semikolon “;” im seriellen Terminal.
- Alle Indezes/Startwerte von Listen beginnen mit 0. Das bedeutet: Die erste Zeile hat Nummer 0, die zweite Zeile Nummer 1, usw.
Syntax einer Kommandozeile:
![KOMMANDO_LISTENNUMMER], [ZEILEN_INDEX], [KOMMANDO_TYP], [DATA1], [DATA2], [DATA3];
- KOMMANDO_LISTENNUMMER: 0..7
1 = Standardausführung; 0 = Ausführung wenn Computer im Standbymodus ; 2..7 = benutzerdefiniert - ZEILEN_INDEX: 0..7. Die programmierten Zeilen mit gültigen Kommandos werden von 0 bis 7 nacheinander ausgeführt.
- KOMMANDO_TYP: 0..7
0 = NOFUNCTION, keine Funktion/nichts ausführen
1 = HID_SYSTEM-KEY – spezielle HID Systemtasten. Siehe auch: Tastencodes-Liste
2 = KEYBOARD-KEY – das normale Keyboard
3 = TYPE_STRING – eine Zeichenkette/Buchstabenreihe/Wörter ausgeben
4 = CONSUMER-KEY command – spezielle HID Consumertasten. Siehe auch: Tastencodes-Liste
5 = DELAY_MS / delay milliseconds – Pause in Millisekunden
6 = DELAY_S / delay seconds – Pause in Sekunden
7 = SET_CURR_LISTIDX / (Englisch: set current command list index) – die Kommandolistennummer wechseln
8 = MOUSE / Mauscursor setzen und optional klicken. - DATA1..DATA3: 0..65535 – drei Datenwerte, welche die Details/Codes zu dem Kommando enthalten. Es müssen immer ALLE 3 Datenwerte eingetippt werden, auch wenn bei einigen Kommandos DATA2 und DATA3 x-beliebige Werte oder Null sein können.
Merke: DATA1 wird bei KOMMANDO_TYP=3, 5, 6, 7 verwendet => DATA2, DATA3 werden für diese KOMMANDO_TYPEN ignoriert.
Tastenanschlag halten und loslassen
Standardmäßig hält der Button die Tastenanschläge (=Datenwerte DATA1 bis DATA3) welche in einer Kommandoliste programmiert sind. Das bedeutet, wenn z.B. die Tastencodes 97,98,99 für das KEYBOARD-KEY Kommando programmiert sind, werden die Tasten “a”, “b”, “c” parallel gedrückt.
Erst nachdem eine Kommandoliste vollständig ausführt wurde werden alle Tastenanschläge automatisch losgelassen (ENGLISCH: auto-release).
Wenn Sie die Taste sofort nach dem Betätigen loslassen wollen, müssen Sie den Datencode “0x8000” nach dem Tastencode verwenden.
Zum Beispiel wird die Zeile “!1,0,2,97,0×8000,0; !1,1,2,98,0×8000,0; !1,2,2,99,0×8000,0; s;” die Tasten “a”, “b”, “c” hintereinander drücken- jeweils mit loslassen (ENGLISCH: release).
Für Spezialisten: Sie können auch die Tastencodes binär ODER-verknüpfen mit 0x8000. Benutzen Sie den Windows Rechner im Programmierer-Modus.
Für den Dezimalwert 97 geben Sie in Windows CALC ein: 97, der Rechner zeigt an HEX: 61.
Nun drücken Sie “OR”, dann geben Sie “8000” ein und “=”. Das Ergebnis ist 8061. Somit geben Sie anstelle von 97, den Wert 0x8061 als Datenwert ein und die Taste wird sofort nach Betätigung losgelassen.
Wenn Sie alle gedrückten Tasten und Aktionen loslassen wollen, können Sie auch ein “autoRelease” ausführen mit dem Datenwert “0xFFFF”. Der Button führt das autoRelease allerdings standardmäßig selber an jedem Kommandolistenende aus. Wenn Sie das autoRelease am Listenende abschalten wollen, müssen Sie Bit 7 (128) in der Button-Pinkonfiguration ändern (siehe weiter unten “Physikalische-Pin-Konfiguration: “@…”- Kommandodetails”).
Komplette Kommandolisten löschen
Mit “c0;”..”c7;” können Sie eine komplette Kommandoliste (alle Zeilen) löschen. Wenn Sie z.B. “c1;” eingeben, werden alle 8 Zeilen in Kommandoliste 1 gelöscht. Merke: Wenn Sie danach nicht mit “s;” speichern,
können Sie das Löschen einfach durch abziehen und wiederanschließen des USB Stecker rückgängig machen.
Eine einzelne Kommandozeile löschen
Kommandozeilen, welche nicht mehr benötigt werden, sollten mit Nulldaten überschrieben werden.
Beispiel: Die vierte Zeile in Kommandoliste 1 löschen: !1,3,0,0,0,0; => Nummer 3 für die vierte Zeile, da wir immer von 0 zählen.
Parallele Tastenanschläge
Sie können bis zu 6 parallele Tastenanschläge in einer oder mehrerer Kommandozeilen ausführen:
Zum Beispiel: STRG+SHIFT+ESC (=Englisch CTRL+SHIFT+ESC = Taskmanager in Windows öffnen):
c1; !1,0,2,0×2000,0x2001,0x4029;
Merke: 0x2000, 0x2001, 0x4029 sind Zahlen im Hexadezimalformat. Sie beginnen zur Erkennung mit 0x, dann folgt der eigentliche Zahlenwert. Sie werden in der Zahlencodeliste häufig verwendet, da man mit Ihnen einfacher binär rechnen kann. Zur Umrechnung von Dezimalzahlen nach Hexadezimalzahlen öffnen Sie einen Rechner (z.B. Windows Rechner/CALC) und stellen ihn auf “Programmierer”-Modus. Wählen Sie dann die Zeile Dec aus und geben z.B. 97 ein. Dann schauen sie auf Hex und erhalten 61. Das bedeutet Sie können statt 97 auch 0x61 als Datenwerte für den Button eingeben.
Die Tastencodes 0x2000, 0x2001, 0x4029 sind in der Zahlencodeliste aufgeführt. Alle drei Tasten werden simultan gedrückt und dann automatisch am Ende der Kommandoliste losgelassen.
Wenn Sie noch weitere Tasten parallel betätigen wollen, können Sie einfach eine zweite Kommandozeile verwenden:
Zum Beispiel: STRG+SHIFT+ALT+RÜCKTASTE (=Englisch CTRL+SHIFT+ALT+BACKSPACE)
c1; !1,0,2,0×2000,0x2001,0x2002; !1,1,2,0x402A,0x8000,0;
0x8000 ist der Tastencode für Taste-Loslassen. Wir könnten den Code weglassen (=auf 0 setzen), da alle Tasten automatisch am Listenende losgelassen werden. Jedoch ist es in diesem Beispiel möglich weitere Kommandos in Kommandozeile 2 hinzuzufügen, ohne dass sich diese mit den Tastenanschlägen aus Zeile 0 und 1 überlagern.
Alle Listen/Konfiguration anzeigen: ?;
Tippen Sie folgendes Kommando ein, um alle Variablen, Kommandolisten und Strings/Zeichenketten: ?;
Sie erhalten eine Bildschirmausgabe ähnlich zu dieser:
–VARS–
isON=1 echo=1 currListIdx=1 bsp=100 soloBtnIdx=-1
keyb_layout: 1 – GERMAN_KEYB_LAYOUT_WINDOWS_CP1252
–BTNPINS–
>idx:0>pin:18>treshold:500>mode:INPUT_PULLUP(2)>listTrigger:-1>listRepeat:-1>listRelease:-1> repeatDelay:400>bitflags:33|TRIG_HIGH|RELEASED|LASTLVL_L|SOLOBTN
>idx:1>pin:19>treshold:500>mode:INPUT_PULLUP(2)>listTrigger:127>listRepeat:-1>listRelease:-1> repeatDelay:400>bitflags:16|TRIG_LOW|RELEASED|LASTLVL_H
>idx:2>pin:20>treshold:500>mode:INPUT_PULLUP(2)>listTrigger:-1>listRepeat:-1>listRelease:-1> repeatDelay:400>bitflags:48|TRIG_LOW|RELEASED|LASTLVL_H|SOLOBTN
>idx:3>pin:21>treshold:500>mode:INPUT_PULLUP(2)>listTrigger:-1>listRepeat:-1>listRelease:-1> repeatDelay:400>bitflags:48|TRIG_LOW|RELEASED|LASTLVL_H|SOLOBTN
–CMD_LISTS–
-listidx=0-
-listidx=1-
listidx=1 idx=0 cmd=3 (typeString) data1=0(0x0) data2=0(0x0) data3=0(0x0)
listidx=1 idx=1 cmd=2 (Keyboard) data1=49192(0xC028) data2=0(0x0) data3=0(0x0)
listidx=1 idx=2 cmd=7 (currListIdx) data1=2(0x2) data2=0(0x0) data3=0(0x0)
-listidx=2-
listidx=2 idx=0 cmd=3 (typeString) data1=1(0x1) data2=0(0x0) data3=0(0x0)
listidx=2 idx=1 cmd=2 (Keyboard) data1=49192(0xC028) data2=0(0x0) data3=0(0x0)
listidx=2 idx=2 cmd=7 (currListIdx) data1=1(0x1) data2=0(0x0) data3=0(0x0)
-listidx=3-
-listidx=4-
-listidx=5-
-listidx=6-
-listidx=7-
–STRINGS–
str0=Hello my friend!
H72 e101 l108 l108 o111 32 m109 y121 32 f102 r114 i105 e101 n110 d100 !33
str1=Nice to meet you!
N78 i105 c99 e101 32 t116 o111 32 m109 e101 e101 t116 32 y121 o111 u117 !33
done.
——
Diese Ausgabe zeigt alle Listen, welche im internen EEPROM/Flashspeicher gespeichert sind. Die Erklärung der Abschnitte ist wie folgt:
—VARS–: Dieser Abschnitt zeigt alle globalen Variablen
- isON=1 => ist das Modul im USB Suspended/Standby-Modus (auch USB S3 Modus genannt, reduzierter Stromverbrauch) oder Full-Power-ON-Modus?
- echo=1 => sollen die seriellen Eingabedaten wieder ausgesandt werden (echo Funktion- standardmäßig ein) ?
- currListIdx=1 => die Kommandoliste, welche bei der nächsten Betätigung des Buttons abgearbeitet wird.
- bsp=100 => das “buttonStatePolling”-Interval. Die Zeit in Millisekunden, mit welcher der interne Status für alle Taster abgefragt wird. Weitere Informationen in späteren Kapiteln.
- soloBtnIdx=-1 => der “solo-Button-Index”. Wenn ein Taster als “Solo-Button” konfiguriert ist, wird er exklusiv ausgeführt. Das bedeutet, das kein anderer Taster stören kann. Dies ist ein Feature der USB Pushbox, welche mehrere Taster beinhaltet. Die Einstellung des Solo-Button Status wird im Abschnitt ‘Physikalische-Pin-Konfiguration / @-Kommando’ beschrieben.
- keyb_layout: “Keyboard-Layout” => das aktuelle Tastaturlayout für die Stringsausgabe (Kommandotyp 3). Weitere Informationen in späteren Kapiteln.
–BTNPINS–: Dieser Abschnitt listet die physikalische-Pin-Konfiguration des internen USB-Moduls auf. Weitere Informationen in späteren Kapiteln.
–CMD_LISTs–: Dieser Abschnitt listet alle Kommandolisten mit ihren programmierten Kommandozeilen auf. Kommandoliste 1 beginnt z.B. mit der Überschrift “-listidx=1-“. Alle gültigen/programmierten Kommandozeilen folgen.
–STRINGS–: Dieser Abschnitt listet alle Zeichenketten (ENGLISCH “Strings”) auf. Sie werden benutzt wenn das Drücken und Loslassen einzelner Tasten zuviel Programmieraufwand darstellt. Weitere Informationen in späteren Kapiteln.
Details zu den KOMMANDO_TYPEN
KOMMANDO_TYP 1 (HID-SYSTEM-KEY): DATA1..3 wird benutzt für Tastencodes.
c1; !1,0,1,0x82,0,0; s;
Diese Zeile programmiert den Button mit einer Standby-Funktion. 0x82 = HID_SYSTEM_SLEEP. Schauen Sie im Abschnitt “System key codes (hex)” in der Tastencodeliste.
Merke: Im Standby-Modus wird immer Kommandoliste 0 ausgeführt. Wenn Sie ihren Computer bei erneuter Betätigung des Buttons wieder aufwachen lassen wollen, programmieren Sie:
c0; !0,0,1,0x83,0,0; s;
Beachten Sie auch, dass nicht alle Betriebssysteme sämtliche HID-SYSTEM Kommandos verwenden/darauf reagieren. Daher ist es ratsam die SLEEP/WAKE auch als HID-CONSUMER-Tasten zusätzlich zu senden:
!1,1,4,0×32,0,0;s; => CONSUMER-sleep-Funktion (schauen Sie unter KOMMANDO_TYP 4 weiter unten für Details).
Kurze Erklärung: Wir haben das HID-CONSUMER-SLEEP Kommando auf Kommandozeile 1 programmiert, da auf Kommandozeile 0 schon das HID-SYSTEM_SLEEP Kommando programmiert wurde und wir beide Kommandos nacheinander absetzen wolen.
KOMMANDO_TYP 2 (HID-KEYBOARD-KEY = Standard Keyboard Funktion): DATA1..3 wird benutzt für Tastencodes.
c1; !1,0,2,32,0×8000,0; !1,1,2,0x4028,0x8000,0; s;
Damit programmieren Sie z.B.: SPACE (32), SPACE LOSLASSEN (0x8000), ENTER (0x4028), ENTER LOSLASSEN (0x8000). Alle Tastencodes hier.
Expertenhinweis: Man kann USB-HID-RAW Werte (anstelle der ASCII-Werte) benutzen für KOMMANDO_TYP2, indem man die RAW-codes mit 0x4000 binär verknüpft (wie es z.B. bei der ENTER-Taste im obigen Beispiel gemacht wurde). Die USB-RAW-HID Werte entsprechen Tastaturpositionen und sind für alle Sprachen gleich. Das bedeutet man muss wissen, welche Buchstabe auf dem jeweiligen Zielsystem vom Betriebssystem an einer Tastenposition ausgegeben wird. Für eine vollständige Liste der USB-RAW-HID-Codes schauen Sie bitte auf USB Organization HID usage table Seite 53ff.
KOMMANDO_TYP 3 (TYPE-STRING = Zeichenkette schreiben): DATA1 wird benutzt für den String-Index.
c1; str4=Hallo Welt!; !1,0,3,4,0,0; s;
Ergebnis obiger Kommandozeile: Wenn der Button betätigt wird, schreibt er “Hallo Welt!”. ‘strX=anymessage;’ speichert den String an Indexnummer 4. ‘s;’ speichert ihn dann endgültig im Flashspeicher.
Wenn Sie ein deutsches Windows Tastaturlayout einstellen wollen (Umlaute und Sonderzeichen korrekt), geben Sie “l1;s;” ein.
Wenn Sie eine weitere Nachricht bei erneuter Button-Betätigung absetzen wollen, setzen sie die Liste mit dem Beispiel in KOMMANDO_TYP 7 (currListIdx) fort.
KOMMANDO_TYP 4 (HID-CONSUMER-KEY = special key): DATA1..3 wird benutzt für Tastencodes.
c1; !1,0,4,0xE2,0,0; s;
Bei Betätigung des Buttons, wird der Systemsound abwechselnd STUMM und LAUT geschaltet. Entsprechend der Tastencodeliste ist 0xE2 = HID_CONSUMER_MUTE.
KOMMANDO_TYP 5/6 (5=Pause in Millisekunden/ 6=Pause in Sekunden): DATA1 wird verwendet.
c1; !1,0,6,3,0,0; !1,1,2,0×4028,0,0; s;
Bei Betätigung wartet der Button 3 Sekunden. Dann wird ENTER betätigt(=0x4028 entsprechend der Tastaturcodeliste).
KOMMANDO_TYP 7 (ENGLISCH: setCurrListIdx = set current list index = Deutsch: aktuellen Kommando-Ausführungslistenindex einstellen): DATA1 wird benutzt.
Standardmäßig wird Kommandoliste 1 ausgeführt. Dieser Wert kann dynamisch geändert werden. Beispiel: Zuerst wird in Liste 1 ein String geschrieben:
c1; str4=Hallo Welt!; !1,0,3,4,0,0;
Betätigen Sie den Button und sehen Sie “Hallo Welt!”.
Nun ändern wir einmalig die physikalische-pin-configuration des Buttons, um KOMMANDO_TYP7 (setCurrListIdx) zu ermöglichen:
@1,19,2,0,127,-1,-1,400,500;
Dieser Schritt wird weiter unten noch detaillierte erklärt. Für uns wichtig ist die 127 (1=standard), welche es ermöglicht, dass der Kommando-Ausführungs-Index (ENGLISCH abgekürzt: currListIdx) geändert werden darf.
Dann senden wir folgende Zeile:
!1,1,7,5,0,0; c5; str2=Wie geht es Dir?; !5,0,3,2,0,0; !5,1,7,1,0,0; s;
Erklärung dieser Zeile:
Es wird von Liste 1 zu Liste 5 als Ausführungslistenindex gewechselt: !1,1,7,5,0,0; Ein zusätzlicher String (“Wie geht es Dir?”) wird in stringIndex 2 gespeichert (str2=…). Dann wird dieser String in Kommandoliste Nr. 5, Zeile 0 ausgegeben: !5,0,3,2,0,0; Dann springen wir zurück zu Kommandoliste Nr. 1: !5,1,7,1,0,0; . Schließlich wird alles mit “s;” gespeichert. Betätigen Sie den Button und sehen Sie “Hallo Welt!”, press it again and see “Wie geht es Dir?”. Nächste Betätigung: “Hallo Welt!”… usw.
Wichtig: Da der Ausführungsindex (currListIdx) geändert wird, müssen Sie den Button vom USB port abziehen und wiederansstecken um die Funktion vollständig zu testen. Der currListIdx wird beim Einstecken des Buttons auf 1 gesetzt.
Merke: Die Variable “currListIdx” wird auch unter “—VARS—” gezeigt, wenn man den Buttonstatus mit “?;” abfragt.
KOMMANDO_TYP 8 (Mauscursorposition setzen und optional klicken): DATA1..3 werden verwendet.
Beispiel:
c1; !1,0,8,32256,256,1;
Ergebnis: Linker Maustastenklick oben rechts auf dem Bildschirm (Fester schließen Kreuz). Bitte beachten Sie, dass diese Funktion mit der Tastenkombination ALT-F4 zuverlässiger ausgeführt werden kann.Syntax: ![list],[index],8, [x], [y], [buttonclick];Die Bildschirmkoordinaten für beide Achsen X und Y liegen im Bereich von 0..32768. Die Koordinaten x=y=0 belassen den Cursor an der aktuellen Stelle. ButtonClick: 0=kein Klick; 1=links Klick; 2=Rechtsklick; 4=Mitteltastenklick. Um die passenden Bildschirmkoordinaten zu ermitteln, lesen sie bitte unten weiter beim Thema “Maus-Emulation”.
Wichtiger Hinweis für Firmware >= 2.2.3:Ältere Firmwares als Version 2.2.3 hatten Probleme in Android und OS-X den Mauscursor korrekt zu setzen. Ab Version 2.2.3 werden daher “virtuelle Bildschirmkoordinaten” verwenden.
Dies werden dem Betriebssystem über relative Bewegungen mitgeteilt. Das bedeutet, Sie müssen die Werte zwischen 0 und 2048 für die X/Y-Koordinaten ausprobieren.
Diese Werte sind meist sehr ähnlich zu den physischen Bildschirmkoordinaten. Sie hängen aber auch von Ihren Betriebssystem-Mauseinstellungen ab- speziell der Mauszeigerbeschleunigung.
KOMMANDO_TYP 9 (String über die integrierte serielle USB Schnittstelle ausgeben): DATA1 wird verwendet.
Beispiel:
str0=Hallo Welt!; c1; !1,0,9,2,0,0; s;
Ergebnis: Bei Betätigung des Buttons wird der String “Hallo Welt!” über die serielle Schnittstelle ausgegeben.
Tastenanschläge wiederholen bei gedrücktem Taster
Standardmäßig wird eine Kommandoliste nur einmalig ausgeführt, wenn der Button betätigt wurde, dann muss er erst wieder losgelassen werden, bevor erneut eine Liste ausgeführt wird.
Eine normale Computertastatur wiederholt den Tastenanschlag, wenn die Taste gehalten wird. Sie können diese Verhalten auch für ihren USB Pushbutton einstellen (die USB Pushbox auch – sie benötigt aber eine leicht geänderte Befehlszeile, da sie an Pin18 keinen NC-Schalter sondern einen NO-Schalter hat; mehr Details weiter unten).
Schalten Sie die Tastenanschlagswiederholung beim USB Pushbutton ein mit:
@1,19,2,0,127,127,-1,400,500;s;
Wenn Sie zu der Original/Werkseinstellung “single-shot-execution” zurück wollen, geben Sie ein: @1,19,2,0,127,-1,-1,400,500;s;
Button-sensitive Funktion
Der USB Pushbutton (nicht die USB Pushbox!) enthält einen NormallyConnected(NC)- und einen NormallyOpen(NO)-Schalter. Beide sind angeschlossen. Der NC-Taster ist deaktiviert und der NO-Taster wird standardmäßig in der physikalischen-Pin-Konfiguration verwendet.
Da der NC-Taster sensibler auf das Betätigen eines Tasters reagiert (der Button muss nicht so weit heruntergedrückt werden wie beim NO Taster), können Sie den NC-Taster aktivieren und den NO-Taster wie folgt deaktivieren:
@1,19,2,0,-1,-1,-1,400,500; @1,18,2,0,1,-1,-1,400,500;s;
Testen Sie es, indem Sie einen Buchstaben o.Ä. ausgeben! Um zur alten/Werkseinstellung zurückzukehren, geben Sie bitte für den USB Pushbutton ein:
@1,19,2,0,127,-1,-1,400,500; @1,18,2,0,-1,-1,-1,400,500;s;
Weitere Details zur physikalischen-Pin-Konfiguration finden Sie in folgendem Kapitel:
Physikalische-Pin-Konfiguration: “@…”- Kommandodetails
Jeder physikalische verbundene Taster ist intern mit dem USB Modul verbunden und kann einzeln per Kommandozeile eingestellt werden.
Die Syntax der physikalischen-Pin-Konfiguration ist wie folgt:
@[listindex], [physPin], [pinmode], [bitflags], [listTrigger], [listRepeat], [listRelease], [repeatDelayMS], [treshold_1];
- listindex: 0..3 – Listennummer für in der Konfigurationsliste
- physPin: 18..21 (A0..A3)
- mode: immer 2 (=PULL_UP-Widerstand) – Arduino pinMode Einstellung
- bitflags: byte-Wert
bit0 (1): Soll der Button bei logisch LOW (0) oder bei HIGH (1) eine Kommandoliste ausführen?
bit1 (2): STATUS: pin hat eine Kommandoliste ausgelöst (ENGLISCH: pin is triggered)
bit2 (4): STATUS: logischer pinLevel has sich geändert (LOW->HIGH oder umgekehrt)
bit3 (8): STATUS: Wiederholungsmodus ist an (ENGLISCH: repitition-hold mode) = der Button wird gehalten
bit4 (16): STATUS: Letzer logischer pin level (LOW oder HIGH)
bit5 (32): pin SOLO-Modus; wenn dieses Bit gesetzt ist und der Taster betätigt wird, kann kein andere Taste eine Kommandoliste ausführen; somit arbeitet dieser Taster exklusiv bis er wieder losgelassen wird.
bit6 (64): pin ist in digitalMode(=1) (0=analogMode ist Standard) – Notiz: Setzen sie den [treshold_1] auf 0 wenn der digitalMode=1 ist.
bit 7 (128): noAutoRelease. Setzen Sie dieses Bit, wenn Sie für diesen Pin kein AutoRelease am Listenende für alle Listen ausführen wollen. Das AutoRelease können Sie dann manuell mit dem Datenwert 0xFFFF für eine Kommandoliste ausführen. - listTrigger: Diese Kommandoliste wird ausgeführt bei Tasterbetätigung/Drücken. -1 = keine Liste ausführen. 127=Liste 1 ausführen und CMDTYPE_7 (setCurrListIdx) zulassen.
- listRepeat: Diese Kommandoliste wird ausgeführt bei Tasterhalten/Wiederholen. -1 = keine Liste ausführen. 127=Liste 1 ausführen und CMDTYPE_7 (setCurrListIdx) zulassen.
- listRelease: Diese Kommandoliste wird ausgeführt bei Tasterloslassen. -1 = keine Liste ausführen. 127=Liste 1 ausführen und CMDTYPE_7 (setCurrListIdx) zulassen.
- repeatDelayMS: Zeit in Millisekunden nach der listRepeat aufgerufen wird vom Zeitpunkt der ersten Betätigung (listTrigger). Typischerweise 400ms.
- treshold_1: 0..1024 (0..5V) – standardmäßig werden die analogen Pins A0..A3 auf dem Board verwendet. Für diese können für den HIGH-Level-Schwellwert bestimmen. Typischerweise 500 (=2.5V).
//
// phys-pin-A0-18 -> NC-Taster > GND ; auf Liste -1=disabled
// phys-pin-A1-19 -> NO-Taster->GND ; auf Liste 1
// phys-pin-A2-20 nicht verbunden ; auf Liste -1=disabled
// phys-pin-A3-21 nicht verbunden ; auf Liste -1=disabled
Notiz: Die Pin-labels ‘A0’..’A3′ auf dem Electronikboard werden in der Softwarekonfiguration mit pin Nr. 18..21 bezeichnet.
Daher haben wir standardmäßig folgende Softwarekonfiguration für die Pins des USB Pushbuttons:
@0,18,2,1,-1,-1,-1,400,500;
@1,19,2,0,127,-1,-1,400,500;
@2,20,2,0,-1,-1,-1,400,500;
@3,21,2,0,-1,-1,-1,400,500;
s;
=> Der NC switch ist mit pin18 verbunden und deaktiviert für alle Listen (-1,-1,-1).
=> Der NO switch ist mit pin19 verbunden und ist aktiviert für Liste 1 und CMDTYPE_7 ist möglich (127 statt 1 in der zweiten Zeile). Wenn hier statt 127 die Liste 1 eingesetzt wird, wird regulär Liste 1 abgearbeitet, ein Kommandolistenwechsel bei erneuter Betätigung des Taster ist allerdings nicht möglich.
=> Die anderen zwei Pins 20 und 21 sind deaktiviert.
Pin-Konfigurationsbeispiele
- Kommandoliste 1 bei Tasterbetätigung, Kommandoliste 2 beim Tasterhalten, Kommandoliste 3 bei Tasterloslassen:
@1,19,2,0,1,-1,3,400,500;
Diese Abfolge ist nützlich, wenn Sie 3 verschiedene Operationen nacheinander ausführen wollen. Z.B. eine DJ Sound-Pause:
1.) Betätigung => Kommandoliste 1: Sound stumm schalten (CONSUMER: MEDIA_VOL_MUTE)
2.) Halten => nichts tun!
3.) Loslassen => Kommandoliste 3: Sound wiedereinschalten (CONSUMER: MEDIA_VOL_MUTE)
ButtonStatePolling-Interval (bsp=xxx;)
Das ButtonStatePolling-Interval gibt an in welchen Zeitabständen in Millisekunden der Status aller Taster abgefragt und Kommandolisten ausgeführt werden. Das bedeutet, dass z.B. nur alle bsp=xx Millisekunden eine weitere Taste beim Halten ausgelöst werden kann. Der Wert wird EEPROM/Flashspeicher gesichert und beim Einstecken des Buttons wieder geladen. Standard ist: “bsp=100;”.
Beispiel für schnelle Tastenwiederholung:
- Kommandoliste 1 ausführen und CMD_TYPE7 erlauben. 50ms Wiederholung (Notiz: Sie müssen Kommandozeile 0 in Liste 1 noch programmieren):
@1,19,2,0,127,127,-1,50,500; bsp=50; s;
Standard pin-Konfiguration für “USB Pushbox”
// Mehrere Buttons:
// phys-pin-A0 to NO switch->GND ; on list 1 enabled with SOLO-mode
// phys-pin-A1 to NO switch->GND ; on list 2 enabled with SOLO-mode
// phys-pin-A2 to NO switch->GND ; on list 3 enabled with SOLO-mode
// phys-pin-A3 to NO switch->GND ; on list 4 enabled with SOLO-mode
Kopieren Sie diese Zeile in Ihr Terminalfenster um obige pin-Konfiguration zu programmieren:
@0,18,2,32,1,-1,-1,400,500; @1,19,2,32,2,-1,-1,400,500; @2,20,2,32,3,-1,-1,400,500; @3,21,2,32,4,-1,-1,400,500; s;
Pausen
Kommandozeilen können verzögert werden (ENGLISCH: delay).
Beispiele:
!1,1,5,300,0,0; => warte 300 Millisekunden in Kommandoliste 1, Zeile 1 (5=Kommando ‘delayMicroseconds’)
!1,2,6,3,0,0; => wait 3 Sekunden in Kommandoliste 1, Zeile2 (6=Kommando ‘delaySeconds’)
Maus-Emulation
Beispiel:
c1; !1,0,8,32256,256,1;
Ergebnis: Linke Maustaste wird oben rechts im Bildschirm geklickt (Ziel: Fenster schliessen).
Syntax: ![list],[index],8, [x], [y], [buttonclick];
Die Bildschirmkoordinaten für beide Achsen X und Y liegen im Bereich von 0..32768. ButtonClick: 0=kein Klick; 1=links Klick; 2=Rechtsklick; 4=Mitteltastenklick. Wenn Sie X=0 und Y=0 setzen, wird der Cursor nicht neu positioniert. Somit können Sie mit X=0, Y=0 Mausklicks an der aktuellen Cursorposition ausführen.
Bitte beachten Sie, dass diese Funktion mit der Tastenkombination ALT-F4 in Windows zuverlässiger ausgeführt werden kann. Es wird empfohlen mit ALT und/oder TAB und anderen Tastenkombination zu navigieren, bevor die Maus-Emulation verwendet wird, da Fensterpositionen in Windows nur bei maximierten Fenster fest sind.
Bildschirmkoordinaten testen
Da die Bildschirmkoordinaten von 0..32768 für die Achsen relativ unüblich sind bzw. nicht der physikalischen Auflösung entsprechen, können Sie diese mit den folgenden Kommandos testen/ermitteln:
- mx+; => navigiere in x-Achse nach rechts – drücken Sie den Button zum bewegen des Cursors
- mx-; => navigiere in x-Achse nach links- drücken Sie den Button zum bewegen des Cursors
- my+; => navigiere in y-Achse nach unten – drücken Sie den Button zum bewegen des Cursors
- my-; => navigiere in y-Achse nach oben – drücken Sie den Button zum bewegen des Cursors
- ms+; / ms-; => größere/kleinere Schritte in x/y
- m0; => Testmodus stoppen
Standby-Modus
Kommandoliste 1 wird standardmäßig ausgeführt, wenn der Computer an ist und in der Physikalischen-Pin-Konfiguration keine anderen Werte als 1 oder 127 stehen bei listTrigger stehen.
Kommandoliste 0 wird standardmäßig im Standby-Mode ausgeführt, wenn der Computer den USB Port des Buttons korrekt in den USB S3 Modus versetzt hat.
Notiz: Die STANDBY und WAKE sind unterschiedlich in Windows, Linux, OS-X und anderen Betriebssystemen. Nicht jede Klasse (HID-SYSTEM/ HID-CONSUMER) ist erfolgreich. Sie sollten mit seriellen Terminal angeschlossen verschiedene Kombinationen testen.
Tastaturlayouts
Für CMDTYPE_3 (typeSTRING) ist das Standard-Tastaturlayout ‘English_default’ (“l2;”). Folgende Layouts werden noch unterstützt:
l1; für das deutsche Windows CP1252 Tastaturlayout. l0; für das deutsche DOS-Latin 1 Tastaturlayout. l2; das englische Tastaturlayout (default setting)
Vergessen Sie nicht mit “s;” die neue Layout-Einstellung zu speichern. Weitere Tastaturlayouts können auf Anfrage (Mail an: info@main.grauonline.de) hinzugefügt werden.
Firmware-Update/ Werkseinstellungen
Bitte laden Sie die Firmware für den USB Pushbutton oder die USB Pushbox herunter. Nach dem Download packen Sie die ZIP-Datei aus, stecken Sie den Button in den USB Port und führen die Datei “Please click here…” aus.
Notiz: Die programmierten Einstellungen (Kommandoliste, Strings, Pin-Konfigurationen) werden NICHT überschrieben bei einem Firmware-Update.
Werkseinstellungen:
Sie können den wie oben beschrieben an einem seriellen Terminal anschliessen und geben dann “factory;” ein, um ihn auf Werkseinstellungen zurückzusetzen.
Die Werkseinstellung beinhaltet als Beispielfunktion die “ENTER”-Taste ohne Wiederholung beim Halten.
Mehr Kommandobeispiele
Löschen Sie Kommandoliste 1 mit: ‘c1;’. Dann wählen Sie ihre benötigte Funktion:
Allgemeine Windows Funktionen:
- Windows Taskmanager öffnen (CTRL+SHIFT+ESC): !1,0,2,0×2000,0x2001,0x4029;
- Windows: Fenster iterieren (CTRL+ALT+ESC): !1,0,2,0×2000,0x2002,0x4029;
- drei ENTER hintereinander mit Loslassen: !1,0,2,0xC028,0xC028,0xC028;
- linke Windowstaste (ENGLISCH: OS-Key): !1,0,2,0×2003,0,0;
- Windows Desktop/Anwendung wechseln (OS-KEY + d): !1,0,2,0×2003,100,0;
- Windows ausloggen (OS-Key + l): !1,0,2,0×2003,108,0;
- Windows Disk Management öffnen (OS-KEY + r ; 500ms delay ; diskmgmt.msc ; ENTER):
!1,0,2,0×2003,0x15,0x8000; !1,1,5,500,0,0; str0=diskmgmt.msc; !1,2,3,0,0,0; !1,3,2,0xC028,0,0; - Windows Skype öffnen (OS-Key + r ; 500ms delay ; <skypePath> ; ENTER):
!1,0,2,0×2003,0x15,0x8000; !1,1,5,500,0,0; str1=”C:\Program Files (x86)\Microsoft\Skype for Desktop\Skype.exe”; !1,2,3,1,0,0; !1,3,2,0×4028,0,0;
System Power/Standby/Wake Funktionen:
- HID System/Consumer sleep: !1,0,1,0×82,0,0; !1,1,4,0×32,0,0;
- HID System wake up: !0,0,1,0×83,0,0;
- HID System/Consumer powerdown: !1,0,1,0×81,0,0; !1,1,4,0×30,0,0;
- OS-X powerdown: !1,0,2,0×2000,0,0;!1,1,1,0×81,0xffff,0;!1,2,5,500,0,0;!1,3,2,0xC028,0,0;
- OS-X standby/wake: !1,0,2,0×2000,0x2001,0;!1,1,1,0×81,0,0;!1,2,7,0,0,0;!0,0,2,0×2000,0,0;!0,1,7,1,0,0;
Browser Funktionen:
- Neues Fenster öffnen (CTRL-n): !1,0,2,0×2000,110,0;
- Neuen Tab öffnen (CTRL-t): !1,0,2,0×2000,116,0;
- Firefox letzten Tab öffnen (CTRL-SHIFT-t): !1,0,2,0×2000,0x2001,116;
Sound Funktionen:
- Stumm/Laut wechseln bei Betätigung jeweils: !1,0,4,0xE2,0,0;
- Stumm beim Drücken, Laut beim Loslassen: c1;c3; @1,19,2,0,1,-1,3,400,500; !1,0,4,0xE2,0,0; !3,0,4,0xE2,0,0;
- Play/replay Sound in VLC: (OS-KEY + r; 500ms delay; VLC <soundpath>; ENTER; change command list to 2; Rewind in VLC with p ):
!1,0,2,0×2003,0x15,0x8000; !1,1,5,500,0,0; str0=vlc “C:\Soundsamples\pushbutton.mp3”; !1,2,3,0,0,0; !1,3,2,0×4028,0,0; !1,4,7,2,0,0; !2,0,2,112,0,0; - Volume Hoch (mit Wiederholung beim Halten): !1,0,4,0xE9,0,0; @1,19,2,0,127,127,-1,400,500;
- Volume Heruntern (mit Wiederholung beim Halten): !1,0,4,0xEA,0,0; @1,19,2,0,127,127,-1,400,500;
Powerpoint:
- LEERTASTE: !1,0,2,32,0,0;
- RETURN/ENTER: !1,0,2,0×4028,0,0;
- Pfeil rechts: !1,0,2,0x404F,0,0;
- Pfeil links: !1,0,2,0×4050,0,0;
- F5 um die Präsentation (neu zu) starten: !1,0,2,0x403E,0,0;
- Shift-F5 um von aktueller Folie zu starten: !1,0,2,0×2001,0x403E,0;
Der Taster spricht mit dir:
- Zwei Sätze abwechseln ausgeben: c1;c2; @1,19,2,0,127,-1,-1,400,500; str0=Hello my friend!; !1,0,3,0,0,0; !1,1,2,0xC028,0,0; !1,2,7,2,0,0; str1=Nice to meet you!; !2,0,3,1,0,0; !2,1,2,0xC028,0,0; !2,2,7,1,0,0;
Wichtig: Testen Sie die Funktion in Ihrer Zielanwendung. Fügen Sie evtl. Pausen hinzu (DELAY-Kommandos), damit der Computer die jeweilige Operation ausführen kann. Nach Fertigstellung der Programmierung, speichern Sie die Einstellung mit “s;” ab. Dann ziehen Sie den USB Stecker ab und schließen Ihn bitte wieder an und testen erneut.