使用从串行端口收到的值

时间:2015-05-22 12:15:10

标签: c# serial-port

我试图建立一个接收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);
        }
    }
    }
}

提前感谢您的帮助

1 个答案:

答案 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中将其打开并使其成为有用的表,然后创建数据图。或者,您可以将数据加载到数据库中并对数据库运行查询。