2014-06-16 2 views
0

Arduino Nano는 내 컴퓨터에 연결된 DC 모터를 제어하고 C#으로 제어됩니다. 유일한 문제는 현재 내 컴퓨터에서 작동한다는 것입니다. 다른 PC에 연결하면 동일한 직렬 포트를 사용하지 않으면 작동하지 않습니다. 그래서 COM 포트를 "자체 설정"하고 싶습니다. 할 수 있습니까? 그렇지 않다면 COM 포트 번호를 입력하기 위해 다른 양식을 만들고 싶었지만 가능한 경우이를 피하고 싶습니다. 미리 감사드립니다.C#에서 COM 직렬 포트를 자동으로 조정

public partial class Form1 : Form 
{ 
    String s = "0"; 
    string brojPorta = "COM5"; 
    int vrijednost = 0; 
    System.IO.Ports.SerialPort serialPort1; 
    public Form1() 
    { 
     InitializeComponent(); 
     System.ComponentModel.IContainer components = 
    new System.ComponentModel.Container(); 
     serialPort1 = new System.IO.Ports.SerialPort(components); 
     serialPort1.PortName = brojPorta; 
     serialPort1.BaudRate = 9600; 
     serialPort1.Open(); 
    } 
    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (serialPort1.IsOpen) serialPort1.Close(); 
    } 

    private void Klizac1_Scroll(object sender, ScrollEventArgs e) 
    { 
     vrijednost = Klizac1.Value; 
     s = (vrijednost * 10.24).ToString(); 
     serialPort1.Write(s + '\n'); 
     label1.Text = ((vrijednost-50)*2).ToString()+"%"; 
    } 

    private void btn_Zaustavi_Click(object sender, EventArgs e) 
    { 
     Klizac1.Value = 50; 
     label1.Text = "0"; 
     s = (Klizac1.Value * 10.24).ToString(); 
     serialPort1.Write(s + '\n'); 
    } 
} 
+0

COM 포트를 통해 아두 이노 이야기 할 수있는 능력은 디버깅 및 개발을위한 것입니다. 이식성이있는 것은 아닙니다. 그러나 사용 가능한 COM 포트를 '검색하여'모양을 기반으로 선택할 수 있습니다. Arduino 용 서버를 실제로 만들어야하는 경우 자동 바인딩이 항상 작동하지는 않기 때문에 사용자 선택 기능을 추가해야합니다. 예를 들어, ArduCopter 프로젝트의 Mission Planner에서 찾아보십시오. 자동 바인드를 시도하지만 거의 작동하지 않습니다. – Jasmine

+0

Nana에 대한 코드를 작성하는 경우 반환하는 쿼리 명령을 포함하면 식별자가 다시 전송됩니다. 각 포트가 열리면 문의를 보내고 응답을 확인하십시오. 다른 마이크로 컨트롤러를 프로그래밍 할 때이 기술을 사용했습니다. 단점은 연결되지 않은 COM 포트가 시간 초과에 약간의 시간이 걸리는 것입니다. – dbasnett

답변

1

먼저 모든 포트를 열거 할 것이다 : 이 내 코드입니다. 이 질문을보십시오 : How to find available COM ports?

그런 다음 찾을 때까지 각 포트에 제한 시간으로 연결을 시도해야합니다.

드롭 다운 목록에서 사용 가능한 포트를 열거하고 사용자가 연결된 포트를 선택하게하는 것이 더 신중한 시나리오입니다.

0

는 여기에 몇 가지 함정이있을 수 있지만,이 예제가 작동 나타납니다

/*Use the WMI to search for the Arduino device on a serial port driver 
and assign the serial port to the device*/ 

ManagementObjectSearcher SerialPortSearcher = 
    new ManagementObjectSearcher(
    "root\\CIMV2", 
    "SELECT * FROM Win32_SerialPort"); 

foreach (ManagementObject SerialPortObject in SerialPortSearcher.Get()) 
{ 
    if (SerialPortObject["Description"].ToString() == "Arduino Mega 2560") 
    { 
     SerialPort _serialPort = 
      new SerialPort(SerialPortObject["DeviceID"].ToString()); 
     break; 
    } 
} 
관련 문제