2016-09-09 2 views
1

Arduino를 사용하여 COM15 (마이크로 USB를 통해)로 텍스트 데이터를 보냅니다. 바탕 화면에서 C# 응용 프로그램의 데이터를 읽으려고합니다. 그러나 콘솔을 실행하면 콘솔에 아무것도 표시되지 않고 "string s = myPort.ReadLine()"줄에 프로그램이 고정됩니다. (COM15로 데이터를 전송)SerialPort.ReadLine()은 Arduino에서 보낸 USB COM 포트에서 데이터를 읽지 않습니다.

static void Main(string[] args) 
{ 
    var myPort = new SerialPort("COM15", 115200); 
    myPort.Open(); 
    while (true) 
    { 
     var s = myPort.ReadLine(); // execution stucks here waiting forever! 
     Console.WriteLine(s); 
    } 
} 

는 다음의 Arduino 코드 :

다음

내 C# 프로그램이다

int counter = 1; 
void setup() { 
    // put your setup code here, to run once: 
Serial.begin(115200); 
} 

void loop() { 
    // put your main code here, to run repeatedly: 
Serial.println(" Data Loop = " + String(counter)); 
counter++; 
delay(500); 
} 

데이터를 보여주는가 아두 이노 직렬 모니터 COM15에서 수신되고 . 또한 COM 포트를 읽고 포트에서 데이터를 사용할 수 있는지 확인하는 다른 소프트웨어를 사용해 보았습니다.

답변

3

, 나는 내 문제를 해결하고 성공적으로 COM에서 읽을 수 있었다. DTR "은 데이터 터미널 준비"의 약자 Wikipedia에있어서

데이터 터미널 준비 (DTR)는 데이터 단말 장치 (DTE)로부터 송신 된 RS-232 직렬 통신의 제어 신호하는 등 인 컴퓨터, 데이터 통신 장비 (DCE) (예 : 모뎀)를 사용하여 터미널이 통신 할 준비가되었음을 나타내고 모뎀이 통신 채널을 시작할 수 있음을 나타냅니다.

1

포트를 올바르게 읽지 못했습니다.

다음은 comport에서 입력 한 데이터를 올바르게 읽는 방법의 예입니다.

myPort.DtrEnable = true; 

당신은 DTR 플래그 무엇인지 요청할 수 있습니다 : myPort.Open() 명령을하기 전에 다음 줄을 추가하여

public static void Main() 
{ 
    SerialPort mySerialPort = new SerialPort("COM1"); 

    mySerialPort.BaudRate = 9600; 
    mySerialPort.Parity = Parity.None; 
    mySerialPort.StopBits = StopBits.One; 
    mySerialPort.DataBits = 8; 
    mySerialPort.Handshake = Handshake.None; // Some device needs a different handshake. 

    mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 

    mySerialPort.Open(); 

    Console.WriteLine("Press any key to continue..."); 
    Console.WriteLine(); 
    Console.ReadKey(); 
    mySerialPort.Close(); 
} 

private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) 
{ 
    SerialPort sp = (SerialPort)sender; 
    string indata = sp.ReadExisting(); 
    Debug.Print("Data Received:"); 
    Debug.Print(indata); 
} 
관련 문제