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 (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[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};//mac adresi tanımlı
IPAddress ip(169, 254, 48, 220); //arduinomuzun ip si
IPAddress gateway(192, 168, 1, 1); //alt ağ geçidi
IPAddress subnet(255, 255, 255, 0);//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_CS, OUTPUT);
digitalWrite(SDCARD_CS, HIGH);
Ethernet.begin(mac, ip, gateway, subnet);// Ethernet portumuzu başlatıyoruz
server.begin();// server başlatıldı clientı bekliyoruz
pinMode(13, OUTPUT); //13 nolu pine ledimizi bağlayacağız output yaptık
pinMode(2, OUTPUT); //2 nolu pine ledimizi bağlayacağız output yaptık
pinMode(3, OUTPUT); //3 nolu pine ledimizi bağlayacağız output yaptık
pinMode(5, OUTPUT); //5 nolu pine ledimizi bağlayacağız output yaptık
pinMode(6, OUTPUT); //6 nolu pine ledimizi bağlayacağız output yaptık
pinMode(7, OUTPUT); //7 nolu pine ledimizi bağlayacağız output yaptık
pinMode(8, OUTPUT); //8 nolu pine ledimizi bağlayacağız output yaptık
pinMode(9, OUTPUT); //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(2, HIGH); //2 nolu pine baglı olan ledi yak
break;
case 'A':
digitalWrite(2, LOW); //2 nolu pine bağlı ledi söndür
break;
case 'b':
digitalWrite(3, HIGH); //3 nolu pine baglı olan ledi yak
break;
case 'B':
digitalWrite(3, LOW); //3 nolu pine bağlı ledi söndür
break;
case 'c':
digitalWrite(5, HIGH); //5 nolu pine baglı olan ledi yak
break;
case 'C':
digitalWrite(5, LOW); //5 nolu pine bağlı ledi söndür
case 'd':
digitalWrite(6, HIGH); //6 nolu pine baglı olan ledi yak
break;
case 'D':
digitalWrite(6, LOW); //6 nolu pine baglı olan ledi söndür
break;
case 'e':
digitalWrite(7, HIGH); //7 nolu pine baglı olan ledi yak
break;
case 'E':
digitalWrite(7, LOW); //7 nolu pine baglı olan ledi söndür
break;
case 'f':
digitalWrite(8, HIGH); //8 nolu pine bağlı ledi yak
break;
case 'F':
digitalWrite(8, LOW); //8 nolu pine baglı olan ledi söndür
break;
case 'g':
digitalWrite(9, HIGH); //9 nolu pine baglı olan ledi yak
break;
case 'G':
digitalWrite(9, LOW); //9 nolu pine baglı olan ledi söndür
break;
default:
for (int analogChannel = 0; analogChannel <= 5; analogChannel++)
{
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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.Length);
serverStream.Flush();
}
private void button1_Click_1(object sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(gonderi, 0, gonderi.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 sender, EventArgs 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(inStream, 0, inStream.Length);
readData = System.Text.Encoding.ASCII.GetString(inStream, 0, bytesRead);
msg();
}
}
private void msg()
{
if (readData.Substring(0, 4) == "WW0 ")
{
label1.Text = readData.Substring(4, readData.Length - 4);
}
else if (readData.Substring(0, 4) == "WW1 ")
{
label2.Text = readData.Substring(4, readData.Length - 4);
}
else if (readData.Substring(0, 4) == "WW2 ")
{
label3.Text = readData.Substring(4, readData.Length - 4);
}
else if (readData.Substring(0, 4) == "WW3 ")
{
label4.Text = readData.Substring(4, readData.Length - 4);
}
else if (readData.Substring(0, 4) == "WW4 ")
{
label5.Text = readData.Substring(4, readData.Length - 4);
}
else if (readData.Substring(0, 4) == "WW5 ")
{
label6.Text = readData.Substring(4, readData.Length - 4);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Interval = 500;
NetworkStream serverStream = arduinom.GetStream();
byte[] gonderi = System.Text.Encoding.ASCII.GetBytes("2");
serverStream.Write(gonderi, 0, gonderi.Length);
serverStream.Flush();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
(http://s12.postimg.cc/khe1xjtux/Ekran_G_r_nt_s.gif) (http://postimg.cc/image/khe1xjtux/)
Hocam ellerinize saglik
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.InvokeRequired) this.Invoke(new MethodInvoker(msg));
else if (readData.Substring(0, 4) == "WW0 ")
{
label1.Text = readData.Substring(4, readData.Length - 4);
}
else if (readData.Substring(0, 4) == "WW1 ")
{
label2.Text = readData.Substring(4, readData.Length - 4);
}
else if (readData.Substring(0, 4) == "WW2 ")
{
label3.Text = readData.Substring(4, readData.Length - 4);
}
else if (readData.Substring(0, 4) == "WW3 ")
{
label4.Text = readData.Substring(4, readData.Length - 4);
}
else if (readData.Substring(0, 4) == "WW4 ")
{
label5.Text = readData.Substring(4, readData.Length - 4);
}
else if (readData.Substring(0, 4) == "WW5 ")
{
label6.Text = readData.Substring(4, readData.Length - 4);
}
}
Peki Visual Basic üzerinden arduinoya "a" yada "b" değilde "123" sayısını göndermek istersek nasıl bir yol izlemeliyiz.