Posted by : MC 8 Şubat 2015 Pazar

Merhabalar,
Uzun bir süredir arduino ve ethernet shield kullanımı ile ilgili sorular almaktayız.Bu yazımızda arduino ethernet kütüphanesi nasıl kullanacağımızdan ve bunu c# tarafında nasıl okuyabileceğimizden bahsedeceğiz

Arduino IDE yi açtığınızda yukarıdaki file menusunu sırası ile examples + ethernet + chatserver olarak ilerleyin.Aşağıdaki programı göreceksiniz.



#include <SPI.h>
#include <Ethernet.h>


byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177); //ip adresimiz



// 80 portu açıldı
EthernetServer server(80);
boolean alreadyConnected = false; //bağlı bir client varmı yok mu ?

void setup() {
  // ethernet bağlatısını sağlıyoruz
  Ethernet.begin(mac, ip);
  // bilgisayarı C# tarafından dinliyoruz
  server.begin();
 // Seri haberleşme başlatıldı.
  Serial.begin(9600);
  Serial.print("Chat server address:"); //Serial consola server adresi yazıldı
  Serial.println(Ethernet.localIP());
}

void loop() {
  // client için bekleniyor
  EthernetClient client = server.available();

  //eger ki clienttan haber gelirse merhaba de
  if (client) {
    if (!alreadyConnected) {
      // inputu temizle
      client.flush();    
      Serial.println("We have a new client");
      client.println("Hello, client!"); 
      alreadyConnected = true;
    } 

    if (client.available() > 0) {
      // clienttan gelen verileri oku
      char thisChar = client.read();
      //clienttan ne geliyorsa aynısı geri ilet
      server.write(thisChar);
      
      // clienttan gelen veriyi aynı şekilde seri consola yaz.
      Serial.write(thisChar);
    }
  }
}

Peki biz ne gibi bir değişiklik yaparak C# tarafında arduinodan gelen verileri okuruz?.Örnek olarak 1 nolu analog pinimizde bir potansiyometre bağlı olsun ve ADC den (analog - dijital çevirici ) gelen 0-1023 bilgi aralığındaki değeri C# a gönderelim.

Yukarıdaki örnek kodumuzdaki

  if (client.available() > 0) {
      // clienttan gelen verileri oku
      char thisChar = client.read();
      //clienttan ne geliyorsa aynısı geri ilet
      server.write(thisChar);
      
      // clienttan gelen veriyi aynı şekilde seri consola yaz.
      Serial.write(thisChar);
    }

Aralığında oynamalar yapacağız nasıl mı ?

  if (client.available() > 0) {
      // cleinttan gelen sensör okuma isteğini al
      char thisChar = client.read();
      if(thisCaher=="1") //1. analog pin okuma isteği geldi
      {
         server.write(analoRead(1));
      }
    }

Yukarıdaki kırmızı alanlar değiştirdiğimiz kısımlar.C# tarafında neler yapmamız gerekiyor.Socket programming ile tcp bir bağlantı sağlayacağız ve C# tarafında tcp client oluşturmamız gerekiyor.Bunu oluşturduktan sonra server olan arduinomuz ve client olan ve pc mizde çalışan C#programımız arasında tcp bağlatısı yardımı ile veri aktarımı sağlayacağız.

Özetlersek:

arduino ve bilgisayar programı arasında haberleşmeyi harfler yardımı ile sağlayacağız 1-1nolu analog pin,2-2nolu analog pin oku gibi

Yine digital çıkışlarımıza değer verdirebiliriz."A" gönder 1 nolu dijital 1 high olsun, "a" gönder 1 nolu dijital pin low konumuna geçsin gibi.

Bir sonraki yazımızda işin C# tarafına ve socket programlamaya değineceğiz .

Yazar:Caner ÇAKAR


{ 1 Comments... read them below or add one }

  1. emeginize sağlık.
    Bir sorum olacak C# 1 degerini gönderdi analog1 degerini arduino karşılık verdi analog değer c# a geldi c# bunu nasıl anlayacak 1in degeri olduğunu .
    şimdiden teşekürler(c#'ta fazla bilgim yok);

    YanıtlaSil

ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger