我正在使用我的 Arduino UNO 板来读取和绘制雷达显示器上的点。我正在接收到我的 PC 的串行数据,如下所示:
44.16 ; 48
44.47 ; 49
44.57 ; 50
44.88 ; 51
158.01 ; 52
44.88 ; 53
第一个数字是距离,第二个数字是舵机旋转到的度数标记。
我想获取这些数据并创建一个数组,该数组将绘制和刷新每个度数的测量值,因为伺服从 1-180 度扫描并从 180 度返回到 1 度。
这是我的代码:
using System;
using System.IO.Ports;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SonarRadarProject
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
var comPorts = new string[10]; //You really shouldn't have many more than 10 ports open at a time.... Right?
comPorts = SerialPort.GetPortNames();
foreach (var comPort in comPorts)
listBoxComPorts.Items.Add(comPort);
listBoxBaudRate.Items.Add(9600);
}
private void buttonConnect_Click(object sender, EventArgs e)
{
#region User Interface
/*-------------------------------------------------------*
* --------------USER INTERFACE SECTION------------------*
*-------------------------------------------------------*/
var userPortChoice = listBoxComPorts.SelectedItem;
var userBaudChoice = listBoxBaudRate.SelectedItem;
if ((userBaudChoice == null) || (userPortChoice == null))
{
MessageBox.Show("Please select both a PORT and a BAUD rate.", "Error");
return;
}
SerialPort arduinoPort = new SerialPort()
{
PortName = userPortChoice.ToString(),
BaudRate = Convert.ToInt16(userBaudChoice)
};
arduinoPort.Open();
arduinoPort.NewLine = "\r\n";
#endregion
#region Real Code
/*-------------------------------------------------------*
* --------------THE REAL CODE SECTION-------------------*
*-------------------------------------------------------*/
while (arduinoPort.IsOpen)
{
//
//BEGIN making a string array based on serial data sent via USB from the Arduino UNO
//
}
#endregion
}
}
}
我可以制作数组,并将度数与距离测量分开(使用 string.split 和 string.remove)。我不知道要让这些信息不断地从串行端口流入(输出行被分开,并正确格式化)并更新我的变量以获取这些数据。
我需要介绍握手吗?也许一点一点地读取这些数据并编译它?读取 inBuffer,而不是 arduinoPort.readLine()?
TLDR:我想要不断更新(实时?)、格式正确的串行数据,我可以将其分成两个变量(sonarDist 和 sonarDeg)。
尽力而为,老实说,我完全迷路了。欢迎任何建议。