diff --git a/ISCamRecorder/MainForm.cs b/ISCamRecorder/MainForm.cs index dcf46f8..4e0c463 100644 --- a/ISCamRecorder/MainForm.cs +++ b/ISCamRecorder/MainForm.cs @@ -242,6 +242,8 @@ "rec" + DateTime.Now.ToString("yyyyMMdd_HHmmss")); Directory.CreateDirectory(outputDir); var imageType = CboImageType.Text; + var sensorFile = Path.Combine(outputDir, @"sensor.csv"); + _Sensor.StartRecoding(sensorFile); // 録画 //DateTime recordStartTime = DateTime.Now; Task[] tasks = new Task[4]; @@ -250,6 +252,7 @@ tasks[i] = Task.Run(() => cam.RecordToMemory(framesToCapture)); } Task.WaitAll(tasks); + _Sensor.StopRecoding(); // 保存 BtnRecodeMovie.Text = "保存中"; BtnRecodeMovie.BackColor = Color.Aqua; diff --git a/ISCamRecorder/SensorData.cs b/ISCamRecorder/SensorData.cs index 8bd032f..ae7d8e1 100644 --- a/ISCamRecorder/SensorData.cs +++ b/ISCamRecorder/SensorData.cs @@ -6,6 +6,7 @@ using System.IO.Ports; using System.Management; using System.Diagnostics; +using System.IO; namespace ISCamRecorder { internal class SensorData { @@ -20,7 +21,9 @@ bool _ExitSignal = false; // 終了シグナル int _QueueLength = 1; // グラフ表示するサンプル数 public static object Locker = new object(); // 受信データの排他制御 - bool _Recoding = false; // 記録中フラグ + bool _RecodingStopSignal = false; // 記録終了シグナル + StreamWriter _CsvWriter = null; // ファイル保存オブジェクト + DateTime _RecordBeginTime; /// /// 接続 @@ -66,6 +69,16 @@ var str = _Serial.ReadLine(); var val = int.Parse(str); var dt = DateTime.Now; + var elapsed = (dt - _RecordBeginTime).TotalMilliseconds; + if (_CsvWriter != null) { + if (_RecodingStopSignal) { + _CsvWriter.Close(); + _CsvWriter = null; + } else { + _CsvWriter.WriteLine( + $"{dt.ToString("yyyy/MM/dd,HH:mm:ss.fff")},{elapsed:0.00},{val}"); + } + } lock (Locker) { Values.Enqueue(val); Times.Enqueue(dt); @@ -102,8 +115,16 @@ return portname; } - public void StartRecoding() { + public void StartRecoding(string filename) { + _CsvWriter = new StreamWriter(filename); + if (_CsvWriter == null) return; + _CsvWriter.WriteLine($"Date,Time,elapsed,sensor"); + _RecordBeginTime = DateTime.Now; + _RecodingStopSignal = false; + } + public void StopRecoding() { + _RecodingStopSignal = true; } } }