using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Windows.Forms.DataVisualization.Charting;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace _025_SensorMoniter
{
public partial class Form1 : Form
{
SerialPort sPort = null;
private double xCount = 200;
// List<SensorData> myData = new List<SensorData>();
// 시뮬레이션 용도로 랜덤 값을 설정함
Timer t = new Timer();
Random r = new Random();
public Form1()
{
InitializeComponent();
foreach (var ports in SerialPort.GetPortNames())
comboBox1.Items.Add(ports);
comboBox1.Text = "Select Port";
progressBar1.Minimum = 0;
progressBar1.Maximum = 1023;
InitSetting();
ChartsSetting();
}
private void ChartsSetting()
{
chart1.Titles.Add("조도");
chart2.Titles.Add("온도/습도");
chart1.Series.Clear();
chart1.Series.Add("Lumi");
chart1.ChartAreas[0].AxisX.Minimum = 0;
chart1.ChartAreas[0].AxisX.Maximum = xCount;
chart1.ChartAreas[0].AxisX.Interval = xCount / 4;
chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray;
chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
chart1.ChartAreas[0].AxisY.Minimum = 0;
chart1.ChartAreas[0].AxisY.Maximum = 800;
chart1.ChartAreas[0].AxisY.Interval = 200;
chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray;
chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
chart1.ChartAreas[0].BackColor = Color.Black;
chart2.Series.Clear();
chart2.Series.Add("Temp");
chart2.Series.Add("Humi");
chart2.ChartAreas[0].AxisX.Minimum = 0;
chart2.ChartAreas[0].AxisX.Maximum = xCount;
chart2.ChartAreas[0].AxisX.Interval = xCount / 4;
chart2.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray;
chart2.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
chart2.ChartAreas[0].AxisY.Minimum = 0;
chart2.ChartAreas[0].AxisY.Maximum = 100;
chart2.ChartAreas[0].AxisY.Interval = 20;
chart2.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray;
chart2.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
chart2.ChartAreas[0].BackColor = Color.Black;
// Series 디자인
chart1.Series[0].ChartType = SeriesChartType.Line;
chart1.Series[0].Color = Color.LightGreen;
chart1.Series[0].BorderWidth = 2;
chart2.Series[0].ChartType = SeriesChartType.Line;
chart2.Series[0].Color = Color.LightBlue;
chart2.Series[0].BorderWidth = 2;
chart2.Series[1].ChartType = SeriesChartType.Line;
chart2.Series[1].Color = Color.Orange;
chart2.Series[1].BorderWidth = 2;
}
private void InitSetting()
{
btnPortValue.BackColor = Color.Blue;
btnPortValue.ForeColor = Color.White;
btnPortValue.Text = "";
btnPortValue.Font = new Font("맑은 고딕", 12, FontStyle.Bold);
lblConnectionTime.Text = "Connection Time : ";
txtCount.TextAlign = HorizontalAlignment.Center;
btnConnect.Enabled = true;
btnDisconnect.Enabled = false;
}
private void 시작ToolStripMenuItem_Click(object sender, EventArgs e)
{
t.Interval = 1000;
t.Tick += T_Tick;
t.Start();
}
private void T_Tick(object sender, EventArgs e)
{
// 시뮬레이션
int value = r.Next(1024);
int temp = r.Next(35);
int humi = r.Next(30, 90);
string s = string.Format("{0} {1} {2}", temp, humi, value);
ShowValue(s);
}
private void ShowValue(string s)
{
// 시뮬레이션
listBox1.Items.Add(s);
listBox1.SelectedIndex = listBox1.Items.Count - 1;
string[] sub = new string[3];
sub = s.Split(' ');
int lumi = 0; // 조도
int temp = 0; // 온도
int humi = 0; // 습도
temp = int.Parse(sub[0]);
humi = int.Parse(sub[1]);
lumi = int.Parse(sub[2]);
progressBar1.Value = lumi;
chart1.Series[0].Points.Add(lumi);
chart2.Series[0].Points.Add(temp);
chart2.Series[1].Points.Add(humi);
}
}
}
progressBar1.Minimum = 0; 으로 최소값 설정
progressBar1.Maximum = 1023; 으로 최대값 설정
s.Split(' '); 을 통해 각 값을 분리하여 계산하도록 한다.
