Über die Serielle Verbindung werden Bytes ausgetauscht.
Wenn du diese Bytes als Text interpretieren willst, musst du einen Zeichensatz festlegen, der bestimmt, welche(s) Byte(s) welchem Buchstaben entsprechen.
Bei ASCII z.B. 0x41 = "A" usw.
Wenn du einen Zeichensatz hast, der Byte-Kodierungen für CTRL-X und ALT-F3 enthält, und beide Seiten sich auf diesen einigen, bist du fertig.
eingeben und kommt so auf insgesamt 32 Möglichkeiten (0x00 bis 0x1F).
Für andere Tasten gibt es keine definierten Kombinationen mit CTRL, weder mit Zahlen, anderen Sonderzeichen noch Kleinbuchstaben.
Tasten wie ALT und Kombinationen damit sind nicht definiert, deren Interpretation hängt, wie schon von "hmm" beschrieben, vom verwendeten Terminalprogramm ab.
Das ist ja alles schön und gut, klärt aber nicht die Frage des TO nach der Empfangsmöglichkeit. Dazu muss man wissen, welche(s) Zeichen beim Drücken dieser Tastenkombinationen über die serielle Schnittstelle geschickt werden.
Einfachster Ansatz: Tastatur mit serieller Schnittstelle an den Arduono anschließen und gucken, welche Bytes das UART empfängt. Dann ist auch klar auf welche Bytes die Auswertung ansprechen muss. Hauptkunststück wird sein, eine Tastatur mit einer seriellen Schnittstelle (im Sinne des Arduono Uno R3) zu finden.
Einfachster Ansatz: Tastatur mit serieller Schnittstelle an den Arduono
anschließen
Und wo bekommst Du eine Tastatur mit serieller Schnittstelle her?
PC-Tastaturen (die, die keine USB-Tastaturen sind) verwenden eine synchrone serielle Schnittstelle und übertragen über diese sog. Scan-Codes, die nichts mit dem eigentlichen Zeichencode zu tun haben, und zwar sowohl, wenn eine Taste gedrückt als auch wenn sie wieder losgelassen wird.
Ich entnehme aber den Ausführungen des Threadstarters, daß er seinen Arduino über eine serielle Schnittstelle mit einem PC verbinden will, auf dem ein (nicht näher genanntes) Terminalprogramm läuft, und /nicht/, daß er eine PC-Tastatur an seinem Arduino betreiben will.
Das ist ja alles schön und gut, klärt aber nicht die Frage des TO nach
der Empfangsmöglichkeit. Dazu muss man wissen, welche(s) Zeichen beim
Drücken dieser Tastenkombinationen über die serielle Schnittstelle
geschickt werden.
Richtig. Und genau diese Zuordnung zwischen gedrückter Taste (bzw. Taskenkombination) und gesendetem Code definiert die Terminal-Emulation des Terminalprogramms. Die meisten Terminalprogramme können mehrere davon. Ein Klassiker ist dabei VT100.
Diese Emulation und viele weitere mappen die Tastenkombination CTRL + <Buchstabe> auf die ASCII-Steuerzeichen 0x01 .. 0x1A (für CTRL + C bespielsweise auf 0x03 = ETX). Die könnte man als kleinsten gemeinsamen Nenner zumindest in Erwägung ziehen.
danke für den Input; Da habe ich was zu lesen;).
Ich hatte allerdings es versäumt zu erwähnen das ich für erste Test ausschließlich die Arduino-IDE 2.3.2 (Eingabe-Zeile im Seriellen Monitor) verwende. Ob diese nun die 'richtige' Codierung übernimmt, entzieht sich meiner Kenntnis. Mir ist nur aufgefallen, dass vom 'CTRL+X' nur das 'X' ankam, daher die Fragestellung.
Diese Emulation und viele weitere mappen die Tastenkombination ...
Ohne mich allzusehr aus dem Fenster zu lehnen, das dürfte /jede/ Terminalemulation machen. Wie schon ausführlich dargelegt, ist das eine bald 60 Jahre alte Konvention.
Mir ist nur aufgefallen, dass vom
'CTRL+X' nur das 'X' ankam, daher die Fragestellung.
Und Du hast die Tasten auch /gleichzeitig/, und nicht nacheinander gedrückt? (genauer: Ctrl runterdrücken, unten lassen, X drücken, X loslassen Ctrl loslassen)
Dann nimm ein richtiges Terminalprogramm, wie z.B. Teraterm, und lass' das "Terminal"-Fenster der Arduino-IDE links liegen.
Das von manchen hier hartnäckig als Terminalprogramm bezeichnete hterm ist hingegen /kein/ Terminalprogramm, da es keinerlei Terminal emuliert.
Tja, keine Arme, keine Kekse. Man müsste die 'IBM' Tastatur direkt an den uC anschliessen und dann eben nicht RS232 seriell sondern nach PS/2 oder USB auswerten. Vielleicht noch über Bluetooth wenn man so ein Funkmodul spendiert (nicht den USB Dongle der Tastatur, denn dafür müsste man ein USB Host nachprogrammieren, zu viel für Arduinos.
Oder auf dem PC an dem die PC Tastatur hängt ein Programm starten, dass ALLE Tastatureingaben captured und die Scancodes an den uC seriell sendet. Dann ist der PC so lange (bis man das Programm mit der Maus beendet) halt nicht mehr brauchbar.
wie kann man mit den 'Arduino Uno R3' unter Nutzung von Serial,
spezielle Tastaturkombination wie 'CTRL + X' oder 'ALT + F3' empfangen
und auswerten?
Warum willst Du sowas verrücktes tun?
Diese Kombinationen dienen dazu, um von OS (Windows) ausgewertet zu werden und eben nicht über die UART gesendet zu werden.
Diese Kombinationen dienen dazu, um von OS (Windows) ausgewertet zu
werden und eben nicht über die UART gesendet zu werden.
Das Serielle Terminal war ursprünglich dafür gedacht, dass der Computer und damit das OS auf der anderen Seite des Kabels liegt. Insofern machte es Sinn, diese Tastenkombinationen mit zu übertragen, damit eben das OS diese auswerten kann...
Braucht natürlich einen echten Terminal Emulator, und nicht nur eine UART<->Konsole Debughilfe in der IDE. Und ist wie schon mehrfach beschrieben auf die Tasten beschränkt, die vor ~60 Jahren so üblich waren, wenn man kompatibel bleiben will.
Wenn nicht, hätte man z.B. die Option auf "xterm" statt VT100 zu gehen, und kann dann z.B. auch die Maus benutzen.
(Arduino sendet "ESC [ ? 1000 h", das Terminal sendet dann Maus-Klicks/Releases mit Koordinaten per ESC-Sequenz ESC [ M <Button> <X> <Y> an den Arduino, in "button" sind auch die Modifier-Keys enhalten, d.H. du kannst "Shift-Klick" usw. erkennen)
Danke nochmal:)
Ich gebe ja zu das mit dem 'Alt+F3' ist unglücklich kommuniziert. Vergesst es also bitte.
Ich schau mal wie sich die Kommunikation mit einem anderen Programm darstellt.
Das von manchen hier hartnäckig als Terminalprogramm bezeichnete hterm
ist hingegen /kein/ Terminalprogramm, da es keinerlei Terminal emuliert.
Seit wann ist es notwendige Voraussetzung für ein Terminalprogramm, irgendein (historisches Hardware-) Terminal emulieren zu können?
Natürlich ist hterm ein Terminalprogramm. Man kann damit IO mit einem entfernten Peer betreiben. Mehr muss ein Terminalprogramm nicht können, um ein Terminalprogramm zu sein. Und mehr konnten auch frühe TTY-Terminals nicht.
Alles andere kommt nur durch Konvention dazu. Woraus insbesondere auch die Tatsache resultiert, dass es so viele verschiedene Terminals gab und damit heute so viele Terminalemulationen mit jeweils noch erheblicher Konfugierbarkeit im Detail.
hterm wurde halt mit anderer Zielstellung entwickelt als spätere Hardwareterminals. Dementsprechend bietet es andere Funktionalitäten, statt sklavisch die Konventionen vergangener Epochen nachzustricken.
Dass das, was hterm bietet, auch gebraucht wird, zeigt die Beliebtheit von hterm.
Seit wann ist es notwendige Voraussetzung für ein Terminalprogramm,
irgendein (historisches Hardware-) Terminal emulieren zu können?
Weil es sonst kein Terminal ist.
Die Funktion "ein Terminal emulieren" ist genau das, was ein Terminalprogramm ausmacht. Emuliert ein Programm kein Terminal, ist es kein Terminalprogramm.
da steht im Prinzip genau das
drin, was ich meinte...
Wenn der TE eine Software braucht, die auf seinem Rechner läuft, und Tastendrücke wie Ctrl-X über die Serielle Schnittstelle an einen Arduino sendet, aber seine jetzige das nicht kann, dann braucht er eine andere. Jede Software die üblicherweise als "Terminal-Emulation" benannt wird, macht das. Einfach weil sie ein historisches Terminal emuliert, wo das Standardfunktionalität war.
Du kannst dem TE natürlich auch ein Kassenterminal oder ein Flughafenterminal als Alternative vorschlagen, nur wird ihm das nicht weiterhelfen. Auch ein Flughafenterminal-Emulator nicht.
Und eine Terminal-Emulations-Software, die irgendein Terminal (egal ob real, historisch, oder rein der Phantasie entsprungen) emuliert was keine Ctrl-Taste hat(te), hilft ihm auch nicht, weil der Emulation dann wohl das gewünschte Feature fehlt.
Wenn der TE eine Software braucht, die auf seinem Rechner läuft, und
Tastendrücke wie Ctrl-X über die Serielle Schnittstelle an einen Arduino
sendet, aber seine jetzige das nicht kann, dann braucht er eine andere.
Ja, das ist unstrittig.
Jede Software die üblicherweise als "Terminal-Emulation" benannt wird,
macht das.
Nein!
Einfach weil sie ein historisches Terminal emuliert, wo das
Standardfunktionalität war.
Das kommt dann halt drauf an, welches genau man gewählt hat. Und oft auch noch: in welcher genauen Ausprägung.
hterm überträgt kein Ctrl-X. hterm bezeichnet sich selber als "Terminal", NICHT als Terminal-Emulation.
Man könnte ein Programm schreiben, was das Verhalten von hterm emuliert, und das dann als "Terminal-Emulation" vertreiben. Wäre halt stark irreführend, weil es sich anders als 99,99% aller anderen Terminal-Emulationen verhält.
Wenn du einen "Windows-Emulator" runterlädst, erwartest du doch auch, dass der Microsoft Windows emuliert, und keine Spezial-Software zum Nachahmen des Fensterheber-Kurbelgeräusches eines 1966er Ford Mustang.
Das kommt dann halt drauf an, welches genau man gewählt hat.
Dann nenn' mir doch mal ein Terminal, das das nicht macht. Ctrl-Buchstabe in korrespondierende Control-Codes übersetzen. Und ich meine ein /Terminal/, nicht Deine Bibellesungsinterpretation.
Also: Welche Hardwarekiste mit Tastatur und Bildschirm (oder Druckwerk), die als /Terminal/ für den Betrieb an einem Computer gebaut wurde, macht es nicht?
Quatsch. Man wechsele für die Eingabe temporär auf Hex, tippe nacheinander auf die Tasten "1" und "8" und alles wird gut. Jeder dümmliche Terminal-Server auf der Gegenseite, der halt darauf geeicht ist, ein Byte mit dem Wert 0x18 für den Tastendruck Ctrl-X zu empfangen, wird das akzeptieren.
Tsss. Ich unterhalte mich offensichtlich mit Leuten, die das Problem (und die recht generelle Lösung, die hterm dafür bietet) überhaupt nicht verstehen...
Man wechsele für die Eingabe temporär auf Hex, tippe
nacheinander auf die Tasten "1" und "8" und alles wird gut.
Man hat den Leuten in den Anfängen der Computerzeit ja viel zugemutet, aber das wäre selbst damals zuviel gewesen...
Das Handbuch sagt: Drücke Ctrl-X, das Programm zeigt an, drücke Ctrl-X, die Tastatur hat sowohl eine Ctrl- als auch eine X-Taste, aber nein, du musst den Eingabemodus umschalten, die schicke Tabelle konsultieren, die neben dem Monitor klebt, und einen Hex-Code eintippen... Famos.
Ja, es gibt gute Gründe, warum hterm mit den seit über einem halben Jahrhundert üblichen Konventionen von seriellen Computer-Terminals und Terminal-Emulatoren bricht.
Genau das macht es für viele Anwendungsfälle zu einem sehr wertvollen Werkzeug.
Aber: Exakt das macht es auch für den "Terminal-Emulator"-Anwendungsfall unbequem bis unbrauchbar.
Also: Einfach das richtige Werkzeug für die anstehende Aufgabe nehmen.
Ich benutze noch das gute alte HyperTerminal aus Windows-XP. Besondere Steuerzeichen außer die üblichen \n, \r, \b brauche ich nicht, alles geht über einen Stringparser.