Bolu Beyi tarafından yazıldı Mart - 12 - 2013 14 Yorum

C# Arayüzüyle Arduino’da LED Yakma, Animasyon OluşturmaGeçen hafta aldığım arduino mega ile kendime yeni bir hobi edindim. Yaptığım uygulamaları da burada paylaşmayı düşünüyorum ve ilk olarak led yakmadan başlayalım. Bunun için youtube’a kendi çektiğim bir videoyu ekledim, bu videodan da bakabilirsiniz. Kullanacağımız malzemeler şu şekilde:

  • Arduino Mega veya Arduino Uno
  • 5 adet LED
  • 1 adet Board
  • Dirençler ve kablolar

LED’leri 5V’a direkt olarak bağlamamanızı tavsiye ederim. Arada direnç kullanmadığınız takdirde LEDleri yakabilirsiniz(kullanılmaz hale gelebilir). Çünkü mavi led yaklaşık 3,4 V ile yanarken diğerleri yaklaşık olarak 2,7 V ile yanmaktadır. Kod kısmına geçmeden önce c#’ta güzel bir arayüz oluşturalım, videoda görüldüğü üzere formumuza 6 adet buton koyalım. Öncelikle videoyu seyretmek isterseniz:

C# Arayüzüyle Arduino’da LED Yakma, Animasyon Oluşturma

C# kodları şu şekilde:

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;

namespace ArduinoLedYakma
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
SeriPort.PortName = “COM7”;
SeriPort.BaudRate = 9600;
SeriPort.Open();
}

private void Form1_Load(object sender, EventArgs e)
{

this.Opacity = 0;
timer1.Enabled = true;
timer1.Start();
}

private void KirmiziBtn_Click(object sender, EventArgs e)
{
SeriPort.Write(“k”);
}

private void MaviBtn_Click(object sender, EventArgs e)
{
SeriPort.Write(“m”);
}

private void BeyazBtn_Click(object sender, EventArgs e)
{
SeriPort.Write(“b”);
}

private void SondurBtn_Click(object sender, EventArgs e)
{
SeriPort.Write(“s”);
}

private void Animasyon1Btn_Click(object sender, EventArgs e)
{
SeriPort.Write(“1”);
}

private void Animasyon2Btn_Click(object sender, EventArgs e)
{
SeriPort.Write(“2”);
}

private void timer1_Tick(object sender, EventArgs e)
{
this.Opacity += 0.04;
label1.Text = label1.Text.Substring(1) + label1.Text[0].ToString();
}
}
}

Burada tek yaptığımız iş seri porttan arduinoya karakter göndermek. Gönderdiğimiz karakterlere göre arduino ledlerin yanıp sönmesini sağlayacak. Arduino üzerinde LEDleri digital girişlere bağlayınız. Burada da Arduino içerisine yazacağımız kodları veriyorum. Açıklamaları yorum satırı şeklinde yaptım:

//Ledlere digital pinleri bağlıyoruz
int Led1=22;//Mavi
int Led2=24;//Beyaz
int Led3=26;//Kırmızı
int Led4=28;//Mavi
int Led5=50;//Mavi
char GelenKarakter;//C# arayüzünden gelecek karakteri tanımladıkvoid setup()
{
Serial.begin(9600);
pinMode(Led1,OUTPUT);
pinMode(Led2,OUTPUT);
pinMode(Led3,OUTPUT);
pinMode(Led4,OUTPUT);
pinMode(Led5,OUTPUT);
//Ledleri çıkış olarak tanımladık
}void loop()
{
if(Serial.available() > 0)
{
GelenKarakter = Serial.read();//C# arayüzünden gelen karakteri okuduk

if(GelenKarakter == ‘k’)//GelenKarakter “k” ise kırmızı ledi yak
{
digitalWrite(Led3, HIGH);
}

else if(GelenKarakter == ‘m’)//GelenKarakter “m” ise mavi ledi yak
{
digitalWrite(Led1, HIGH);
digitalWrite(Led5, HIGH);
digitalWrite(Led4, HIGH);
}

else if(GelenKarakter == ‘b’)//GelenKarakter “b” ise beyaz ledi yak
{
digitalWrite(Led2, HIGH);
}

else if(GelenKarakter == ‘s’)//GelenKarakter “s” ise ledleri söndür
{
digitalWrite(Led1, LOW);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
digitalWrite(Led5, LOW);
}

else if(GelenKarakter == ‘1’)//GelenKarakter “1” ise ledlerı 500 ms aralıklarla sırayla yak
{
for(int i=0; i < 5; i++ )
{
digitalWrite(Led5, LOW);
digitalWrite(Led1, HIGH);
delay(500);
digitalWrite(Led1, LOW);
digitalWrite(Led2, HIGH);
delay(500);
digitalWrite(Led2, LOW);
digitalWrite(Led4, HIGH);
delay(500);
digitalWrite(Led4, LOW);
digitalWrite(Led3, HIGH);
delay(500);
digitalWrite(Led3, LOW);
digitalWrite(Led5, HIGH);
delay(500);
}
}

else if(GelenKarakter == ‘2’)//GelenKarakter “2” ise 300 ms aralıklarla ledleri yak, söndür
{
for(int k=0; k < 7; k++)
{
digitalWrite(Led1, HIGH);
digitalWrite(Led2, HIGH);
digitalWrite(Led3, HIGH);
digitalWrite(Led4, HIGH);
digitalWrite(Led5, HIGH);
delay(300);
digitalWrite(Led1, LOW);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
digitalWrite(Led5, LOW);
delay(300);
}
}
}
}

