通过串口发送“ENTER”键

嗨,我想发送一些命令到我的设备,通过串口连接。 怎么发送?

例如,我在谷歌搜索中找到了这个,但对我来说这没用。

Control + E是5的键盘快捷键,因此:

serial.Write(new byte[]{ 5 }, 0, 1); 

输入或换行的微软版本是\r\n ,它是hex的0x0d 0x0a

  • \r是回车

    在shell或打印机中,这会将光标放回到行的开头。

  • \n是换行符

    将光标放在下面一行,在某些shell中,这也将光标放在下一行的开头。 打印机只是简单地滚动纸张。

对历史课来说太多了。 当前的Windows系统仍然使用这些字符来表示行结束。 按Enter键时,Dos生成此代码。

关键代码有点不同。 从esc键开始是1. 输入是28。

来源: 来自www.comptechdoc.org的linux hlkeycodes

要发送回车键,您必须使用

 serial.Write(new byte[]{13,10}, 0, 2); 

假设您的Control + E语法正确。 输入键被解释并通常作为CR-LF保存在文件中。 但是,根据您的设备,它可能只需要CR=13LF=10 。 您应该尝试使用设备的所有3种组合来查看它所期望的内容。

如果您要查找回车键的实际扫描代码 ,则在PC 102/104键盘上为“43”。 根据您使用的实际计算机,可能会有所不同。 例如,在Commodore 64上, Return键的扫描码是“1”,它在PC键盘上使用Enter

多谢你们。

这有效:

 serial.Write("\r\n") 

注意:如果你想通过串口发送命令,我使用下面的行为我工作。

 serial.Write("your_command\r\n"); 

以前的答案告诉你的是如何发送NEWLINE字符 – 这与“输入密钥”不同。 如果您要做的是实际向远程机器指示键盘上的“输入键”已被按下,这完全不同,并且可能无法实现,具体取决于您的操作系统和硬件。

这取决于您的设备的ENTER。 在Windows中它是CRLF(13然后是10),Linux是LF(只有10.)这只是你的设备所期望的问题,因为它无法看到ENTER,只是“字节10,字节13,字节无论如何…… “。

您需要发送命令CR(回车)和LF(换行,或换行)。

这只是发送你的命令加上CR和LF,如下所示:

 string command = "myCommand"; port.write(string.format("{0}\r\n", command)); 

\ r \ n = CR + LF – >在Windows中用作换行符

我在字符串中添加“\ r \ n”并调用Write()方法,它适用于我。 例如,

serial.Write("abcd\r\n");

要发送回车键,您必须使用SerialPort.NewLine属性 – 表示行尾的值

 _serialPort = new SerialPort(); // ... this COM port parameters _serialPort.NewLine = "\r"; // "\r" - CR (0x0D); "\r\n" - CRLF (0x0D 0x0A) try { _serialPort.Open(); } catch (Exception ex) { Console.Write(ex.Message); return; } _serialPort.WriteLine("Send string"); // Writes `Send string` string and the `NewLine` value to serial port // or _serialPort.WriteLine((char)2 + "VWD:040" + (char)3); // Writes `VWD:040` string and the `NewLine` value to serial port 

有关使用串行端口的完整示例,请参见此处 。