Arduino C#-SQL Server-Arduino Arduino C# ZedGraph Realtime Grafik By Ekrem Keleş Posted on 18 Aralık 2017 6 min read 2 1 6,707 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr Herkese Merhabalar. Bu uygulamada Arduino, Microsoft Visual Studio 2010 kullanılmıştır. C# ile grafik çizmemize olanak sağlayan ZedGraph kütüphanesinden yararlanılmıştır. Kütüphaneyi https://sourceforge.net/projects/zedgraph/files/zedgraph%20dll%20only/5.1.5/ indirebilirsiniz. Uygulamamızın genel algoritmasına bakarsak şöyle çalışır; seri porttan veri okunur, veri aralardaki ‘*’ göre parse edilip text.box’lara aktarılır ve grafikde gerçek zamanlı olarak çizdirilir. Yaptığımız uygulamada arduinodan 2 adet analog veri okunmaktadır.Bu veriler serial porta gönderilir.Bu veriler C# da yaptığımız bir arayüzle okunur. Bu sayede mikrodenetliyici ile iletişim kurabiliriz ve veri alışverişinde bulunabiliriz. C# üzerinden serial port programı yazma işlemi oldukça basittir. Seri port öğesi eklenir ve ayarları yapılır.Seri porttan gelen verileri ayırmak için Split kullanıyoruz. 1.Arduino Kodu const int analogInPin = A0; const int analogInPin1 = A1; int sensorValue = 0; int sensorValue1 = 0; String sdeger=””; void setup() { Serial.begin(9600); } void loop() { sensorValue = analogRead(analogInPin); sensorValue1 = analogRead(analogInPin1); sdeger+=’*’; sdeger+=sensorValue; sdeger+=’*’; sdeger+=sensorValue1; sdeger+=’*’; Serial.println(sdeger ); sdeger=” “; delay(200); } 2.C# Kodu 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.Threading; using ZedGraph; using System.IO.Ports; namespace ZedGraph { public partial class Form1 : Form { GraphPane myPaneSicaklik = new GraphPane(); GraphPane myPaneTitreşim = new GraphPane(); PointPairList listPointsSicaklik = new PointPairList(); PointPairList listPointsTitreşim = new PointPairList(); LineItem myCurveSicaklik; LineItem myCurveTitreşim; double zaman = 0; public Form1() {InitializeComponent();} private void Form1_Load(object sender, EventArgs e) {Control.CheckForIllegalCrossThreadCalls = false; for (int i = 0; i < System.IO.Ports.SerialPort.GetPortNames().Length; i++) {comboBox1.Items.Add(System.IO.Ports.SerialPort.GetPortNames()[i]);} comboBox2.Items.Add(300); comboBox2.Items.Add(1200); comboBox2.Items.Add(2400); comboBox2.Items.Add(4800); comboBox2.Items.Add(9600); comboBox2.Items.Add(19200); comboBox2.Items.Add(57600); comboBox2.Items.Add(115200); GrafikHazirla();} private void GrafikHazirla() { myPaneSicaklik = zedGraphControl1.GraphPane; myPaneTitreşim = zedGraphControl2.GraphPane; myPaneSicaklik.Title.Text = “Sıcaklık – Zaman Grafiği “; myPaneTitreşim.Title.Text = “Tireşim – Zaman Grafiği “; myPaneSicaklik.XAxis.Title.Text = ” t (s) “; myPaneTitreşim.XAxis.Title.Text = ” t (s) “; myPaneSicaklik.YAxis.Title.Text = “Çıkış Sicaklik(Degree)”; myPaneTitreşim.YAxis.Title.Text = “Çıkış Tireşim (Tireşim)”; myPaneSicaklik.YAxis.Scale.Min = 0; myPaneTitreşim.YAxis.Scale.Min = 0; myPaneSicaklik.YAxis.Scale.Max = 1500; myPaneTitreşim.YAxis.Scale.Max = 1500; myCurveSicaklik = myPaneSicaklik.AddCurve(null, listPointsSicaklik, Color.Red, SymbolType.None); myCurveTitreşim = myPaneTitreşim.AddCurve(null, listPointsTitreşim, Color.Blue, SymbolType.None); myCurveSicaklik.Line.Width = 3; myCurveTitreşim.Line.Width = 3; } private void button1_Click(object sender, EventArgs e) {if (comboBox1.Text == “” && comboBox2.Text == “”) {MessageBox.Show(“PORT VE BAUNDRATE SEÇİNİZ”);} else if (comboBox1.Text == “”) {MessageBox.Show(“PORT SEÇİNİZ”);} else if (comboBox2.Text == “”) {MessageBox.Show(“BAUNDRATE SEÇİNİZ”);} else { serialPort1.PortName = comboBox1.SelectedItem.ToString(); serialPort1.BaudRate = int.Parse(comboBox2.SelectedItem.ToString()); serialPort1.Open(); MessageBox.Show(“BAĞLANTI BAŞARILI”); serialPort1.DataBits = 8; serialPort1.StopBits = System.IO.Ports.StopBits.One; serialPort1.Parity = Parity.None; serialPort1.Handshake = Handshake.None; } } private void button2_Click(object sender, EventArgs e) {serialPort1.Close();} private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { string[] data = serialPort1.ReadLine().Split(‘*’); if (data.Length == 4) { textBox1.Text = data[1]; textBox2.Text = data[2]; zaman += 0.05; listPointsSicaklik.Add(new PointPair(zaman, Convert.ToDouble(data[1].ToString()) )); listPointsTitreşim.Add(new PointPair(zaman, Convert.ToDouble(data[2].ToString()))); myPaneTitreşim.XAxis.Scale.Max = zaman; myPaneSicaklik.XAxis.Scale.Max = zaman; myPaneSicaklik.AxisChange(); myPaneTitreşim.AxisChange(); zedGraphControl1.Refresh(); zedGraphControl2.Refresh(); }} }} Çalışma Videosu; https://www.youtube.com/watch?v=JheGmH0Ne1M