18 Kasım 2019, 06:51:00

Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d


Visual Studio Arduino W5100 Ethernet Shield Uygulaması

Başlatan crazy, 26 Eylül 2016, 23:08:50

crazy

Merhaba uygulama ile arduino ethernet shiled W5100  internet üzerinden led yakıp röle kontrolu  yapabilirsiniz.Analog pinlerinden okunan değerleri v.s görebilirsiniz.
Program kodları http://elektro-blogger.blogspot.com.tr/2015/03/arduino-ve-c-kullanarak-adim-adim.html alıntıdır.
Sadece arduinodan  visual studio programna  veri gönderimi için  kodlar eklenmiştir.
Arduinodan gelen veri paketini  visual stuido  da  ayırmak için yardımcı olan @muhittin_kaplan  hocama teşekkür ederim.

Arduino   Kodları
#include <SPI.h>
//#include <EthernetV2_0.h>
#include <Ethernet.h>

//Arduino 13,12,11,10 ve 4 pinleri W5100 bağlantıları için
//4 nolu pin w5100 dışarı cikartilip çıkış olarak kullanilabilir.sd karti kullanmiyacak iseniz....
byte mac[] = {0xDE0xAD0xBE0xEF0xFE0xED};//mac adresi tanımlı
IPAddress ip(16925448220); //arduinomuzun ip si
IPAddress gateway(19216811); //alt ağ geçidi
IPAddress subnet(2552552550);//alt ağ maskesi
EthernetServer server(80);//Haberleşeceğimiz port numarası
boolean alreadyConnected false// Client baglımı değilmi ? değişkenimiz
#define W5200_CS 10
#define SDCARD_CS 4

