2017-12-13 12 views
1

waspmote 보드에서 데이터를 받기 위해 UWP APP를 만들고 있는데, WindForm을 사용하여 개발했지만 작동 할 수 있지만 UWP는 using System.IO.Port을 지원하지 않으므로 using Windows.Devices.SerialCommunication;을 사용합니다. ,하지만 어떻게 시작해야할지 모르겠다. 어떻게 UWP 코드로 변환 할 수 있을까?UWP 시리얼 디바이스

windform 코드

public Form1() 
    { 
     InitializeComponent(); 
     getAvailablePorts(); 
    } 
    void getAvailablePorts() 
    { 
     // Get a list of existing ports 
     String[] ports = SerialPort.GetPortNames(); 
     String[] baudrates = new String[] { "9600", "115200" }; 
     // Insert the lists into the combo boxes 
     comboBox1.Items.AddRange(ports); 
     comboBox2.Items.AddRange(baudrates); 
     // Select the default setting if at least a com port is found. 
     if (ports.Count() != 0) 
     { 
      comboBox1.SelectedIndex = 0; 
      comboBox2.SelectedIndex = 1; 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (comboBox1.Text == "" || comboBox2.Text == "") 
      { 
       textBox1.Text = "Please select port settings"; 
      } 
      else 
      { 
       serialPort1.PortName = comboBox1.Text; 
       serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text); 
       serialPort1.DataReceived += new 
       SerialDataReceivedEventHandler(serialPort1_DataReceived); 
       serialPort1.Open(); 
       progressBar1.Value = 100; 
       button1.Enabled = false; 
       button2.Enabled = true; 
      } 
     } 
     catch (UnauthorizedAccessException) 
     { 
      textBox1.Text = "UnauthorizedAccess"; 
     } 
    } 

    private void serialPort1_DataReceived(object sender, 
    SerialDataReceivedEventArgs e) 
    { 
     SerialPort sp = (SerialPort)sender; 
     string value = sp.ReadExisting(); 
     processValue(value); 
    } 
    //Delegate to update received data in the textbox 
    private delegate void processValueDelegate(string value); 
    private void processValue(string value) 
    { 
     if (this.InvokeRequired) 
     { 
      this.BeginInvoke(new processValueDelegate(processValue), 
      new object[] { value }); 
     } 
     else 
     { 
      // ... update GUI in here ... 
      textBox1.AppendText(value); 
      DataExtraction(value); 
     } 
    } 
    string UnreadBuffer = ""; 
    private void DataExtraction(string RxString) 
    { 
     UnreadBuffer += RxString; 
     // Search for Data Header "<=>" 
     int start = UnreadBuffer.IndexOf("<=>"); 
     int delimiter = UnreadBuffer.IndexOf("#"); 
     if (start >= 0) 
     { 
      string row = UnreadBuffer.Substring(start); 
      if (delimiter >= 0) 
      { 
       string[] ExtractedDataFields = row.Split('#'); 
       if (ExtractedDataFields.Length >= 7) 
       { 
        textBox2.Text = string.Format("{0:HH:mm:ss tt}", DateTime.Now); 
        textBox3.Text = ExtractedDataFields[1]; 
        textBox4.Text = ExtractedDataFields[2]; 
        textBox5.Text = ExtractedDataFields[3]; 
        textBox6.Text = ExtractedDataFields[5]; 
        UnreadBuffer = ""; 
       } 
      } 
     } 
    } 

enter image description here

enter image description here

* 아래로 그리고 anohther 질문이 있습니다 : UWP이 도구 상자에하여 SerialPort를 가지고 있지 않기 때문에, UWP에서 대체 무엇입니까?

+0

[UWP 링크를 직렬 포트로] 가능한 복제본 (https://stackoverflow.com/questions/47791149/uwp-link-to-serial-port) –

+0

I @ Vincent가 이전 질문에이 질문에 대답했다고 생각하십시오. UWP에서는이를 달성하기 위해 [Windows.Devices.SerialCommunication 네임 스페이스] (https://docs.microsoft.com/en-us/uwp/api/Windows.Devices.SerialCommunication) API를 사용해야합니다. 그는 또한 공식 코드 샘플 [Custom serial device sample] (https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CustomSerialDeviceAccess)을 언급했습니다. 이 샘플의 시나리오는 실제로 직렬 장치와 통신하는 방법 (읽기 및 쓰기 데이터 포함)을 알려주고 있습니다. –

+0

예, 샘플의 모든 것을 찾을 수 있습니다. 나는 여기에 똑같은 코드를 쓸 수 있지만 쓸모가 없다. 샘플을 다운로드하고 시나리오 4 (읽기/쓰기)를 실행하고 필요에 맞게 조정 해보십시오. UWP에서는 드롭 할 수있는 'SerialPort' 컨트롤이 없기 때문에 모든 것을 처리 할 수 ​​있습니다. 먼저 장치를 열거하고 원하는 구성 및 열기를 수행 한 다음 입/출력 스트림을 검색하여 데이터를 읽고 쓰십시오. – Vincent

답변

0

내가 전에 이런 짓을했지만 연결이 내가 와이어 를 사용하여 아두 이노 내 노트북을 연결 매우 불안정하지만, 언젠가는 언젠가는 일을 지금은 그것이 작동되도록 서로 다른 연결을 사용한다는 것을 스피 너무 화가 해달라고 서버를 만들고 모든 것을 node.js에 연결하는 것과 같습니다.