Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: baran123 - 19 Ocak 2014, 14:51:57

Başlık: Arduino C# Bağlantısı
Gönderen: baran123 - 19 Ocak 2014, 14:51:57
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();
        }
    }
}
Başlık: Ynt: Arduino C# Bağlantısı
Gönderen: mehmet - 19 Ocak 2014, 15:12:03
Keşke hataları da yazsanız...
Başlık: Ynt: Arduino C# Bağlantısı
Gönderen: baran123 - 19 Ocak 2014, 15:14:46
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
Başlık: Ynt: Arduino C# Bağlantısı
Gönderen: barisertekin - 19 Ocak 2014, 15:32:20
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.
Başlık: Ynt: Arduino C# Bağlantısı
Gönderen: baran123 - 19 Ocak 2014, 15:37:10
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'"
Başlık: Ynt: Arduino C# Bağlantısı
Gönderen: barisertekin - 19 Ocak 2014, 15:44:28
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);
   
  }
}
Başlık: Ynt: Arduino C# Bağlantısı
Gönderen: baran123 - 19 Ocak 2014, 16:08:26
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);
    }
  }
}
Başlık: Ynt: Arduino C# Bağlantısı
Gönderen: barisertekin - 19 Ocak 2014, 16:14:27
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 (http://www.cdrummond.qc.ca/cegep/informat/professeurs/alain/images/ASCII1.GIF)
Başlık: Ynt: Arduino C# Bağlantısı
Gönderen: baran123 - 19 Ocak 2014, 18:08:15
suan elimde arduino yok o yüzden deneyemiyorum
Başlık: Ynt: Arduino C# Bağlantısı
Gönderen: mehmet - 19 Ocak 2014, 19:52:21

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.
Başlık: Ynt: Arduino C# Bağlantısı
Gönderen: 1nsane - 19 Ocak 2014, 22:18:57
switch yapısı kullanmanızı tavsiye ederim.