Arduino Seri Haberleşme: Serial Port Ve Fonksiyonları

Tüm Arduio kartlarında en az bir adet Arduino kartı ile bilgisayar veya diğer cihazlar arasında bağlantı kuran Serial Port bulunuyor. Arduino UNO’dan bir tane Serial Port bulunurken Arduino MEGA ve Arduino DUE’de daha fazla port yer alıyor. Bu konuyla ilgili başka yazılarımıza buradan ve buradan ulaşabilirsiniz.

Arduino UNO, 0’dan 13’e kadar olmak üzere toplam 14 tane dijital pine sahiptir. Bu kartta da diğer kartlarda da görebileceğimiz gibi dijital 0 (RX) ve dijital 1 (TX) pinleri Serial Port için ayrılmıştır. Arduino kartımız üzerindeki Serial Port için ayrılmış pinleri tek seferde yalnızca Serial Port için kullanabiliriz. Bu sırada bu pinler başka giriş veya çıkış işlemlerini gerçekleştiremez. Arduino’nunuzun bilgisayarla haberleşmesini sağlamak için 0 ve 1 numaralı pinlerin başla bir yere bağlı olmadığından emin olmanız gerekir.

arduino seri haberleşme

Her şeyden önce bilgisayarınız ve kartınız arasındaki bağlantıyı sağlamanız gerekir. Daha sonra  Serial Port Ekranına ulaşabilir ve bu ekranı kullanarak kartınız ile haberleşme ekranına ulaşabilirsiniz. Serial Port Ekranı için Türkçede Seri Port Ekranı ya da Serial Monitor ifadeleri de kullanılıyor. Bu ifadelerden herhangi biriyle karşılaştığınızda hepsinin aynı anlama geldiğini hatırlamanızda fayda var.

Haberleşme ekranına tanımlanmış fonksiyonlar

Arduino programlama dilinde seri haberleşme portunu kullanımı için tanımlanmış bir Serial nesnesi bulunmaktadır. Serial nesnesi işimizi kolaylaştırıcı bir çok fonksiyona sahiptir. Bunları şöyle sıralayabiliriz.

  • available ()
  • availableForWrite ()
  • begin ()
  • end ()
  • find ()
  • findUntil ()
  • flush ()
  • if ( Serial )
  • parseFloat ()
  • parseInt ()
  • peek ()
  • print ()
  • println ()
  • read ()
  • readBytes ()
  • readBytesUntil ()
  • readString ()
  • readStringUntil ()
  • serialEvent ()
  • setTimeOut ()
  • write ()

Bu fonksiyonların her biri farklı bir görev için tanımlanmıştır ve Arduino kartınızla işlem yapmanızı sağlarlar.

Seri haberleşmeyi kurmak için ilk kullanmamız gereken fonksiyon şudur:

Serial.begin()

Bu komut ile Seri ara birimi kullanmak için hazır hale getirmiş oluruz. Kullanım şekli Serial.begin(baud rate); şeklindedir. Burada gördüğünüz Baud Rate, haberleşme hızını belirtir ve birimi bps yani saniye başına bit’dir. Baud Rate;  300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, yada 115200 değerlerini alabilir. Standart olarak basit bir iletişim kurup haberleşme yapmak için 9600 bps kullanılır.

Bundan sonraki adımlarda; serial.print(), serial.write(), serial.read(), serial.available() gibi komutlarla yolunuza devam etmeniz gerekir. Bu komutların temelde nasıl çalıştığını, parantez içlerine yazılan bilgilerin ya da diğer fonksiyonlarla birlikte verilen komutların nasıl bir anlama geldiğini kavradığınızda birkaç temel bilgiyle pek çok komutu çalıştırabilir hale gelirsiniz.

Kısaca bakacak olursak:

Serial.begin(baud_rate): Serial haberleşmenin başlatılması için “setup” kısmına yazılır.

Serial.print() / Serial.println(): Serial ASCII yazılarının göndermemizi sağlar. String ve Char değişkenlerini gönderir.

Serial.Write(): Serial üzerinden byte verileri gönderir.

Serial.read(): Serialden gelen verileri okumak için kullanılır.

Serial.available():  Serial bağlantının kullanılabilir olup olmadığını kontrol eder. “if” gibi foksiyonlarla kullanılır.

