
Merhaba,
Yapacağımız bazı Arduino uygulamalarını bilgisayarımızla haberleştirmemiz gerekebiliyor. Bir WinForm uygulaması ile bunun nasıl yapılacağını anlatmak istedim.
Bunun için basit bir Arduino projesi oluşturup 12 ve 13.pinleri Output olarak belirledim ve seri portu dinlemeye başladım.
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
Serial.begin(9600);
}
Yaptığım projede Arduino üzerinde 13.pine yeşil, 12.pine kırmızı LED bağladım. Amacımsa seri porttaki değişiklikleri dinleyerek bunu yakıp söndürerek basit bir blink uygulaması oluşturmak. Bunun için seri portu dinleyerek bir dizi basit koşul oluşturdum.
void loop() {
if(Serial.available())
{
int a = Serial.read();
switch(a){
case '0':
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
break;
case '1':
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
break;
default:
digitalWrite(12, LOW);
digitalWrite(13, LOW);
break;
}
}
}
Uygulamanın C# tarafına gelecek olursak Visual Studio’da oluşturduğum WinForm projesine 1 Label, 2 Button, 1 ComboBox ve 1 SerialPort (System.IO.Ports.SerialPort) kontrolü ekliyorum. Ardından aşağıdaki metodu çağırarak oluşturduğum ComboBox’a aktif seri portları tanımlıyorum.
private void GetPortNames()
{
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
PortList.Items.Add(port);
}
}
Uygulama kapanırken seri portun açık kalmaması için formun FormClosing eventine aşağıdaki tanımlamayı yapıyorum.
if (serialPort.IsOpen)
{
serialPort.Write("2");
serialPort.Close();
}
Oluşturduğum ilk buton ComboBox’ta seçilen değere göre seri port bağlantısını açıyor. Bunun için aşağıdaki kodu kullanıyorum.
try
{
serialPort.PortName = PortList.SelectedItem.ToString();
serialPort.BaudRate = 9600;
serialPort.Open();
LedStateText.Text = "Yanmıyor";
ConnectButton.Enabled = false;
ChangeButton.Enabled = true;
}
catch
{
LedStateText.Text = "Bağlantı hatası!";
}
Uygulamada LEDState adında integer cinsi bir değişken oluşturuyorum ve buton kontrolümün Click eventinde aşağıdaki kodu kullanarak yanan LED’in değişmesini sağlıyorum.
if (!LEDState)
{
serialPort.Write("1");
LedStateText.Text = "Meşgul";
LEDState = true;
}
else
{
serialPort.Write("0");
LedStateText.Text = "Müsait";
LEDState = false;
}
Bunun ardından uygulamamızı çalıştırabiliriz.

Uygulamanın örnek WinForm projesini buradan indirebilirsiniz.
Uygulamanın örnek Arduino kodlarını buradan indirebilirsiniz.