我试图建立一个接收4个值的小气象站。 这是我从串口读取时获得的数据:http://oi59.tinypic.com/2uzbknm.jpg 而且我已经设法拆分它,所以我只得到了价值。 这看起来像这样:http://oi61.tinypic.com/143qs0m.jpg
现在我想对这些值做些什么(把它们放在图表中,另存为CSV,为温度添加逗号,从十六进制到十进制为压力,..)但我不知道我是怎么做的可以和他们一起工作。
我正在考虑将它们放在一个数组(unifined rows x 4列)或列表中,但我不知道该怎么做。 或者也许有一个我没有想到的更简单的解决方案。
这是我的代码:
using System;
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;
using System.IO.Ports;
using System.IO;
namespace WeatherStation
{
public partial class Form1 : Form
{
private SerialPort port;
public Form1()
{
InitializeComponent();
}
private void btnStart_Click(object sender, EventArgs e)
{
try
{
port = new SerialPort("COM3", 9600, Parity.None, 8);
port.DataReceived += DataReceivedHandler;
port.Open();
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
try
{
SerialPort sp = (SerialPort)sender;
string data = sp.ReadLine();
string[] ret = data.Split(':');
if (data != String.Empty)
{
Invoke(new Action(() => txtBoxData.AppendText(ret[1] + '\t')))
}
}
catch (Exception exc) //!!
{
MessageBox.Show(exc.Message);
}
}
private void btnStop_Click(object sender, EventArgs e)
{
port.Close();
}
private void btnClear_Click(object sender, EventArgs e)
{
txtBoxData.Clear();
}
private void btnSave_Click(object sender, EventArgs e)
{
try
{
StreamWriter writer = new StreamWriter(@"test.cvs");
writer.Write(txtBoxData.Text);
writer.Close();
}
catch (IOException exc)
{
MessageBox.Show(exc.Message);
}
}
}
}
提前感谢您的帮助
答案 0 :(得分:0)
您可以将标签,值和时间戳作为一行存储在文件中。逗号分隔可能会起作用。
if (data != String.Empty)
{
string[] ret = data.Split(':');
string text = string.Format("{0:yyyy-MM-dd HH:mm:ss},{1},{2}", DateTime.Now, ret[0], ret[1]);
File.AppendAllText(@"c:\MyFile.csv", text);
}
以上代码将每个事件添加一行到名为“ MyFile.csv”的文件中。第一列将具有日期和时间,第二列将具有度量标准类型,第三列将具有值。
一旦在文件中添加了足够的行,就可以使用数据透视表功能在Excel中将其打开并使其成为有用的表,然后创建数据图。或者,您可以将数据加载到数据库中并对数据库运行查询。