我正在尝试通过串行连接发送包含回车符(表示不按回车键)的消息。如果我在打开的串行连接下按回车键,它会起作用,但我还没有找到在消息正文中成功表示回车符的方法。
例如,以下工作可以通过 USB(屏幕/dev/tty.usbmodemFA1331 9600)或使用 Arduino 串行监视器打开与我的 Arduino 的串行连接:
SIOP v1.0 输出
内容类型:文本/UTF-8
值:“Hello World!”
/结尾
(请注意,我一次输入一行,然后在每行后按键盘上的回车键)。
但以下尝试不会:
- SIOP v1.0 输出\rContentType:Text/UTF-8\rValue:“Hello slasr!”\r/END
- SIOP v1.0 OUTPUT^MContentType: Text/UTF-8^MValue: "Hello m!"^M/END
- SIOP v1.0 输出/rContentType:文本/UTF-80x0DValue:“Hello World!”0x0D/END
谢谢!
诸如“\r”之类的特殊文本符号必须由输入或输出程序(例如,由printf()字符串的编译器)转换为单个控制字符(即字节值)。
这不会自动或自动发生。
当然,诸如屏幕之类的终端仿真程序无法识别或对输入文本执行此类转换。
您似乎试图做的事情被误导了。
典型的终端仿真程序,如minicom(可能还有screen,但我不确定,因为我从未使用过它)在输入时传输文字字符。
终端程序可以具有行(或块)模式,可以在其中进行本地行编辑,并且(缓冲的)行(或块)文本仅在按下
Enter
或按下某个SEND
键后才传输。但这可能不是您正在使用的操作模式。典型的终端仿真程序以字符模式而不是行/块模式运行。(请注意,这与 termios 或规范与原始模式不同。)
因此,尝试“在消息正文中表示回车符……”(当您在键盘上键入时)仅仅意味着您试图抑制正在执行的本地光标的可见移动。您的目标没有完成其他任何事情,因为字符的传输不会被延迟(在当前操作模式下)。
您可以通过连接示波器或另一个终端来确认您试图完成的事情是徒劳的。您应该能够验证您的“消息”是否按键入一次输出字符/字节,而不是作为“行”或消息块。
如果您仍然坚持将消息作为一个文本块发送,minicom可以发送纯文本文件。