Merhaba arkadaşlar bugün sizlerle C#.NET ve Arduino kullanarak yapmış olduğum ufak bir uygulamayı paylaşmak istiyorum. Uygulamada kullanılan potansiyometre hakkında detaylı bilgiye bu adresten ulaşabilirsiniz. Öncelikle devremizin kurulumu aşağıdaki gibidir.
Gerek C# gerekse Arduino kodlarında bir çok açıklama satırı ekledim. Fakat kısaca uygulamayı anlatacak olursam, öncelikle Arduino’yu bilgisayarımıza taktığımız zaman kullanılan port’u öğrenmemiz gerekmektedir. Bu bilgiye aygıt yöneticisinden ulaşabilirsiniz. (Arduino IDE’de sağ altta tarafta da hangi COM portu olduğunu görebilirsiniz.) Uygulamada da olduğu gibi COM4 kullanıldığını varsayarsak bu bilgiyi program üzerinde gerekli textBox’a yazıyoruz. Ardından “Başlat” butonu ile bağlantıyı gerçekleştiriyoruz. Video’da da gösterildiği üzere “Başlat” ve “Durdur” butonlarına bastığımız zaman aşağıda label ile bağlantı durumunu görebiliyoruz. Bağlantı başarılı bir şekilde gerçekleştirildikten sonra pot’un değeri ile oynayarak progressBar’ın doluluk oranını değiştirirken, “Pot Değeri” yazan textBox’ın içerisinde de sayısal olarak değeri görmekteyiz. Form ekranını tasarlarken progressBar’ın maksimum değerini 1023 yapmak görsel olarak daha doğru sonuçlar vermektedir.
Aşağıda C# ve Arduino’ya ait kodları açıklamaları ile birlikte bulabilirsiniz.
Arduino Kodları
int pot=A1; //analog giriş pini int deger=0; char m; void setup() { Serial.begin(9600); //seri haberleşmeyi başlatıyoruz } void loop() { if(Serial.available()>0) //herhangi bir veri geldi mi? { m=Serial.read(); //seri port ile gelen veriyi oku ve bir değişkene ata } if(m=='e') //eğer okunan değer "e" ise { deger=analogRead(pot); //potun değerini analog olarak oku Serial.println(deger); //deger sonuçlarını seri monitörde görüntülüyoruz delay(100); } }
C# Kodları (SerialPort’u projenize eklemeyi unutmayınız.)
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.Ports; //IO sınıfını eklemeyi unutmayın namespace Arduino_Pot_Uygulamasi { public partial class Form1 : Form { SerialPort sPort; //SerialPort sınıfından sPort adında bir nesne oluşturuyoruz public Form1() { InitializeComponent(); sPort = new SerialPort(); sPort.BaudRate = 9600; //sPort nesnesinin hızını ayarlıyoruz } private void btnBaslat_Click(object sender, EventArgs e) { timer1.Start(); //Başlat butonu ile bağlantıyı ve timer nesnesini çalıştırıyoruz try { sPort.PortName = txtCom.Text; //sPort nesnesinin ismini textbox ile eşitliyoruz if (!sPort.IsOpen) //eğer bağlantı açıksa diyerek oluşan durumları yazıyoruz { sPort.Open(); label3.Text = "Bağlantı Kuruldu"; label3.ForeColor = Color.Green; //yazı rengini yeşil yapıyoruz label3.Visible = true; //başlangıçta kapalı olan durum labelını açıyoruz } } //oluşabilecek hatalarda programın aksamaması için try/catch kullandık //catch içerisine try bloğu dışında oluşabilecek durumları yazıyoruz catch { label3.Text = "Bağlantı Kurulamadı"; label3.ForeColor = Color.Red; //yazı rengini kırmızı yapıyoruz label3.Visible = true; //başlangıçta kapalı olan durum labelını açıyoruz } } //durdur butonu ile timer nesnesini durdurup bağlantıyı kesiyoruz //ayrıca programa özel label, textbox gibi toolların özelliklerini değiştiriyoruz private void btnDurdur_Click(object sender, EventArgs e) { timer1.Stop(); sPort.Close(); label3.Text = "Bağlantı Kesildi"; label3.ForeColor = Color.Red; //yazı rengini kırmızı yapıyoruz label3.Visible = true; //başlangıçta kapalı olan durum labelını açıyoruz txtPot.Text = ""; //COM Port textbox'ın içini silerek sıfırlıyoruz progressBar1.Value = 0; //progressbarı sıfırlıyoruz } private void timer1_Tick(object sender, EventArgs e) { try { sPort.Write("e"); //data karşılaştırması için örnek bir değer atıyoruz int receiveddate = Convert.ToInt16(sPort.ReadExisting()); txtPot.Text = receiveddate.ToString(); //gelen sayısal veriyi stringe çevirerek textbox'a atıyoruz progressBar1.Value = Convert.ToInt16(txtPot.Text); //gelen değerleri progressbar için tekrar int'e çeviriyoruz System.Threading.Thread.Sleep(100); } catch (Exception) { } } } }
Uygulama Videosu
https://www.youtube.com/watch?v=dblSX-PdZWY&feature=autoshare
Uygulama hakkındaki sorularınızı konuyu cevaplayarak veya mail atarak sorabilirsiniz arkadaşlar.
Bir sonraki yazımda görüşmek dileğiyle hoşçakalın.