void setup() {
  
pinMode(SDCARD_CSOUTPUT);
  
digitalWrite(SDCARD_CSHIGH);

  
Ethernet.begin(macipgatewaysubnet);// Ethernet portumuzu başlatıyoruz
  
server.begin();// server başlatıldı clientı bekliyoruz

  
pinMode(13OUTPUT); //13 nolu pine ledimizi bağlayacağız output yaptık
  
pinMode(2OUTPUT); //2 nolu pine ledimizi bağlayacağız output yaptık
  
pinMode(3OUTPUT); //3 nolu pine ledimizi bağlayacağız output yaptık
  
pinMode(5OUTPUT); //5 nolu pine ledimizi bağlayacağız output yaptık
  
pinMode(6OUTPUT); //6 nolu pine ledimizi bağlayacağız output yaptık
  
pinMode(7OUTPUT); //7 nolu pine ledimizi bağlayacağız output yaptık
  
pinMode(8OUTPUT); //8 nolu pine ledimizi bağlayacağız output yaptık
  
pinMode(9OUTPUT); //9 nolu pine ledimizi bağlayacağız output yaptık


}
void loop() {

  
EthernetClient client server.available();//Client isteği geldiğinde client adında programımız baglanacak
  
if (client) {// program baglandımı ?
    
if (!alreadyConnected//Program önceden bağlımıydı ? bağlantı geldi ise
      
client.flush();
    
alreadyConnected true;//Şu anda bağlı bilgisini true yap
  
}

  if (
client.available() > 0) {//Client bağlı mı ?
    
char thisChar client.read();//Client bağlı ise gelen veriyi tek karakterlik değişken içine al


    
switch (thisChar) {
      case 
'a':
        
digitalWrite(2HIGH); //2 nolu pine baglı olan ledi yak
        
break;
      case 
'A':
        
digitalWrite(2LOW); //2 nolu pine bağlı ledi söndür
        
break;
      case 
'b':
        
digitalWrite(3HIGH); //3 nolu pine baglı olan ledi yak
        
break;
      case 
'B':
        
digitalWrite(3LOW); //3 nolu pine bağlı ledi söndür
        
break;
      case 
'c':
        
digitalWrite(5HIGH); //5 nolu pine baglı olan ledi yak
        
break;
      case 
'C':
        
digitalWrite(5LOW); //5 nolu pine bağlı ledi söndür
      
case 'd':
        
digitalWrite(6HIGH); //6 nolu pine baglı olan ledi yak
        
break;
      case 
'D':
        
digitalWrite(6LOW); //6 nolu pine baglı olan ledi söndür
        
break;
      case 
'e':
        
digitalWrite(7HIGH); //7 nolu pine baglı olan ledi yak
        
break;
      case 
'E':
        
digitalWrite(7LOW); //7 nolu pine baglı olan ledi söndür
        
break;
      case 
'f':
        
digitalWrite(8HIGH); //8 nolu pine bağlı ledi yak
        
break;
      case 
'F':
        
digitalWrite(8LOW); //8 nolu pine baglı olan ledi söndür
        
break;
      case 
'g':
        
digitalWrite(9HIGH); //9 nolu pine baglı olan ledi yak
        
break;
      case 
'G':
        
digitalWrite(9LOW); //9 nolu pine baglı olan ledi söndür
        
break;
      default:
        for (
int analogChannel 0analogChannel <= 5analogChannel++)
        {
          
int sensorReading analogRead(analogChannel);
          
client.print((String) + ("WW") + (analogChannel) + ( "  " ) + (sensorReading));
          
delay(60);


        }
    }
  }
}






Visual Studio Kodları
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;//Eklediğimiz .net için socket kütüphanemiz
namespace WindowsFormsApplication7
{

    public 
partial class Form1 Form
    
{

        
System.Net.Sockets.TcpClient arduinom = new System.Net.Sockets.TcpClient(); //arduinom adında yeni bir tcp client tanımladık
        
string readData null;

        public 
Form1()
        {
            
MessageBox.Show("Program açılıyor"); // baglantı saglanırsa ekrana baglantı saglandı bilgisi basılıyor

            
CheckForIllegalCrossThreadCalls false;
            
InitializeComponent();

            
yak.Enabled false;//baslangıcta hata ile basmamak icin inaktif olsun baglantı olmadan veri gondermeye kalkmayayım
            
sondur.Enabled false//baslangıcta hata ile basmamak icin inaktif olsun baglantı olmadan veri gondermeye kalkmayayım
        
}

        private 
void yak_Click_1(object senderEventArgs e)
        {
            
//MessageBox.Show("yandı");
            
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
            
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("a");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
            
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
            
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz.
        
}

        private 
void sondur_Click_1(object senderEventArgs e)
        {
            
//yukarıda belirttiğimiz işlemi led "A" göndermek için tekrarlıyoruz
            
NetworkStream serverStream arduinom.GetStream();
            
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("A");
            
serverStream.Write(gonderi0gonderi.Length);
            
serverStream.Flush();
        }

        private 
void button1_Click_1(object senderEventArgs e)
        {
            
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
            
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("b");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
            
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
            
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz.
        
}

        private 
void button2_Click(object senderEventArgs e)
        {
            
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
            
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("B");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
            
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
            
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz.
        
}
      
      private 
void button3_Click_1(object senderEventArgs e)
      {
          
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
          
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("c");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
          
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
          
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz.
      
}

        private 
void button4_Click_1(object senderEventArgs e)
        {
            
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
            
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("C");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
            
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
            
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz

        
}

   private 
void button5_Click_1(object senderEventArgs e)
        {
            
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
            
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("d");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
            
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
            
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz
        
}

    

    private 
void button6_Click(object senderEventArgs e)
    {
        
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
        
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("D");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
        
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
        
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz
    
}

    private 
void button7_Click(object senderEventArgs e)
    {
        
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
        
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("e");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
        
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
        
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz
    
}

   private 
void button8_Click(object senderEventArgs e)
    {
        
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
        
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("E");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
        
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
        
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz
    
}

    private 
void button9_Click(object senderEventArgs e)
    {
        
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
        
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("f");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
        
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
        
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz
    
}
        
           private 
void button10_Click(object senderEventArgs e)
           {
               
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
               
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("F");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
               
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
               
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz
           
}

             private 
void button11_Click_1(object senderEventArgs e)
             {
               
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
                 
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("g");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
                 
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
                 
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz
             
}


            private 
void button12_Click_1(object senderEventArgs e)
             {
            
NetworkStream serverStream arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
                 
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("G");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
                 
serverStream.Write(gonderi0gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
                 
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz
             
}

        private 
void baglan_Click_1(object senderEventArgs e)
        {
            
//MessageBox.Show("baglantı saglandı"); // baglantı saglanırsa ekrana baglantı saglandı bilgisi basılıyor
            
try
            {
                
arduinom.Connect("169.254.48.220"80);// 23 portu üzerinde arduino ip si ile baglanmayı deniyoruz
                
MessageBox.Show("Baglantı saglandı"); // baglantı saglanırsa ekrana baglantı saglandı bilgisi basılıyor
                
baglan.Enabled false;//2 kere baglanamayacağımızdan baglan butonunu inaktif edeiyoruz
                
yak.Enabled true;// baglantı var veri gonderebilirim yak aktif olsun
                
sondur.Enabled true//baglantı var veri gonderebilirim sondur aktif olsun
                
timer1.Start();

                
// t = new Thread(new ThreadStart(arduino_oku));// threadi arduino oku fonksiyonuna baglıyoruz
                // t.Start();// baglantı saglandıktan sonra thread basladı
                
Thread ctThread = new Thread(getMessage);
                
ctThread.Start();


            }
            catch (
Exception)// baglantı kurulamadı ise
            
{

                
MessageBox.Show("Baglantı yok tekrar baglanmayı deneyiniz");//baglantı yok tekrar baglan uyarısı ekrana bastırılıyor
                
yak.Enabled false;// baglantı yok veri gonderemem yak butonu inaktif olsun
                
sondur.Enabled false;//baglantı yok veri gonderemem sondur butonu inaktif olsun
                
baglan.Enabled true;//baglan butonu aktif olsun tekrar baglanmayı deneyebileyim
            
}
        }


        private 
void getMessage()
        {
            
NetworkStream serverStream arduinom.GetStream();

            while (
true)
            {
                
byte[] inStream = new byte[1024];
                
int bytesRead serverStream.Read(inStream0inStream.Length);
                
readData System.Text.Encoding.ASCII.GetString(inStream0bytesRead);
               
msg();
            
            }
        }


        private 
void msg()
        {

            if (
readData.Substring(04) == "WW0 ")
            {

                
label1.Text readData.Substring(4readData.Length 4);

            }
            else if (
readData.Substring(04) == "WW1 ")
            {
                
label2.Text readData.Substring(4readData.Length 4);
            }

            else if (
readData.Substring(04) == "WW2 ")
            {
                
label3.Text readData.Substring(4readData.Length 4);
            }
            else if (
readData.Substring(04) == "WW3 ")
            {
                
label4.Text readData.Substring(4readData.Length 4);
            }
            else if (
readData.Substring(04) == "WW4 ")
            {
                
label5.Text readData.Substring(4readData.Length 4);
            }
            else if (
readData.Substring(04) == "WW5 ")
            {
                
label6.Text readData.Substring(4readData.Length 4);
            }

        }
        private 
void Form1_FormClosing(object senderFormClosingEventArgs e)
        {

        }

        private 
void timer1_Tick(object senderEventArgs e)
        {
            
timer1.Interval 500;
            
NetworkStream serverStream arduinom.GetStream();
            
byte[] gonderi System.Text.Encoding.ASCII.GetBytes("2");
            
serverStream.Write(gonderi0gonderi.Length);
            
serverStream.Flush();
        }



        private 
void Form1_Load(object senderEventArgs e)
        {

        }

       

        
    }

}





muhittin_kaplan


crazy

Sağolun hocam  CheckForIllegalCrossThreadCalls = false; komutunu dahil etmeyince  program açıldıktan bir süre duruyordu.Fakat bu komutun kullanımı iyi değilmiş.CheckForIllegalCrossThreadCalls = false; iptal edip  aşadaki gibi kullanırsak program sorunsuz çalıışıyor.

private void msg()
        {
            if (
this.InvokeRequiredthis.Invoke(new MethodInvoker(msg));

             else if (
readData.Substring(04) == "WW0 ")
             {

                 
label1.Text readData.Substring(4readData.Length 4);

             }
             else if (
readData.Substring(04) == "WW1 ")
             {
                 
label2.Text readData.Substring(4readData.Length 4);
             }

             else if (
readData.Substring(04) == "WW2 ")
             {
                 
label3.Text readData.Substring(4readData.Length 4);
             }
             else if (
readData.Substring(04) == "WW3 ")
             {
                 
label4.Text readData.Substring(4readData.Length 4);
             }
             else if (
readData.Substring(04) == "WW4 ")
             {
                 
label5.Text readData.Substring(4readData.Length 4);
             }
             else if (
readData.Substring(04) == "WW5 ")
             {
                 
label6.Text readData.Substring(4readData.Length 4);
             }


        }

antison

Peki Visual Basic üzerinden arduinoya "a" yada "b" değilde "123" sayısını göndermek istersek nasıl bir yol izlemeliyiz.