C# Uygulaması ile Arduino Üzerinden RGB Led Sürme
Herkese merhaba, dün C# uygulaması ile PC üzerinden Arduino'ya bağlı RGB ledi
kontrol eden bi proje paylaşmıştım. Gelen istekler üzerine bu gün hem o projeyi
anlatacağım hem de c#da serial port ile haberleşme konusuna değineceğiz.
Öncelikle bize 1 adet rgb led 3 adet uygun direnç ve breadboard gerekli.
Benim kullandığım rgb led modülü kendi üzerinde direnç içerdiği için ben tekrar direnç
bağlamıyorum. Bağlantıları resimde gösterildiği gibi yaptıktan sonra kodlarımıza geçelim.
Arduino için kodlar:
int rpin=11; //giriş pinlerini tanımlıyoruz.
int gpin=10;
int bpin=9;
String red, green, blue; //uygulamadan gönderilecek değerin atanacağı stringleri tanımlıyoruz.
int rval, gval, bval; //çıkış gücü olarak kullanacağımız değişkenler.
void setup(){
Serial.begin(9600); //9600 portundan seri bağlantıyı açıyoruz.
pinMode(rpin, OUTPUT); //pinlerimizi output olarak tanımladık.
pinMode(gpin, OUTPUT);
pinMode(bpin, OUTPUT);
}
void loop(){
if(Serial.available()>0) //eğer seri bağlantı varsa.
{
blue=Serial.readStringUntil(','); //stringi virgüle kadar blue değişkenine at.
bval=blue.toInt(); //blue stringini inte çevirerek bval değişkenine at.
analogWrite(bpin, bval); //bpin den bval değerini yaz.
green=Serial.readStringUntil(',');
gval=green.toInt();
analogWrite(gpin, gval);
red=Serial.readStringUntil(',');
rval=red.toInt();
analogWrite(rpin, rval);
}
}
Burada dikkat edilmesi gereken nokta arduinonun pcden son gelen değeri ilk olarak okuması
o yüzden pcden rgb olarak atayıp arduino kodlarında bgr sırasıyla işlem yaptırdık.
Gelelim C# kısmına
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports; //serial port kullanabilmek için
namespace rgb_led
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
serialPort1 = new SerialPort(); /*Designerda toolboxdan serialPort itemi eklemeyi unutmayın. */
serialPort1.BaudRate = 9600; //Portu belirtiyoruz.
}
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = "COM3";
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start(); //intervalı 100ms olan timer nesnemizi başlattık.
try
{
serialPort1.PortName = textBox1.Text; //port adını textBox1 den almasını sağlıyoruz.
if (!serialPort1.IsOpen) //eğer port açık değilse .
serialPort1.Open(); //portu aç.
MessageBox.Show("Bağlandı"); //bağlandı uyarısını ver.
}
catch
{
MessageBox.Show("Seri Port Hatası!");//bağlantı kurulamazsa hata bildirim mesajını göster.
}
}
private void timer1_Tick(object sender, EventArgs e) /*her 100ms de bir arduinoya değerleri gönderiyoruz.*/
{
try
{
string rval = trackBar1.Value.ToString(); //trackBar1 değeri rval değişkenine aldık.
textBox2.Text = rval; //değeri textBox2 ye yazdık
serialPort1.WriteLine(rval); //değeri seri porttan gönderip
serialPort1.WriteLine(","); //değer bitince sonuna virgül ekledik.
string gval = trackBar2.Value.ToString();
textBox3.Text = gval;
serialPort1.WriteLine(gval);
serialPort1.WriteLine(",");
string bval = trackBar3.Value.ToString();
textBox4.Text = bval;
serialPort1.WriteLine(bval);
serialPort1.WriteLine(",");
}
catch (Exception ex) { }
}
private void button2_Click(object sender, EventArgs e) //bağlantı kesme butonu
{
timer1.Stop(); //timerı durdurup.
serialPort1.Close(); //portu kapattık.
}
}
}
Yukarıda ki kodda virgüller arduinonun değerleri ayırmasını sağlıyor.
Proje dosyalarını aşağıdaki linkten indirebilirsiniz.
http://s4.dosya.tc/server/AeQu1C/RGB.rar.html
Bir başka projede görüşmek üzere 🙂
#Arduino #RehberBolumuIstiyoruz #CodeEtiketiLazim #c#
süpersiniz
Emeğinize sağlık
I use the NusbioMCU device which designed to control multiple shape of RGB LED
WS2812 from C#, VB.NET or Powershell. It is just plug and play.