Bugüne kadar 14 yorum yapıldı

  1. Ömer dedi ki:

    Güzel bir yazı teşekkürler 🙂

  2. Davut dedi ki:

    Çok teşekkür ederim çok faydalı bir konu olmuş. Elinize sağlık

  3. Bolu Beyi dedi ki:

    Rica ederim Teşekkür ederim 🙂

  4. Davut dedi ki:

    Ustam bende mcp2200 var 2. bölümdeki kodları nereye yazmam gerekiyor ilk bölümdekileri hallettim. Yardımcı olursanız sevinirim 🙂

    • Bolu Beyi dedi ki:

      Bu projede Arduino Mega kullandım, sizin pic programlama ile yapmanız gerekiyor mcp 2200 kullanıyorsanız. Yani ilk kısımdaki kodlar işinizi görmez 🙂 Arduino ile yapacaksanız da Arduino’nun kendi derleyicisi var, onunla derleyip kodları karta upload etmeniz gerekiyor.

  5. ceren dedi ki:

    ilk bölümdeki kodla 2.kod arasında nasıl bi bağlantı kuracağını anlamadım bide ben arduino uno var cevaplarsanız sevinirim

    • Bolu Beyi dedi ki:

      Bağlantı portlar vasıtasıyla kuruluyor. Bunu Arduino Uno ile de yapabilirsiniz fakat benim belirttiim pinler Arduino Uno’da yok. Örnek olarak kodlarda şu şekilde yazmışım:
      int Led1=22;//Mavi
      int Led2=24;//Beyaz
      int Led3=26;//Kırmızı
      int Led4=28;//Mavi
      int Led5=50;//Mavi

      Siz Uno üzerinde dijital pinlere bakıp ona göre numaralandıracaksınız.

  6. Ali dedi ki:

    Eline sağlık hocam çok güzel bir çalışma. Uzaktan kumandalı araba üzerinde denedim ve gayet güzel çalıştı.

  7. alper dedi ki:

    merhaba paylaşım için teşekkürler ama ben arduino kodunu derleyemedim.
    kopyala yapıştır yaptığım zaman baya hata veriyor.Neden olabilir

  8. Buğra dedi ki:

    merhabalar ben denedim olmadı Error 1 The name ‘SeriPort’ does not exist in the current context C:\Users\Bugra\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs 16 1 WindowsFormsApplication1
    böyle bir sorunla karşılaştım.bu yazım kısa oldu çünki yaklaşık c# 7-8 tane arduino led yakma projesi denedim buda 9 oldu sanırım hepsinde buna benzer sorunlar alıorum

  9. erkan dedi ki:

    merhaba paylaşım icin teşekürler butonlaryerine timer kullanıp örneğim karaşimşekdevresi gibi yapılabilirmi

    • Bolu Beyi dedi ki:

      Merhaba, yapılabilir tabi karaşimşek algoritmasına göre ledleri yaktırabilirsiniz. Zaten animasyon butonları da aynı mantıkla çalışıyor, sıralamayı değiştireceksiniz sadece algoritmaya göre.


Time limit is exhausted. Please reload CAPTCHA.