Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 35

Seri Port ile İletişim

Seri Port ile İletişim


Portu Açmak için:
if (SeriPortum.IsOpen == false)
{ SeriPortum.Open(); }
Portu Kapamak için:
SeriPortum.Close();
• string veri = SeriPortum.ReadLine(); //Seri
porttan veri okur.
• SeriPortum.WriteLine(veri); //Seri porta veri
yazar.
Seri Port Kontrol Özellikleri
• serialPort.BaudRate: SerialPort sınıfının BaudRate
isimli özelliği bilgisayardan kontrol edeceğiniz sistem ile
haberleşme esnasında ki veri iletişimi hızı. Bu özellik
sistemden sisteme değişiklik göstermektedir. BaudRate
için şunu söyleyebiliriz saniye gönderilen bit sayısı, eğer
sisteminizle iletişim hızınız 9600 ise bilgisayarın seri
portundan saniyede 9600 bit veri gönderip alabilirsiniz
demektir. Bu yüzden eğer sisteminiz 19200 ise ve siz
bilgisayar programından bu özelliği set etmez iseniz
verileri sağlıklı bir şekilde gönderip alamayacaksınız
çünkü bu özelliğin default değeri 9600.
• serialPort.IsOpen: SerialPort sınıfının IsOpen
isimli özelliği seri portun açık olup olmadığını
bool türünden söyleyen bir özellik. Portu
kullanmadan önce mutlaka açık olup
olmadığını kontrol etmenizde fayda var eğer
portu kullandıktan sonra kapatmadan tekrar
açmaya çalışırsanız programınız hata
verecektir.
• serialPort.PortName: SerialPort sınıfının
PortName isimli özelliği seri portunuzun ismini
isteyecektir. Eğer bir çevirici kullanmadan direk
seri porta bağladıysanız ‘COM1’, bir çevirici
aracılığıyla ismini değişti ise ‘COM5’, ‘COM6’
vb. string türünden port isminizi girebilirsiniz.
• serialPort.ReadTimeout: SerialPort sınıfının
ReadTimeout isimli özelliği seri portun
cihazdan kaç saniye boyunca cevap
beklemesini istiyorsanız onu int türünden mili
saniye cinsinden girmeniz gerekiyor. Eğer
istediğiniz cihazdan 3 saniye boyunca cevap
gelmez ise hata vermesi ise buraya
serialPort.ReadTimeout = 3000 demeniz
gerekiyor.
• serialPort.WriteTimeout: SerialPort sınıfının
WriteTimeout isimli özelliği ise seri
portunuzun yazma işlemini kaç saniye
boyunca sürdürmesini istiyorsanız yine int
türünden mili saniye cinsinden bu özelliği set
etmeniz gerekmektedir.
ComboBox’ın içini Port isimleri ile
Doldurmak
for (int i = 0; i < 30; i++)
{
serialport.PortName = "COM" + i.ToString();
serialport.Open();
comNo_cb.Items.Add(serialport.PortName);
serialport.Close();
}
Veya
comNo_cb.Items.Add(SerialPort.GetPortNames());
Seri Port Fonksiyonları
• serialPort.Open(): SerialPort sınıfının Open
isimli fonksiyonu seri portunuzu açmanıza
yarar. Hemen şunu söylemekte fayda var bu
işlemi yapmadan önce bir hata almak
istemiyorsanız port adını, baudRate’inizi
belirtmeyi unutmayın. Eğer port adını
belirtmez iseniz veya yanlış yazarsanız hata
alacaksınız.
• serialPort.Read(byte[] buffer, int offset, int
count): SerialPort sınıfının Read isimli fonksiyonu
seri portunuzdan veri okumanızı sağlayan bir
fonksiyondur. İlk parametresi byte türünden bir
dizi, ikinci parametre dizinin kaçıncı indisinden
itibaren veri yerleştireceğini, son parametresine
ise kaç byte veri okuyacağınızı söylemeniz
gerekiyor. İlk parametre char türünden bir dizide
olabilir. Fonksiyonun geri dönüş değeri ise kaç
byte okunduysa onu size int türünden söyler.
• serialPort.ReadByte(): SerialPort sınıfının
ReadByte isimli fonksiyonu seri portdan
sadece bir byte okumanızı sağlayan fonksiyon.
İsmi ReadByte olmasına rağmen geri dönüş
değeri int türüdür ve size okunan değeri
söyler.
• serialPort.ReadExisting(): SerialPort sınıfının
ReadExisting isimli fonksiyonu çağrıldığı zaman
seri portdan okunabilen tüm veriyi size string
türünden geri döndürür.
• serialPort.ReadLine(): SerialPort sınıfının
ReadLine isimli fonksiyonu seri portdan
NewLine karakteri gelene kadar tanımladığınız
ReadTimeout süresince bekler. Gelen veriyi
size string türünden geri döndürür.
• serialPort.Write(): SerialPort sınıfının Write isimli fonksiyonunun 3
tipi var bunlardan biri cihaza göndermek istediğiniz veriyi string
türünden göndermenizi sağlıyor;
serialPort.Write("Bu veriyi cihaza yaz");
• İkinci yöntem ise veriyi byte dizisi türünden göndermenizi sağlıyor.
byte[] gidecekVeri = new byte[] {0x30, 0x31, 0x32, 0x33, 0x34};
serialPort.Write(gidecekVeri, 0, gidecekVeri.Length);
Tahmin edeceğiniz gibi ilk parametre byte türünden bir dizi, ikinci
parametre ise bu dizinin kaçıncı indisinden itibaren üçüncü
parametredeki değer kadar seri portdan veri göndermenizi istiyor.
• Birde byte dizisinin yerine char dizisi ile gönderebileceğiniz üçüncü
bir tipi bulunuyor.
• serialPort.WriteLine(): SerialPort sınıfının
Write isimli fonksiyonu göndermek istediğiniz
veriyi string türünden parametre geçerek
gönderebilirsiniz. Write fonksiyonundan tek
farkı göndermek istediğiniz verinin sonuna ‘\n’
karakterini ekliyor olması.
Cümlenin parçlara Ayrılması
private void DisplayText(object sender, EventArgs e)
{ textBox1.AppendText(RxString);
textBox1.AppendText("\r\n");
string[] an0 = sensorData[0].Split(':');
textBox2.Text = an0[1];
string[] an1 = sensorData[1].Split(':');
textBox3.Text = an1[1]; }
private void serialPort1_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{ RxString = serialPort1.ReadLine();
sensorData = RxString.Split(',');
this.Invoke(new EventHandler(DisplayText)); }
Seri Porttan Okumak Yazmak
C# Seri Port (Okuma Yazma)
private void button1_Click(object sender,
namespace seriport1 EventArgs e) {
{ if (!serialPort1.IsOpen) {
public partial class Form1 : Form serialPort1.Open(); //seripport aç.
{ }
public Form1() serialPort1.Write("ABC"); //porta yaz
{ }
InitializeComponent(); private void button2_Click(object
serialPort1.PortName = "COM1"; sender, EventArgs e) {
serialPort1.BaudRate = 9600; String oku = serialPort1.ReadLine());
serialPort1.DataBits = 8; serialPort1.Close();
serialPort1.Parity = Parity.None; }
serialPort1.StopBits = StopBits.One; private void Form1_Load(object
} sender, EventArgs e) {

}
}
}
Arduino Seri Port Karakter Okuma
char Data[80]; if(aChar == '\n')
{
byte index = 0; lcd.print(Data);

void loop() index = 0;


Data[index] = NULL;
{ }
if(Serial.available() > 0) { else
{
//if(serialAvailable()) kullanılabilir Data[index] = aChar;
index++;
Data[index] = '\0'; // Kelime sonu
while(Serial.available() > 0) }
{ }
char aChar = Serial.read(); }
Arduino Seri Port Sayı Okuma
void loop()
{
while (Serial.available() == 0);

int val = Serial.parseInt(); //parseFloat


Serial.println(val);
if (Serial.available()>0) \\ portta veri varsa
{
int x = Serial.parseInt();
Serial.println(x);
}
}
void setup() {
Serial.begin(9600);
}

void loop() {
char buffer[] = {' ',' ',' ',' ',' ',' ',' '}; // 7 bytes kadar alır
while (!Serial.available()); // portta karakter bekler
Serial.readBytesUntil(‘\n', buffer, 7);
int incomingValue = atoi(buffer);
Serial.println(incomingValue);
}
void setup() {
Serial.begin(9600);
}
unsigned int integerValue=0; // Max value is 65535
char incomingByte;
void loop() {
if (Serial.available() > 0) { // portu bekle
integerValue = 0;
while(1) { // ‘\n' gelene kadar dongu
incomingByte = Serial.read();
if (incomingByte == '\n') break; // ‘\n’ geldi donguden cık
if (incomingByte == -1) continue; // buffer boş
integerValue *= 10; // desimal olarak sola 1 kaydır
// sayıyı basamağına gore hesapla
integerValue = ((incomingByte - 48) + integerValue);
}
Serial.println(integerValue); // yazdır
}
}
void loop() {

//Get Command
if (Serial.available() > 0) {
Serial.readBytes(in, 10); //10 karakter oku
delay(5000);
Serial.print(«Okunan: ");
Serial.print(in);

}
}
Strings C#
char[] t = new char[5] { 'h', 'e', 'l', 'l', 'o' };
string a = new string(5);
string b = "hello";

string a = "bike";
string b = "bit";
if (a.CompareTo(b) < 0)
...
if (a.Equals(b))
...
if (a == b)
...
if (a != b)
...
string a = "holly";
string b = "wood";
string c = a + b;
int l = c.Length;
Strings Arduino
String stringOne = "Hello String";
sensorValue = analogRead(A0);
String stringOne = "Sensor value: ";
String stringTwo = stringOne + sensorValue;
Serial.println(stringTwo);
if (stringOne ==stringTwo)
Arduino Data Diziye İşleme
String serialDataIn; if (inbyte == ',') { // virgül ayıracı
String data[3]; data[counter] = String(serialDataIn);
int counter; serialDataIn = String("");
int inbyte; counter = counter + 1;
}
void setup(){ if(inbyte == '\n'){ //enter karakteri
Serial.begin(9600); Serial.print(serialDataln);
counter = 0; }
serialDataIn = String(""); }
} }
void loop()
{
if(serial.available){
inbyte = Serial.read();
if(inbyte >= '0' & inbyte <= '9')
serialDataIn += inbyte;
Arduinoda String Parçalara Ayırma
int commaIndex = myString.indexOf(',');
int secondCommaIndex = myString.indexOf(',', commaIndex+1);
String firstValue = myString.substring(0, commaIndex); //ilk
String secondValue = myString.substring(commaIndex+1,
secondCommaIndex); //ikinci
String thirdValue = myString.substring(secondCommaIndex+1);
//ucuncu, sonuna kadar
Arduino Karakter Katarları
void setup() { void loop() {
char str[] = "This is my string";
char out_str[40]; void setup() {
int num; String my_str = "This is my string.";
Serial.begin(9600);
Serial.println(str); //yaz Serial.begin(9600);
num = strlen(str); //boyu
Serial.println(my_str);
Serial.print("Kelime boyu: ");
Serial.println(num); // büyük harf cevir
my_str.toUpperCase();
num = sizeof(str); //boyu-null dahil Serial.println(my_str);
Serial.print("Size of the array: ");
Serial.println(num); // ustune yaz
my_str = "My new string.";
strcpy(out_str, str); //kopyala Serial.println(my_str);
Serial.println(out_str);
// yer değiştir
strcat(out_str, " sketch."); //birleştir my_str.replace("string", "Arduino sketch");
Serial.println(out_str); Serial.println(my_str);
num = strlen(out_str);
Serial.print("String length is: "); // boyunu al
Serial.println(num); Serial.print("String length is: ");
num = sizeof(out_str); Serial.println(my_str.length());
Serial.print("Size of the array out_str[]: ");
}
Serial.println(num);
}
namespace seriport1
void setup()
{ public partial class Form1 : Form
{ Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
Led Yaktır { public Form1()
{
InitializeComponent();
pinMode(11, OUTPUT);
}
pinMode(10, OUTPUT);
private void serialPort1_DataReceived(object sender,
digitalWrite(11, LOW);
System.IO.Ports.SerialDataReceivedEventArgs e)
digitalWrite(13, LOW);
{
digitalWrite(12, LOW);
}
digitalWrite(10, LOW);
private void Form1_Load(object sender, EventArgs e)
}
{ if (serialPort1.IsOpen == false)
int led = 1;
serialPort1.Open();
void loop()
}
{ if(Serial.available())
private void button1_Click(object sender, EventArgs e)
{ led=Serial.read();
{ button1.BackColor = Color.Green;
switch(led) {
button2.BackColor = Color.Gray;
case 49: // veya case ‘1’
button3.BackColor = Color.Gray;
digitalWrite(13, LOW);
serialPort1.WriteLine("1"); }
digitalWrite(12, HIGH);
private void button2_Click(object sender, EventArgs e)
break;
{ button2.BackColor = Color.Green;
case 50: // veya case ‘2’
button1.BackColor = Color.Gray;
digitalWrite(12, LOW);
button3.BackColor = Color.Gray;
digitalWrite(10, HIGH);
serialPort1.WriteLine("2"); }
break;
private void button3_Click(object sender, EventArgs e)
case 51: // veya case ‘3’
{ button3.BackColor = Color.Green;
digitalWrite(10, LOW);
button1.BackColor = Color.Gray;
digitalWrite(13, HIGH);
serialPort1.WriteLine("3"); }
}
}
}
}
} Arduino Kodu C# kodu
namespace seripotans
Potansiyometre oku { public partial class Form1 : Form
{ public Form1()
int val=0; {
void setup() InitializeComponent();
{ }
Serial.begin(9600); private void serialPort1_DataReceived(object sender,
} System.IO.Ports.SerialDataReceivedEventArgs e)
void loop() {
{ textBox1.Text = serialPort1.ReadExisting();
val = analogRead(A0); }
Serial.println(val);
Serial.write(val); private void Form1_Load(object sender, EventArgs e)
{
} if (serialPort1.IsOpen == false)
serialPort1.Open();
}
}
}

Arduino Kodu C# Kodu


Bluetooth İle İletişim
#include <SoftwareSerial.h> switch(led) {
#define rxPin 10 case 'F':
#define txPin 11 digitalWrite(5, LOW);
SoftwareSerial BTSerial(rxPin,txPin); // rx | tx digitalWrite(6, LOW);
digitalWrite(7, HIGH);
void setup() { Serial.println("pin 12");
Serial.begin(9600); break;
BTSerial.begin(115200); case 'B':
//BTSerial.begin(38400); digitalWrite(7, LOW);
pinMode(5, OUTPUT); digitalWrite(5, LOW);
pinMode(6, OUTPUT); digitalWrite(6, HIGH);
pinMode(7, OUTPUT); Serial.println("pin 10");
digitalWrite(5, LOW); break;
digitalWrite(6, LOW); case 'L':
digitalWrite(7, LOW); digitalWrite(6, LOW);
} digitalWrite(7, LOW);
int led = 1; digitalWrite(5, HIGH);
void loop() Serial.println("pin 13");
{ break;
if(BTSerial.available()) { case '4':
Serial.println("test2"); digitalWrite(6, LOW);
led=BTSerial.read(); digitalWrite(7, LOW);
digitalWrite(5, LOW);
break;
} }
}
SerialPort port = new SerialPort("COM12");
//other properties are set by default and are
what I need
port.Open();
port.Write(sendMsgBuff,0,sendMsgBuff.Length);
Thread.Sleep(2000);
port.Read(rcvMsgBuff,0,rcvMsgBuff.Length);
public SerialPort sp;
string dataReceived = string.Empty; try
private delegate void SetTextDeleg(string text);
{
Thread.Sleep(500);
private void FormLoad()
{ string x = sp.ReadLine(); // enter okuyacak
this.BeginInvoke(new
SetTextDeleg(si_DataReceived), new object[] { x });
sp = new SerialPort("COM1", 9600, Parity.None, 8, }
StopBits.One); catch
this.sp.DataReceived += new {}
SerialDataReceivedEventHandler(sp_DataReceived);
}
sp.Open(); private void si_DataReceived(string data)
{

} dataReceived = data.Trim();

}
void sp_DataReceived(object sender,
SerialDataReceivedEventArgs e)

You might also like