18 comments

  1. SALİH YILMAZ dedi ki:

    Merhaba yangın paneli rs232 yazıcı çıkışından gelen alarm satırlarından istediğim yazıyı kullanarak P10 Led Ekran üzerine yazdırmak istiyorum.Bunun ile ilgili yardımcı olurmusunuz.

    • Ömer Koman dedi ki:

      p10 panelle ılgılı calışma yapmış olanlar var foruma gelin sorun yardım alabılırsınız.

  2. mehmet andiç dedi ki:

    hocam merhabalar. ben parmak izi okuma sensörünü arduino uno yardımıyla kodladım. seri port ekranını açınca “parmak izi okuma sensörü bulundu”,”geçerli parmağı girin” vs. bilgiler çıkıyor şimdi bu yazanları I2C lcd ekrana nasıl gönderebilirim yani bu bilgilerin orada görünmesinin nasıl sağlayabilirim ?

    • Ömer Koman dedi ki:

      i2c ekran aldıysan once ekranın orneklerını çalıştır cunku ekran adresının bulunması ayarlanması gerekır ılk seferde çalışmazsa. gerıye serıalden verıyı yollayacagına lcd ekrana yollayacaksın.

  3. mehmet andiç dedi ki:

    hocam lcd ekranın adresini buldum 0x27. şimdi örneğin Serial.print(“parmak izi kaydedildi”) yazan yazıda Serial.print kısmını silip lcd.print mi yazmam gerekiyor?

    • Ömer Koman dedi ki:

      evet olabılır ama once koordınat da gır kı yazdıgın yere hakım ol… lcd orneklerını ıncele

  4. Mustafa dedi ki:

    Hocam mrb’lar iyi günler, bir projem var iki arduino kartından oluşan vericiden diğer arduino kartı olan alıcıya lazer ile LDR arasında bir bağlantı kurup bir resim aktarımı yapmak istiyorum fakat eksiklerim var hem devre kurulumu hemde yazılım olarak, yardımcı olabilirseniz çok memnun olur her aklıma geldiğinizde dua ederim.:)

  5. Ahmet anıl arslan dedi ki:

    Hocam iyi günler önemli bir projem var da yardıma ihtiyacım var bir iletişim bilgisi alabilirmyim eğer mümkünse

    • Ömer Koman dedi ki:

      özel proje desteğimiz yok sitenin forumlarını kullanıp açık yardım isteyebilirsiniz, konuyu çalışmış tecrubesi olan varsa yardım edebilir.

  6. Dursun unal dedi ki:

    Bir sorum var önemli analog girişten giren
    0 dan 3 volta ulaştığı zamanı olcebilrmi 0 100 arası sayıya dönüştürmek istiyoruz bu zamani

    • Ömer Koman dedi ki:

      millis fonksiyonu geçen zamanı size bildirir.
      mantıgını yazayım programı siz yazın

      baslangiczaman=millis()

      adc okuma:
      adc yi oku
      3v olmadıysa adc okuma ya dön
      3v oldu ise
      bitiszamani=millis()
      ekrana yaz, bitiszamani-baslangizzamani

  7. Doğan Akdoğ dedi ki:

    Şimdi doğru yeri buldum galiba.
    Merhabalar
    Arduino Uno ile PIC haberleşmesi yapmak istiyorum.Daha önce ki haberleşme iki pic arasındaydı burda kullandığım kodlar PBP da yazdığım kodlardı.
    Verici trafı
    hserout[“DCM”,dec2 calis,dec2 dur,Tuz.byte1,Tuz.byte0,dec2 Ybas,Abas.byte1,Abas.byte0,ONDA.byte1,ONDA.byte0,dec1 Yaz,13,10]
    Alıcıda:
    hserin[“DCM”,dec2 calis,dec2 dur,Tuz.byte1,Tuz.byte0,dec2 Ybas,Abas.byte1,Abas.byte0,ONDA.byte1,ONDA.byte0,dec1 Yaz,13,10]
    Arduinoda hangi kodla göndereceğimi bulamadım yardımcı olursanız sevinirim.

    • Ömer Koman dedi ki:

      arduinoda hserin hserout komutlarına benzer bir fonksiyonu sizin yazmanız lazım.
      seriporttan veri yollama komutu Serial.write kullanılıyor.
      şuradan inceleyebillirsiniz https://www.arduino.cc/en/Serial/Write
      okuma için Serial.read kullanılıyor ama Serial.available()>0 olduğunda okumanız lazım.
      her okunan karakteri bir stringte biriktirip sonnlandırma karakteri ne seçtiyseniz o geldiğinde toptan değerlendirirsiniz.
      https://www.arduino.cc/en/Serial/Read

  8. Doğan Akdoğ dedi ki:

    Göndereceğim dataları sitring1,,2,,,8 olarak tanımladım .Sitring1+sitring2+…vs olarak string8 e attim.serial.print(string8) le gönderiyorum ama karşı taraftan dogru bilgi alamıyorum

    • Ömer Koman dedi ki:

      kablo ile mi bağlı cihazlar birbirine rx tx capraz olacak biliyorsun ve aynı hızda olacak seriportlar. en basitinden başlatın yarım sanıye arayla bir “A” karakteri yollayın karşı taraftan basitçe okumaya çalışın. arduıno çalışırken bilgisayara usb baglı olmasın dısarıdan besleyın usb ıle serial1 bırbırıne paralel baglı oldugu ıcın sorun yaşayabılırsınız.

  9. Doğan Akdoğ dedi ki:

    Kablo ile bağlı heri ki tarafta da SN75176 var RS485 olarak kullanıyorum ilk komutu alıyor çalış komutu ikinci ekran açılıyor ekrana diğer dataları yanlış yazıyor hp değeri normalde 55 olması gerkirken 90 Tuz değeri 810 olması gerkirken 3545 gibi ilgisiz sayılar çıkıyor.Beslemeyi dişardan 12V veriyorum usb kablosu takılı değil.

  10. Ömer Koman dedi ki:

    kullandıgınız kutuphanenın ornek kodları vardır once onları yapmaya calısın basitinden baslayın demek ıstıyorum boyle yenı ortamlarda direk gercek koda yazmaya baslamak ıcın erken. hatta rs485 bıle baglamadan once ıkı farklı işlemciyi rx tx ler birbirine ters olarak baglayarak arada ıletişim varmı ona bakın. arduıno tarafında devamlı basit tx yazan bir mod yazın diğerineden bunu okumaya calısın.

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal Ağlar