Doç. Dr. GÜRAY SONUGÜR

Doç. Dr. Güray SONUGÜR – Öğrenci Bilgi Paylaşım Platformu

VTIY C# ile Sensör Verilerini Toplama

 

Yukarıdaki ara yüz ile 3 ayri sensörden C# programı ile veri toplanmıştır.

Tasarlanan  Form aşağıda verilmiştir.

 

Programa ait kodlar da aşağıda verilmiştir.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Windows.Forms.DataVisualization.Charting;

namespace VeriToplama2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
// Bu kısımda form ekrana yüklenirken tüm combobox unsurlarının içerikleri dolduruluyor.
cmbSeriPort.Items.Add(“COM3”);
cmbSeriPort.Items.Add(“COM4”);
cmbSeriPort.Items.Add(“COM5”);
cmbSeriPort.SelectedIndex = 0;

cmbSeriHiz.Items.Add(“9600”);
cmbSeriHiz.Items.Add(“115200”);
cmbSeriHiz.SelectedIndex = 0;

cmbVerisayisi.Items.Add(“3”);
cmbVerisayisi.Items.Add(“25”);
cmbVerisayisi.Items.Add(“50”);
cmbVerisayisi.Items.Add(“100”);
cmbVerisayisi.Items.Add(“200”);
cmbVerisayisi.Items.Add(“300”);
cmbVerisayisi.SelectedIndex = 0;

//Grafik unsurunda 3 ayrı grafik çizdireceğiz. Bunlar pot, ldr, lm35
// bu grafiklerin tipleri “fastline” ve renkleri burada ayarlanıyor.
chart1.Series[“POT”].ChartType = SeriesChartType.FastLine;
chart1.Series[“POT”].Color = Color.Red;
chart1.Series[“LDR”].ChartType = SeriesChartType.FastLine;
chart1.Series[“LDR”].Color = Color.Blue;
chart1.Series[“LM35”].ChartType = SeriesChartType.FastLine;
chart1.Series[“LM35”].Color = Color.Brown;

}

private void btnOku_Click(object sender, EventArgs e)
{
//seri port kapalı ise aç diyoruz.
//ancak hata alırsak programın kırılmaması için try-catch kullandık.
if (!serialPort1.IsOpen)
{
try
{
serialPort1.Open();
}
catch
{
MessageBox.Show(“Seri port hatası var!”);
return;
}

}

//okunan değerlerin saklanacağı diziler tanımlanıyor.
double[] pot = new double[int.Parse(cmbVerisayisi.SelectedItem.ToString())];
double[] ldr = new double[int.Parse(cmbVerisayisi.SelectedItem.ToString())];
double[] lm35 = new double[int.Parse(cmbVerisayisi.SelectedItem.ToString())];

//her çalıştırma işleminde grafik unsurlarının temizlenmesi sağlanıyor.
chart1.Series[“POT”].Points.Clear();
chart1.Series[“LDR”].Points.Clear();
chart1.Series[“LM35”].Points.Clear();

//listbox unsurları temizleniyor.
listBox1.Items.Clear();
listBox2.Items.Clear();
listBox3.Items.Clear();
listBox4.Items.Clear();

int i= 0;
int j = 0;
int l = 0;
// döngüyü veri sayısı combobox’ından alınan değer kadar ayarlıyoruz.
while (i < int.Parse(cmbVerisayisi.SelectedItem.ToString()))
{
string s = serialPort1.ReadLine();
listBox1.Items.Insert(0,s);

string[] k = s.Split(‘_’);

if (k[0] == “POT”)
{
listBox2.Items.Insert(0,k[1]);
pot[i] = int.Parse(k[1]);

if (pot[i] > 900)  // pot’tan okunan değer 900’den büyükse led yakmak için dışarıya seri porttan veri
{
serialPort1.WriteLine(“1”);
}
else
{
serialPort1.WriteLine(“0”);
}

//döngü içinde grafik çizdiriliyor.
chart1.Series[“POT”].Points.AddXY(i, pot[i]);
i = i + 1;
}
else if (k[0] == “LDR”)
{
listBox3.Items.Insert(0, k[1]);
ldr[j] = int.Parse(k[1]);
chart1.Series[“LDR”].Points.AddXY(j, ldr[j]);
j = j + 1;
}
else if (k[0] == “SCK”)
{
listBox4.Items.Insert(0, k[1]);
lm35[l] = int.Parse(k[1]);
chart1.Series[“LM35”].Points.AddXY(l, lm35[l]);
l = l + 1;

}
else
{
//eğer hiçbir şarta uymayan bir veri gelirse devam et…
continue;
}

}

}

private void btnDur_Click(object sender, EventArgs e)
{
// seri port açık ise kapat!
if (serialPort1.IsOpen)
serialPort1.Close();
}

private void cmbSeriPort_SelectedIndexChanged(object sender, EventArgs e)
{
//seri portu seçilen değeri ata.
serialPort1.PortName = cmbSeriPort.Text;
}
}
}