Bu yazımda C# ile oluşturduğumuz arayüz ile Arduino'nun dijital çıkışlarına hükmetmeyi öğreneceğiz. Uygulamamız 2 aşamadan oluşmakta. Önce Arduino'ya yükleyeceğimiz programda hangi çıkışımızı yani ledi ON ve OFF duruma getirecek datayı belirleyeceğiz. Daha sonra da C# arayüzünden önce Port'lara bağlanmayı ve butonlara bastığımızda hangi datayı göndereceğimizi kararlaştıracağız.
C# ile ilgilenmenizi öneririm çünkü her defasında LCD bağlamak veya Serial Monitör kullanamayacağımız projeler olabilir. Tüm verileri tek arayüz üzerinden göndermek veya almak zorunda kalabilirsiniz. İnternet üzerinden C# üzerine projeleri veya arayüzü öğrenmeniz size fayda sağlar. Lafı fazla uzatmadan önce Arduino kodlarımızı vermek istiyorum;
int led = 13; // Hali hazırda bulunan ledi kullanacağım.
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop() {
if(Serial.available()) //Eğer seri haberleşme açık olursa alttaki komutlar işleyecek.
{int a=Serial.read(); //Seri haberleşme ile okunan verimize a integer değerini verdik.
if(a=='1')
{ digitalWrite(led, HIGH);} // a, 1 olursa yanacak.
else if (a == '0') // a, 0 olursa sönecek.
{digitalWrite(led, LOW);}
}
}
C# kısmımızda Toolbox'dan aldığımız nesneler, ComboBox, 3 Buton, 1 Label.
Led Yak = Buton 3
Led Söndür = Buton 2
Bağla = Buton 1
Programımıza bakarsanız daha bu kısım daha iyi anlaşılacaktır.
Arayüzü oluşturduktan sonra Components kısmından SerialPort nesnesini arayüzün üzerine atıyoruz.
Amacımız önce programı yüklemiş olduğumuz Arduino'nun portuna, bu arayüz ile bağlanarak LED YAK ve LED SÖNDÜR komutlarını kullanmak :)
C# komutlarımı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;
namespace ArduinoSerial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
serialPort1.PortName = comboBox1.Text;
serialPort1.Open();
}
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.DataSource = SerialPort.GetPortNames();
}
private void button2_Click(object sender, EventArgs e)
{
serialPort1.Write("0");
label1.Text = "LED KAPALI";
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.Write("1");
label1.Text = "LED AÇIK";
}
private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
{
}
}
}
Programın çalışabilmesi için Bilgisayarınızda Framework yüklü olması gerekmektedir.
Tüm Dosyaları İndirmek İçin Tıklayın (File>Download)
(Exe dosyası ArduinoSerial\ArduinoSerial\bin\Debug klasörünün içinde.)
Bu da C# arayüz oluşturma videomuz ve çalıştırma videomuz ;
Kolay gelsin :)...
Thanks for your best wishes. I hope that I could have help you :)
YanıtlaSilÇok sayıda buton ve led yakmak istersek serialPort1.Write("??"); değerlerini nasıl çoğaltabiliriz. Tek sayılarla 0-9 kullanarak 5 buton oluyor. 5 den fazla buton varsa ne yapmalıyız?
YanıtlaSilSadece sayı girmek zorunda değilsiniz ki , karakter de girebilirsiniz a,b,c gibi.
Silbu örnekte ledin yandığının bilgisiyle butonun rengini değiştirmek istersek neler yapmalıyız?? yani led yadığında bize bir bilgi gelmesini istesek bunu pc tarafında nasıl yapabiliriz? ledi yak butonuna bastığiımızda arduino bize ledin yandıgını yada durum değiştiğini bilgisini gönderse c# ta neler yapmalıyız?? teşekkürler
YanıtlaSilEn basit çözüm ile Led'in yanıp yanmadığını başka bir pin ile kontrol edebilirsiniz. Bu kontrolün sonucunu Lojik-1 ya da Lojik-0 olarak bir değişkene atayıp, serial.print ile c# programına gönderir, c#da da if else koşullarıyla butonun rengini değiştirebilirsiniz.
SilAçıkçası yapılabiliyor muydu hatırlamıyorum ama yanlış hatırlamıyorsam butonun rengi değiştirilebiliyordu.
Iyi gunler. Renkli nesne takibinin devami olan bir proje yapiyorum. Bu projede buton kullanmadan ledi yakmak istiyorum. Mesela picturebox ı 6 bolgeye ayırdığımızı düşünürsek , ve kameraya bir cisim tutarsak , bu cisim 1. Bolgedeyken 1 led yansin . cismi 2.bolgeye getirdiğim zaman 1 sönüp 2. Bölgenin ledi yansin... Bunu buton kullanmadan nasil yazabilirim
YanıtlaSil