ECG는 심전도, PPG는 맥파이다.
두 데이터(.txt)를 이용하여 여러 기능을 가진 차트를 만들어보자.
private double[] ecg = new double[100000];
private double[] ppg = new double[100000];
private int ecgCount; //ecg 데이터 개수
private int ppgCount; //ppg 데이터 개수
private Timer t = new Timer();
this.WindowState = FormWindowState.Maximized; //창의 속성: 최대화
EcgRead();
PpgRead();
ChartSetting();
t.Interval = 10; //간격 : 0.01초
t.Tick += T_Tick;
//EcgRead()
string fileName = "../../Data/ecg.txt"; //exe파일 기준으로 경로
string[] lines = File.ReadAllLines(fileName);
double min = double.MaxValue;
double max = double.MinValue;
int i = 0;
foreach(var line in lines)
{
ecg[i]=double.Parse(line) +3;
if (ecg[i] < min) min = ecg[i];
if (ecg[i] > max) max = ecg[i];
i++;
}
ecgCount = i;
string s = string.Format(
"ECG: ecgCount ={0}, min ={1}, max ={2}", ecgCount, min, max);
MessageBox.Show(s);
private void ChartSetting()
{
// chart 영역 설정
// 커서 사용 가능
ch.ChartAreas["ChartArea1"].CursorX.IsUserEnabled = true;
// zoom 범위 선택 가능
ch.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
//chart 영역 설정
ch.ChartAreas[0].BackColor = Color.Black;
ch.ChartAreas[0].AxisX.Minimum = 0;
ch.ChartAreas[0].AxisX.Maximum = ecgCount;
ch.ChartAreas[0].AxisX.Interval = 50;
ch.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray;
ch.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
ch.ChartAreas[0].AxisY.Minimum = -2;
ch.ChartAreas[0].AxisY.Maximum = 6;
ch.ChartAreas[0].AxisY.Interval =0.5;
ch.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray;
ch.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
//Series 2개 새로 만들기
ch.Series.Clear();
ch.Series.Add("ECG");
ch.Series.Add("PPG");
ch.Series["ECG"].ChartType = SeriesChartType.Line;
ch.Series[0].Color = Color.Orange;
ch.Series[0].BorderWidth = 2;
ch.Series[0].LegendText = "ECG";
ch.Series["PPG"].ChartType = SeriesChartType.Line;
ch.Series[1].Color = Color.LightGreen;
ch.Series[1].BorderWidth = 2;
ch.Series[1].LegendText = "PPG";
//데이터를 series에 추가
foreach(var v in ecg)
{
ch.Series["ECG"].Points.Add(v);
}
foreach (var w in ppg)
{
ch.Series["PPG"].Points.Add(w);
}
}
int cursorX = 0; //디스플레이되는 데이터의 시작점
bool scrolling = false; //true일때 스크롤
int datacount = 500; //한화면에 보여주는 데이터 갯수
private int speed = 2;
private void T_Tick(object sender, EventArgs e)
{
//한 화면에 500개의 데이터를 보여줄 예정
if (cursorX + datacount < ecgCount)
ch.ChartAreas[0].AxisX.ScaleView.Zoom(cursorX, cursorX + datacount);
else
t.Stop();
cursorX += speed;
}