Arduino C# Bağlantısı

Başlatan baran123, 19 Ocak 2014, 14:51:57

baran123

Merhaba arkadaşlar internetten arduinoyu c#ile kontrol eden bir proje buldum fakat cok kucuk 2 hata veriyor bilenler için basit gibi yardımcı olursanız sevinirim

Kolay gelsin

Arduino Kodu
int Led1 = 7;
int Led2 = 8;
int Led3 = 9;
int Led4 = 10;
int Led5 = 11;

void setup()
{
  Serial.begin(9600);
  
  pinMode(Led1,OUTPUT);
  pinMode(Led2,OUTPUT);
  pinMode(Led3,OUTPUT);
  pinMode(Led4,OUTPUT);
  pinMode(Led5,OUTPUT);
}

void loop()
{
  if(Serial.available() > 0)
  {
    GelenKarakter = Serial.read();//C# arayüzünden gelen karakteri okuduk
  
    if(GelenKarakter == 'a')
    {
      digitalWrite(Led3, HIGH);
    }
  
    else if(GelenKarakter == 'b')
    {
      digitalWrite(Led1, HIGH);
      digitalWrite(Led5, HIGH);
      digitalWrite(Led4, HIGH);
    }
  
    else if(GelenKarakter == 'c')
    {
      digitalWrite(Led2, HIGH);
    }
  
    else if(GelenKarakter == 'd')
    {
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
    }
  
    else if(GelenKarakter == 'e')
    {
      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 == 'f')
    {
      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);
      }
    }
  }
}


c#kodu

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 Arduino
{
    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('a');
        }

        private void MaviBtn_Click(object sender, EventArgs e)
        {
            SeriPort.Write('b');
        }

        private void BeyazBtn_Click(object sender, EventArgs e)
        {
            SeriPort.Write('c');
        }

        private void SondurBtn_Click(object sender, EventArgs e)
        {
            SeriPort.Write('d');
        }

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

        private void Animasyon2Btn_Click(object sender, EventArgs e)
        {
            SeriPort.Write('f');
        }

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

mehmet

Keşke hataları da yazsanız...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

baran123

#2
c# böyle bir hata veriyor

"Error   4   The name 'SeriPort' does not exist in the current context   C:\Users\EKREM\Desktop\Arduino\Arduino\Form1.cs   32   13   Arduino"


arduino ise

"GelenKarakter was not declared in this scope"

mesaj birleştirme:: 19 Ocak 2014, 15:31:08

arduino da galiba sorunu buldum "int GelenKarakter;" olarak tanımladım sizce doğrumudur ?

c# sorunu ise hala devam ediyor

barisertekin

Bu kadar bilgiden ancak tahmin edebilirim. Runtime değil Compile Time hatası alıyorsunuz.
Kodları kopyalamışsınız ama Dizayn tarafında da toolbox'tan SerialPort nesnesi ekleyip ismini SeriPort yapmanız gerekiyor.

Veya kod tarafında Global olarak ;
SerialPort SeriPort = new SerialPort(); kodunu eklemeniz gerekiyor.

baran123

teşekkürler c# düzeldi 2 küçük sorum daha kaldı :)
private void Off_Click(object sender, EventArgs e)
        {
            serialPort1.Write("d");
        }
bu kısım doğrumu yoksa ("d") yerine ('d') mi olmalı

diğeri ise

arduino kısmında if yerine else if yazınca hata alıyorum

int GelenKarakter;

void setup()
{
  Serial.begin(9600);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop()
{
  if(Serial.available() > 0)
  {  
    GelenKarakter = Serial.read();//C# arayüzünden gelen karakteri okuduk
  
    if(GelenKarakter == 'a')
    {
      digitalWrite(9, HIGH);
    }
  
    else if(GelenKarakter == 'b')
    {
      digitalWrite(10, HIGH);
    }

    else if(GelenKarakter == 'c');
    {
      digitalWrite(11, HIGH);
    }

    else if(GelenKarakter == 'd')
    {
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
    }
  }
}


hata: "expected ')' before 'else'"

barisertekin

Debug yaparak anlamaya çalışalım. IF yapılarını unutalım ve Gelen karakteri direk ekrana yazdıralım.
Bakalım Arduino'ya ne geliyor. Sonra IF'leri ona göre düzenlersiniz.

int GelenKarakter;

void setup()
{
  Serial.begin(9600);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop()
{
  if(Serial.available() > 0)
  {  
    GelenKarakter = Serial.read();//C# arayüzünden gelen karakteri okuduk

    digitalWrite(GelenKarakter, HIGH);
   
  }
}

baran123

2 tane else if koyabiliyorum ama 3. koyduğum zaman hata veriyor

"expected ')' before "else" " şeklinde

kodun son hali
int GelenKarakter;

void setup()
{
  Serial.begin(9600);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop()
{
  if(Serial.available() > 0)
  {  
    GelenKarakter = Serial.read();
  
    if(GelenKarakter == 'a')
    {
      digitalWrite(9, HIGH);
    }
  
    else if(GelenKarakter == 'b')
    {
      digitalWrite(10, HIGH);
    }

    else if(GelenKarakter == 'c');
    {
      digitalWrite(11, HIGH);
    }
    
    else if(GelenKarakter == 'd')
    {
      digitalWrite(12, HIGH);
    }
  }
}

barisertekin

#7
Ama benim dediğimi yapmıyorsun :)

int GelenKarakter diye tanımlamışsın. if (GelenKarakter == 'a') gibi birşey diyemezsin.

if(GelenKarakter == 61) diyebilirsin. 61 küçük a harfinin hex karşılığı. O yüzden diyorum önce gelen karakteri direk ekrana yazdır. Ne geliyormuş bir anlayalım.
{
      digitalWrite(9, HIGH);
}

Bir önceki mesajımda yazdığım kodu kullan.

bkz. http://www.cdrummond.qc.ca/cegep/informat/professeurs/alain/images/ASCII1.GIF

baran123

suan elimde arduino yok o yüzden deneyemiyorum

mehmet

#9
int GelenKarakter;

void setup()
{
  Serial.begin(9600);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
}

void loop()
{
  if(Serial.available() > 0)
  {  
    GelenKarakter = Serial.read();
  
    if(GelenKarakter == 'a')
    {
      digitalWrite(9, HIGH);
    }
  
    else if(GelenKarakter == 'b')
    {
      digitalWrite(10, HIGH);
    }

    else if(GelenKarakter == 'c')
    {
      digitalWrite(11, HIGH);
    }
    
    else if(GelenKarakter == 'd')
    {
      digitalWrite(12, HIGH);
    }
  }
}


mesaj birleştirme:: 19 Ocak 2014, 19:58:26

Tek tırnak içerisinde olduğu için harf kullanılabilir. Ancak yazılamayan
karakterler için ASCII karşılığındaki rakam kullanılabilir.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

1nsane

switch yapısı kullanmanızı tavsiye ederim.