2014-06-19 103 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端口。