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 = "";
}
}
}
}
* 아래로 그리고 anohther 질문이 있습니다 : UWP이 도구 상자에하여 SerialPort를 가지고 있지 않기 때문에, UWP에서 대체 무엇입니까?
[UWP 링크를 직렬 포트로] 가능한 복제본 (https://stackoverflow.com/questions/47791149/uwp-link-to-serial-port) –
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)을 언급했습니다. 이 샘플의 시나리오는 실제로 직렬 장치와 통신하는 방법 (읽기 및 쓰기 데이터 포함)을 알려주고 있습니다. –
예, 샘플의 모든 것을 찾을 수 있습니다. 나는 여기에 똑같은 코드를 쓸 수 있지만 쓸모가 없다. 샘플을 다운로드하고 시나리오 4 (읽기/쓰기)를 실행하고 필요에 맞게 조정 해보십시오. UWP에서는 드롭 할 수있는 'SerialPort' 컨트롤이 없기 때문에 모든 것을 처리 할 수 있습니다. 먼저 장치를 열거하고 원하는 구성 및 열기를 수행 한 다음 입/출력 스트림을 검색하여 데이터를 읽고 쓰십시오. – Vincent