diff --git a/ISCamRecorder/ISCamera.cs b/ISCamRecorder/ISCamera.cs index 2ae4f2f..c868bca 100644 --- a/ISCamRecorder/ISCamera.cs +++ b/ISCamRecorder/ISCamera.cs @@ -168,16 +168,20 @@ string strSampleTime = frameTime.ToString(@"HHmmss\.fff"); var fileName = $"{_CamID}_{strSampleTime}.{_MainForm.ImageType.ToLower()}"; var filePath = Path.Combine(outDir2, fileName); - switch (_MainForm.ImageType) { - case "JPG": - FrameExtensions.SaveAsJpeg(_bufferlist[i], filePath, JPEG_QUALITY); - break; - case "BMP": - FrameExtensions.SaveAsBitmap(_bufferlist[i], filePath); - break; - case "TIFF": - FrameExtensions.SaveAsTiff(_bufferlist[i], filePath); - break; + try { + switch (_MainForm.ImageType) { + case "JPG": + FrameExtensions.SaveAsJpeg(_bufferlist[i], filePath, JPEG_QUALITY); + break; + case "BMP": + FrameExtensions.SaveAsBitmap(_bufferlist[i], filePath); + break; + case "TIFF": + FrameExtensions.SaveAsTiff(_bufferlist[i], filePath); + break; + } + } catch { + } } // 終了処理 diff --git a/ISCamRecorder/MainForm.Designer.cs b/ISCamRecorder/MainForm.Designer.cs index 59363e9..3b1c05e 100644 --- a/ISCamRecorder/MainForm.Designer.cs +++ b/ISCamRecorder/MainForm.Designer.cs @@ -25,6 +25,8 @@ private void InitializeComponent() { System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); this.BtnSetProperty = new System.Windows.Forms.Button(); this.ChkTrigger = new System.Windows.Forms.CheckBox(); @@ -240,7 +242,7 @@ chartArea1.AxisX.LabelStyle.Format = "HH:mm:ss"; chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.Gray; chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.Gray; - chartArea1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); + chartArea1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); chartArea1.Name = "ChartArea1"; chartArea1.Position.Auto = false; chartArea1.Position.Height = 94F; @@ -253,13 +255,31 @@ series1.BorderWidth = 3; series1.ChartArea = "ChartArea1"; series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine; - series1.Color = System.Drawing.Color.Red; - series1.MarkerColor = System.Drawing.Color.Red; + series1.Color = System.Drawing.Color.Blue; + series1.MarkerColor = System.Drawing.Color.Blue; series1.MarkerSize = 15; - series1.Name = "Series1"; + series1.Name = "SeriesB"; series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time; series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; + series2.BorderWidth = 3; + series2.ChartArea = "ChartArea1"; + series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine; + series2.Color = System.Drawing.Color.Red; + series2.MarkerColor = System.Drawing.Color.Red; + series2.MarkerSize = 15; + series2.Name = "SeriesR"; + series2.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time; + 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.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; this.chart1.Series.Add(series1); + this.chart1.Series.Add(series2); + this.chart1.Series.Add(series3); this.chart1.Size = new System.Drawing.Size(286, 220); this.chart1.TabIndex = 0; this.chart1.Text = "chart1"; diff --git a/ISCamRecorder/SensorData.cs b/ISCamRecorder/SensorData.cs index 7c54e76..7be36f6 100644 --- a/ISCamRecorder/SensorData.cs +++ b/ISCamRecorder/SensorData.cs @@ -18,12 +18,14 @@ readonly string SERIAL_PORT_NAME = "USB シリアル"; // デバイス名 SerialPort _Serial = null; // シリアル通信オブジェクト - Queue Values = new Queue(); // センサー値 + Queue ValuesB = new Queue(); // センサー値 + Queue ValuesR = new Queue(); // センサー値 + Queue ValuesG = new Queue(); // センサー値 Queue Times = new Queue(); // サンプル時間 int _QueueLength; // グラフ表示するサンプル数 StreamWriter _CsvWriter = null; // ファイル保存オブジェクト FrameRateCounter _Fps = new FrameRateCounter(10); // FPS計測 - bool _LastButtonState = false; // ボタンの前の状態 + int _LastButtonState = 0; // ボタンの前の状態 MainForm _MainForm = null; // メインフォームインスタンス public float FrameRate { get { return _Fps.FrameRate; } } // FPS値 @@ -80,18 +82,19 @@ // データ受信 var str = _Serial.ReadLine(); - var values = str.Split(','); - if (values.Length < 5) continue; + var strs = str.Split(','); + if (strs.Length < 5) continue; + var values = strs.Select(s => int.Parse(s)).ToArray(); // ボタン状態 - bool buttonState = values[4].StartsWith("0"); - if (_LastButtonState == false && buttonState == true && _MainForm.SwitchEnabled) { + var buttonState = (1 - values[4]); + if (_LastButtonState == 0 && buttonState == 1 && _MainForm.SwitchEnabled) { _MainForm.StartRecoding(); } _LastButtonState = buttonState; // センサー値 - var photoSensor = int.Parse(values[1]); + //var photoSensor = int.Parse(values[1]); var dt = DateTime.Now; var elapsed = (dt - _MainForm.RecodingTime).TotalMilliseconds; @@ -101,12 +104,13 @@ var sensorFile = Path.Combine(_MainForm.OutputDir, $"Sensor_{_MainForm.RecodingTimeStr}.csv"); _CsvWriter = new StreamWriter(sensorFile); if (_CsvWriter != null) { - _CsvWriter.WriteLine($"Date,Time,elapsed,sensor,switch"); + _CsvWriter.WriteLine($"Date,Time,elapsed,B,R,G,IR,switch"); } } if (_CsvWriter != null) { _CsvWriter.WriteLine( - $"{dt.ToString("yyyy/MM/dd,HH:mm:ss.fff")},{elapsed:0.00},{photoSensor},{buttonState}"); + $"{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) { @@ -116,10 +120,14 @@ } // データ追加 - Values.Enqueue(photoSensor); + ValuesB.Enqueue(values[0]); + ValuesR.Enqueue(values[1]); + ValuesG.Enqueue(values[2]); Times.Enqueue(dt); - if (Values.Count > _QueueLength) { - Values.Dequeue(); + if (ValuesB.Count > _QueueLength) { + ValuesB.Dequeue(); + ValuesR.Dequeue(); + ValuesG.Dequeue(); Times.Dequeue(); } @@ -127,7 +135,11 @@ if (_MainForm.State != STATE.Exit) { _MainForm.SensorChart.Invoke((MethodInvoker)delegate { _MainForm.SensorChart.Series[0].Points.Clear(); - _MainForm.SensorChart.Series[0].Points.DataBindXY(Times, Values); + _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); }); } diff --git a/README.md b/README.md index 22aa496..204fdf2 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,9 @@ ### 構成 - Imaging Source DFK 33 カメラ4個 +- Webカメラ - Arduino [Seeduino XIAO M0+](https://www.switch-science.com/catalog/6335/) - - フォトリフレクタ [TPR-105](https://akizukidenshi.com/catalog/g/gI-03812/) +- カラーセンサ [S11059](https://akizukidenshi.com/download/ds/akizuki/S11059_module_manual.pdf) ### 開発環境 - Visual C# 2022