diff --git a/ISCamRecorder/MainForm.Designer.cs b/ISCamRecorder/MainForm.Designer.cs index 7ccb37e..1a47b16 100644 --- a/ISCamRecorder/MainForm.Designer.cs +++ b/ISCamRecorder/MainForm.Designer.cs @@ -450,12 +450,16 @@ // // chart1 // + this.chart1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + chartArea1.AxisX.LabelStyle.Format = "hh:mm:ss"; chartArea1.Name = "ChartArea1"; this.chart1.ChartAreas.Add(chartArea1); this.chart1.Location = new System.Drawing.Point(3, 3); this.chart1.Name = "chart1"; series1.ChartArea = "ChartArea1"; - series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; + series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine; series1.Name = "Series1"; series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time; series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; diff --git a/ISCamRecorder/MainForm.cs b/ISCamRecorder/MainForm.cs index e6f1bf2..fa96034 100644 --- a/ISCamRecorder/MainForm.cs +++ b/ISCamRecorder/MainForm.cs @@ -26,6 +26,8 @@ Task _SerialThread; // シリアル通信スレッド float _TriggerFrameRate = 30.0F; private ulong _availablePhysicalMemory; //合計物理メモリ + Queue _SensorValues = new Queue(); + Queue _SensorTime = new Queue(); /// /// コンストラクタ @@ -102,23 +104,41 @@ serialPort1.RtsEnable = true; serialPort1.PortName = portname; serialPort1.Open(); - Debug.WriteLine(portname); + Debug.WriteLine($"Serial Connect {portname}"); while (!_ExitSignal) { var str = serialPort1.ReadLine(); + if (_ExitSignal) break; var val = int.Parse(str); var dt = DateTime.Now; - AddPoint(dt, val); + _SensorValues.Enqueue(val); + _SensorTime.Enqueue(dt); + if (_SensorValues.Count > 100) { + _SensorValues.Dequeue(); + _SensorTime.Dequeue(); + } + if (!_ExitSignal) Plot(); } } - private void AddPoint(DateTime dt, int value) { - if (this.InvokeRequired) { - this.Invoke((MethodInvoker)delegate { AddPoint(dt, value); }); + /// + /// グラフをプロット + /// + private void Plot() { + if (!this.IsDisposed && this.InvokeRequired) { + this.Invoke((MethodInvoker)delegate { Plot(); }); return; } - chart1.Series[0].Points.AddXY(dt, value); + chart1.Series[0].Points.Clear(); + for (var i = 0; i < _SensorValues.Count; i++) { + chart1.Series[0].Points.AddXY( + _SensorTime.ElementAt(i), _SensorValues.ElementAt(i)); + } } + /// + /// シリアルポート取得 + /// + /// private string GetSerialPort() { var portname = ""; var mcW32SerPort = new ManagementClass("Win32_SerialPort"); @@ -184,10 +204,11 @@ /// /// private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { + serialPort1.Close(); _ExitSignal = true; _UITimer.Dispose(); _TriggerThread.Wait(); - _SerialThread.Wait(); + _SerialThread.Wait(1000); } ///