无法关闭SerialPort,arduino发送200hz数据到串行监视器

时间:2016-04-16 16:47:06

标签: c# arduino

Halllo

我已经完成了我的第一个项目,它的工作原理很好,我无法让它关闭串口。

我在Serialmonitor中运行200hz并且保存功能非常完美。

我怀疑它在尝试关闭端口时尝试读取数据。

它没有出现错误,而是挂在试图关闭端口的调试器中。

我的2015年视觉工作室代码:

    using System;
    using System.Windows.Forms;
    using System.IO.Ports;
    namespace Arduino_Serial
{
    public partial class Form1 : Form
    {
        private SerialPort myport;
        private DateTime datetime;
        private string in_data1;
        private int runtime_sec = 0;
        private float runtime_milis = 0;

        public Form1()
        {
            InitializeComponent();

        }

        private void Start_Click_1(object sender, EventArgs e)
        {
            myport = new SerialPort();
            myport.BaudRate = 115200;
            myport.PortName = Port_name_tb.Text;
            myport.Parity = Parity.None;
            myport.DataBits = 8;
            myport.StopBits = StopBits.One;
            myport.DataReceived += Myport_DataReceived;
            try
            {
                myport.Open();
                timer2.Enabled = true;
                timer1.Enabled = true;

                Data_tb.Text = "\"Arduino\"" + "\n";
                Data_tb.AppendText("Time" + "\t" + "Raw_data" + "\t" + "MAP" + "\n");
                Data_tb.AppendText("Sec " + "\t" + "Raw_data" + "\t" + "KPA" + "\n");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }

        void Myport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            in_data1 = myport.ReadLine();
            Invoke(new EventHandler(displaydata_event));
        }

        private void displaydata_event(object sender, EventArgs e)
        {
            datetime = DateTime.Now;
            string time = datetime.Hour + ":" + datetime.Minute + ":" + datetime.Second;
            Data_tb.AppendText(("\n")+ (runtime_milis) + ("\t")+ in_data1 );
        }

        private void Stop_bt_Click(object sender, EventArgs e)
        {
            try
            {
                myport.ReadTimeout = 1000000000;
                myport.Close();
                timer2.Enabled = false;
                timer1.Enabled = false;
                runtime_milis = 0;
                runtime_sec = 0;
            }
            catch (Exception ex2)
            {
                MessageBox.Show(ex2.Message, "Error");
            }
        }

        private void Save_bt_Click(object sender, EventArgs e)
        {
            try
            {
                datetime = DateTime.Now;
                String time = datetime.Year + "-"+ datetime.Month + "-"+ datetime.Day + "_" + datetime.Hour + "." + datetime.Minute + "." + datetime.Second;
                string pathfile = @"C:\DATA\";
                string filename = "Arduino_" + time + ".msl";
                System.IO.File.WriteAllText(pathfile + filename, Data_tb.Text);
                MessageBox.Show("Data has been saved");
                Close();
            }
            catch (Exception ex3)
            {
                MessageBox.Show(ex3.Message, "Error");
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            runtime_sec++;
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
                runtime_milis++; 
        }
    }
}

0 个答案:

没有答案