SensorMoniter.cs

Seungbin Yang / 양승빈·2024년 5월 14일

비주얼프로그래밍

목록 보기
17/21

Code

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(' '); 을 통해 각 값을 분리하여 계산하도록 한다.

Result

0개의 댓글