2014-06-19 87 views
0

我在不同的系统上执行以下代码。我需要一个通用的COMPORT参数,以便代码可以在所有系统上正常运行,具体取决于该设备所涉及的COM PORT。如何通过命令行解决COM端口问题

C:\ arduino \ setup \ hardware/tools/avr/bin/avrdude -CC:\ arduino \ setup \ hardware/tools/avr /etc/avrdude.conf -v -v -v -v -patmega328p - carduino -P \。 \ COM121 -b115200 -D -Uflash:w:C:\ Users \ XYZ \ ABC \ files \ abc.cpp.hex:i

回答

0

我假设你正在使用Windows,并希望你的命令能够在不同的Windows机器上工作,即使Arduinos在不同的COM端口上。现在大多数Arduinos都使用usbser.sys。如果您认为只有一个设备使用usbser.sys插入系统,那就是Arduino,那么可以通过一个名为USBSER000的对象访问Arduino。您可以将\\.\USBSER000作为AVRDUDE的端口参数传递给Arduino的端口。

你必须正确地逃脱字符串,所以你写的实际命令会是这样的:

avrdude -P\\\\.\\USBSER000 ... 

其他的事情可以帮助你:

  • 你知道你可以改变Arduino的端口是否来自设备管理器?我更愿意将所有的Arduino都保存在COM7上。
  • 您可以在每台机器上设置一个环境变量来表示Arduino所在的端口,然后在您的命令中使用类似%VARNAME%$VARNAME的内容引用它。
0

您是否尝试过检查波特率?可能是造成这个问题。如果使用较低的波特率可能会更好。此外,波特率应该在您的代码和COM端口配置中匹配。 (检查设备管理器)

+0

其实我想在不同的系统上使用这个命令。但不同的系统将有不同的COM端口COM121或COM51等,所以我需要一个通用的命令,以便我不需要在每个系统上更改代码 –

0

由于我无权访问评论,因此我将回答假设您正在使用WINDOWS操作系统尝试此操作。

首先,为该请求编写实用程序会稍微简单一些,因为在命令行中没有任何特定设置可以在不同系统上说明所有可能的COM端口设置。

在windows下,没有'别名'命令将通用名称与配置项目(如COM端口)相关联,因此无法应用通用名称。您可以编写一个FOR循环,并将其置于CMD或BAT文件中,其逻辑尝试将文本回显至典型COM端口名称列表,例如COM1,COM2等。

如果您在CMD中键入此行或命令提示窗口在MS-DOS或Windows:

echo "This is a test" > COM1: 

你要么没有得到响应(良好)或OS将回复:

The system cannot find the file specified. 

后者信号是没有这样的装置。 FOR循环可以测试不会返回错误的第一个设备的迭代。这里的问题是,在具有多个串行端口的系统上(如常见),您的代码将尝试找到它的FIRST设备。如果用户将串行电缆连接到不同的端口,它将不起作用。

这就是为什么我建议你写一个实用程序。该实用程序可以清点可用串行端口的列表,然后尝试使用查询询问设备的每个端口。这是我知道的唯一方法,可以保证你想使用的'命令行'在所有系统中都是统一的。

+0

我理解这个概念,但在我的系统上可能使用多个端口。对于前面的COM121,COM11都被使用,并且在测试上面的命令时,他们两个都没有回应。但是如何检测我的arduino设备连接到121而不是11. –

+0

这就是为什么我说写一个实用程序是唯一的方法来确保你有正确的端口。如果可以对Arduino进行编程,我建议写一小段代码来响应通过端口传来的讯问。所以在PC端,你会发送一个唯一的字符串到COM端口。在Arduino上,您有一位收听者正在观看该串的COM端口流量。当它“看到”字符串时,它通过发送回复来响应 - 或者回应字符串本身。 PC实用程序中的逻辑可以看到响应,并可以通知调用应用程序,或者在这种情况下通知shell脚本。 – Redgum

+0

非常感谢。你能建议我一个实施它的链接吗? –

0

David Grayson你的回答很棒。 我也想出一些溶液:

using System; 
using System.IO.Ports; 
public class ports 
{ 
static public void Main() 
{ 
    var portNames = SerialPort.GetPortNames(); 
     foreach(var port in portNames) { 
     Console.WriteLine (port); 
} 
} 
} 

编译和执行使用对命令提示命令通过单C#编译该代码

mcs ports.cs 
mono ports.exe 

现在ports.exe可以在任何系统中用于检索列表可用的COM端口。