diff --git a/ISCamRecorder/MainForm.Designer.cs b/ISCamRecorder/MainForm.Designer.cs index 5c63283..e8af59f 100644 --- a/ISCamRecorder/MainForm.Designer.cs +++ b/ISCamRecorder/MainForm.Designer.cs @@ -228,7 +228,7 @@ | System.Windows.Forms.AnchorStyles.Right))); chartArea1.AxisX.IsLabelAutoFit = false; chartArea1.AxisX.LabelStyle.Angle = 90; - chartArea1.AxisX.LabelStyle.Format = "HH:mm:ss"; + chartArea1.AxisX.LabelStyle.Format = "0.0"; chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.Gray; chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.Gray; chartArea1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); @@ -248,7 +248,7 @@ series1.MarkerColor = System.Drawing.Color.Blue; series1.MarkerSize = 15; series1.Name = "SeriesB"; - series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time; + series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Single; series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; series2.BorderWidth = 3; series2.ChartArea = "ChartArea1"; @@ -257,14 +257,14 @@ series2.MarkerColor = System.Drawing.Color.Red; series2.MarkerSize = 15; series2.Name = "SeriesR"; - series2.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time; + series2.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Single; series2.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; series3.BorderWidth = 3; series3.ChartArea = "ChartArea1"; series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine; series3.Color = System.Drawing.Color.Green; series3.Name = "SeriesG"; - series3.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time; + series3.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Single; series3.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; this.chart1.Series.Add(series1); this.chart1.Series.Add(series2); diff --git a/ISCamRecorder/MainForm.cs b/ISCamRecorder/MainForm.cs index 9b93aaf..6cd4d5f 100644 --- a/ISCamRecorder/MainForm.cs +++ b/ISCamRecorder/MainForm.cs @@ -263,6 +263,7 @@ State = STATE.Recoding; this.UpdateControlState(); }); + _Sensor.StartRecoding(TxtSubjectName.Text); // 録画 Task[] tasks = new Task[_Cameras.Count]; @@ -278,6 +279,7 @@ // 保存準備 _Sounds[1].Play(); + _Sensor.StopRecoding(); this.Invoke((MethodInvoker)delegate { State = STATE.Saving; this.UpdateControlState(); diff --git a/ISCamRecorder/SensorData.cs b/ISCamRecorder/SensorData.cs index c73040c..b0d23c7 100644 --- a/ISCamRecorder/SensorData.cs +++ b/ISCamRecorder/SensorData.cs @@ -21,12 +21,14 @@ Queue ValuesB = new Queue(); // センサー値 Queue ValuesR = new Queue(); // センサー値 Queue ValuesG = new Queue(); // センサー値 - Queue Times = new Queue(); // サンプル時間 + Queue Times = new Queue(); // サンプル時間 int _QueueLength; // グラフ表示するサンプル数 StreamWriter _CsvWriter = null; // ファイル保存オブジェクト FrameRateCounter _Fps = new FrameRateCounter(10); // FPS計測 int _LastButtonState = 0; // ボタンの前の状態 - MainForm _MainForm = null; // メインフォームインスタンス + MainForm _MF = null; // メインフォームインスタンス + bool _IsRecoding = false; // 記録中フラグ + bool _ClearPlot = false; // プロット消去フラグ public float FrameRate { get { return _Fps.FrameRate; } } // FPS値 @@ -35,7 +37,7 @@ /// /// public SensorData(MainForm mf, int queueLength) { - _MainForm = mf; + _MF = mf; _QueueLength = queueLength; } @@ -78,7 +80,7 @@ /// 受信ループ /// public void Loop() { - while (_MainForm.State != STATE.Exit) { + while (_MF.State != STATE.Exit) { // データ受信 var str = _Serial.ReadLine(); @@ -88,40 +90,35 @@ // ボタン状態 var buttonState = (1 - values[4]); - if (_LastButtonState == 0 && buttonState == 1) _MainForm.HWButton(); + if (_LastButtonState == 0 && buttonState == 1) _MF.HWButton(); _LastButtonState = buttonState; - // センサー値 + // サンプリング時間 var dt = DateTime.Now; - var elapsed = (dt - _MainForm.RecodingTime).TotalMilliseconds; + var elapsed = (float)((dt - _MF.RecodingTime).TotalMilliseconds); // CSV保存 - if (_MainForm.State == STATE.Recoding) { - if (_CsvWriter == null) { - var sensorFile = Path.Combine(_MainForm.OutputDir, $"Sensor_{_MainForm.RecodingTimeStr}.csv"); - _CsvWriter = new StreamWriter(sensorFile); - if (_CsvWriter != null) { - _CsvWriter.WriteLine($"Date,Time,elapsed,B,R,G,IR,switch"); - } - } + if (_IsRecoding) { if (_CsvWriter != null) { _CsvWriter.WriteLine( $"{dt.ToString("yyyy/MM/dd,HH:mm:ss.fff")},{elapsed:0.00}" + $",{values[0]},{values[1]},{values[2]},{values[3]},{buttonState}"); } - } else { - if (_CsvWriter != null) { - _CsvWriter.Close(); - _CsvWriter = null; - } } // データ追加 + if (_ClearPlot) { + _ClearPlot = false; + ValuesB.Clear(); + ValuesR.Clear(); + ValuesG.Clear(); + Times.Clear(); + } ValuesB.Enqueue(values[0]); ValuesR.Enqueue(values[1]); ValuesG.Enqueue(values[2]); - Times.Enqueue(dt); - if (ValuesB.Count > _QueueLength) { + Times.Enqueue(elapsed / 1000F); + while (ValuesB.Count > _QueueLength) { ValuesB.Dequeue(); ValuesR.Dequeue(); ValuesG.Dequeue(); @@ -129,14 +126,14 @@ } // 表示 - if (_MainForm.State != STATE.Exit) { - _MainForm.SensorChart.Invoke((MethodInvoker)delegate { - _MainForm.SensorChart.Series[0].Points.Clear(); - _MainForm.SensorChart.Series[0].Points.DataBindXY(Times, ValuesB); - _MainForm.SensorChart.Series[1].Points.Clear(); - _MainForm.SensorChart.Series[1].Points.DataBindXY(Times, ValuesR); - _MainForm.SensorChart.Series[2].Points.Clear(); - _MainForm.SensorChart.Series[2].Points.DataBindXY(Times, ValuesG); + if (_MF.State != STATE.Exit) { + _MF.SensorChart.Invoke((MethodInvoker)delegate { + _MF.SensorChart.Series[0].Points.Clear(); + _MF.SensorChart.Series[0].Points.DataBindXY(Times, ValuesB); + _MF.SensorChart.Series[1].Points.Clear(); + _MF.SensorChart.Series[1].Points.DataBindXY(Times, ValuesR); + _MF.SensorChart.Series[2].Points.Clear(); + _MF.SensorChart.Series[2].Points.DataBindXY(Times, ValuesG); }); } @@ -148,6 +145,34 @@ } /// + /// 記録開始 + /// + /// + public void StartRecoding(string csvFile) { + if (File.Exists(csvFile)) { + } else { + var sensorFile = Path.Combine(_MF.OutputDir, $"Sensor_{_MF.RecodingTimeStr}.csv"); + _CsvWriter = new StreamWriter(sensorFile); + if (_CsvWriter != null) { + _CsvWriter.WriteLine($"Date,Time,elapsed,B,R,G,IR,switch"); + } + } + _ClearPlot = true; + _IsRecoding = true; + } + + /// + /// 記録終了 + /// + public void StopRecoding() { + _IsRecoding = false; + if (_CsvWriter != null) { + _CsvWriter.Close(); + _CsvWriter = null; + } + } + + /// /// シリアルポート取得 /// ///