Arduino Serial Monitor

Genel Bakış

Bu bölümde blogumuzdaki “Arduino ile Karaşimşek Uygulaması” isimli konuda kullanılan devreye, Arduino Seri Monitörünü kullanarak bilgisayarınızdan verdiğiniz yönergelerle LED’leri kontrol etme olanağı ekleyeceksiniz. Seri monitör, bilgisayarınızla Arduino’nuz arasındaki ‘bağlayıcı’ dır – hata mesajı göndermenizi ve almanızı sağlar, hata ayıklama için kullanışlı bir araçtır ve Arduino’yu klavyeden kontrol etmenizi sağlar.

1

 

Örneğin, LED’leri açmak için bilgisayarınızdan Arduino’ya komutlar gönderebilirsiniz.

Bu bölümde “Arduino ile Karaşimşek Uygulaması” konusunda olduğu gibi aynı parçaları ve breadboard devre düzenini kullanacaksınız.

Eğer, daha önce yapmadıysanız, “Arduino ile Karaşimşek Uygulaması” konusuna bir bakın ve devreyi kurun.

Serial Monitör

Aşağıdaki programı Arduino’ya yükleyin. Daha sonra, tam olarak nasıl çalıştığını göreceğiz.

 

/*

Serial Monitor

*/

int latchPin = 5;

int clockPin = 6;

int dataPin = 4;

byte leds = 0;

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

Serial.begin(9600);

while (! Serial); // Serial hazır olana kadar bekle – Leonardo kartlar için

Serial.println(“0 ile 7 arasında bir LED numarasi yazin veya tümünü söndürmek icin ‘x’ harfini yazın “);

}

void loop()

{

if (Serial.available())

{

char ch = Serial.read();

if (ch >= ‘0’ && ch <= ‘7’)

{

int led = ch – ‘0’;

bitSet(leds, led);

updateShiftRegister();

Serial.print(“Yanan LED “);

Serial.println(led);

}

if (ch == ‘x’)

{

leds = 0;

updateShiftRegister();

Serial.println(“Hepsi Kapatildi “);

}

}

}

void updateShiftRegister()

{

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, LSBFIRST, leds);

digitalWrite(latchPin, HIGH);

}

Bu programı Arduino’unuza yükledikten sonra, Arduino IDE’sindeki araç çubuğundaki en sağdaki “Serial Monitor” yazan düğmeyi tıklayın. Düğme aşağıdaki resimde kırmızı çember içerisinde gösterilmiştir.

2

Aşağıdaki resimdeki gibi bir pencere açılacaktır.

3

Bu pencereye Seri Monitör denir ve Arduino IDE yazılımının bir parçasıdır. Görevi, bilgisayarınızdan Arduino kartına (USB üzerinden) mesaj göndermenize ve Arduino’dan mesajlar almanıza izin vermektir.

Arduino tarafından serial monitöre gönderilen “0 ile 7 arasında bir LED numarasi yazin veya tümünü söndürmek icin ‘x’ harfini yazın ” mesajı, bize Arduino’ya hangi komutları gönderebileceğimizi söylüyor. İstersek  x yazarız SEND düğmesine basarak göndeririz (LED’lerin hepsini kapalı konuma alır) veya açmak istediğiniz LED’in numarası yazarız (burada 0 sayısı en alttaki alttaki LED’i, 1 sayısı bir sonraki LED’i ve bu şekilde yukarı doğru 7’ye kadar her bir sayı ilgili olan LED’i temsil eder).

Aşağıdaki komutları, Seri Monitörün üstündeki ‘Send’ düğmesi yanındaki soş alana yazın. Bu karakterlerin her birini yazdıktan sonra ‘Send’ tuşuna basın: x 0 3 5

LED’lerin zaten tamamı kapalıysa, x yazmanın hiçbir etkisi olmayacaktır. Ancak her bir numara girdiğinizde, bu numaraya karşılık gelen LED yanıp sönecek ve Arduino kartından bir onay mesajı alacaksınız, böylece Seri Monitör aşağıda gösterildiği gibi görünecektir .

 

4

 

‘x’ ‘i tekrar yazın ve sonra send butonuna basın. Bunu yaptığınızda ve tüm LED’ler kapanacaktır.

Arduino Kod’u

 Yapacağımız ilk şey, kullanacağımız üç pini tanımlamak. Bunlar, 74HC595’in LATCH, CLOCK ve DATA pinlerine bağlanacak Arduino dijital çıkışlarıdır.

int latchPin = 5;
int clockPin = 6;
int dataPin = 4;

 Aşağıda, ‘setup()’ fonksiyonundaki, satırlara bakalım:

 

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

Serial.begin(9600);

while (! Serial); // Wait until Serial is ready – Leonardo

Serial.println(“0 ile 7 arasında bir LED numarasi yazin veya tümünü söndürmek icin ‘x’ harfini yazın “);

}

 

İlkönce kullandığımız üç pini dijital çıkışlar olarak ayarladık.

Sonra, ‘Serial.begin (9600)’ komutunu verdik. Bu, Arduino’nun USB bağlantısıyla komutlar gönderebilmesi için seri iletişim başlatır. 9600 değerine bağlantıdaki ‘baud hızı’ adı verilir. Verilerin ne kadar hızlı gönderileceği belirler. Bunu daha yüksek bir değere değiştirebilirsiniz, ancak Arduio Seri monitörünü de aynı değere değiştirmek zorunda kalacaksınız. Bunu daha sonra tartışacağız, ancak şimdilik 9600’da bırakın.

‘While’ ile başlayan satır, Arduino’nun mesaj göndermeye başlamadan önce konuşması için USB bağlantısının diğer ucunda bir şey bulunduğundan emin olmasını sağlar. Aksi takdirde, mesaj gönderilebilir, ancak görüntülenemez. Bu satır yalnızca bir Arduino Leonardo kullanıyorsanız gereklidir çünkü Serial Monitor’ü açtığınızda Arduino Uno otomatik olarak Arduino kartını sıfırlar, oysa Leonardo ile bu gerçekleşmez.

‘setup’ daki satırların sonuncusu, seri monitörün üst kısmında gördüğümüz mesajı gönderir.

‘loop’ fonksiyonu, tüm eylemlerin gerçekleştiği yerdir:

 

void loop()

{

if (Serial.available())

{

char ch = Serial.read();

if (ch >= ‘0’ && ch <= ‘7’)

{

int led = ch – ‘0’;

bitSet(leds, led);

updateShiftRegister();

Serial.print(“Yanan LED “);

Serial.println(led);

}

if (ch == ‘x’)

{

leds = 0;

updateShiftRegister();

Serial.println(“Hepsi Kapatildi”);

}

}

}

loop içinde olan her şey bir ‘if’ ifadesi içerisinde gerçekleştiriliyor. Dahili Arduino fonksiyonu olan  ‘Serial.available ()’ çağrısı ‘true’ olmadıkça, başka hiçbir şey olmaz. İf koşulu olan Serial.available() =1 olmadığı sürece başka hiçbir işlem yapılmaz.

Veriler Arduino’ya gönderilirse ve işlenmeye hazırsa Serial.available () ‘true’ (yani 1) döndürür. Gelen mesajlar, arabellek (buffer) olarak isimlendirilen bir bölge içinde tutulur ve bu arabellek boş değilse, Serial.available () doğru döndürür.

Bir mesaj alındığı takdirde, bir sonraki kod satırına geçilir:

char ch = Serial.read();

Bu satırda; arabellekten, karakteri okur ve arabellekten kaldırır. Ayrıca, onu ‘ch’ değişkenine atar. ‘Ch’ değişkeni ‘karakter’ anlamına gelen ‘char’ türündendir ve adından da anlaşılacağı gibi tek bir karakter tutar.

Seri Monitörün üst kısmındaki istemde verilen talimatları izlediyseniz, bu karakter 0 – 7 arasında bir tek haneli sayı veya ‘x’ harfi olacaktır.

if (ch >= ‘0’ && ch <= ‘7’)

Yukarıdaki satırdaki ‘if’ ifadesi, ‘ch’ değerinin ‘0’ karakterinden büyük veya eşit olup olmadığını ve ‘7’ karakterinden küçük veya eşit olup olmadığını kontrol eder ayrıca tek bir basamak olup olmadığını da kontrol eder.

Her karakter, ASCII değeri olarak adlandırılan benzersiz bir sayı ile temsil edilir. Bu, <= ve> = (küçükeşit ve büyükeşit işaretleri) kullanarak karakterleri karşılaştırdığımızda aslında karşılaştırılan ASCII değerleridir.

Test geçerse, bir sonraki satıra geliriz:

 

int led = ch – ‘0’;

 

Şimdi karakterler üzerinde aritmetik yapıyoruz. Girilen her rakamdan ‘0’ rakamını çıkartıyoruz. Yani, ‘0’ yazdıysanız, ‘0’ – ‘0’ 0 olur. ‘7’ yazdıysanız, ‘7’ – ‘0’ aslında 7 olan sayıya eşit olur, çünkü aslında çıkarma işleminde kullanılan ASCII değerleridir. ‘0’ ın ASCII kodu 48’dir. ‘7’nin ASCII kodu da 55’tir. Bu iki sayıyı birbirinden çıkardığımızda 7 sayısını bulyoruz. Böylece 7. LED’i yakmak için gerekli seçimi de yapmışoluyoruz. Aşağıda ASCII karakter tablosu ve sayı değeri karşılıkları bulunmaktadır

 

ASCII TABLO

ascii_table

 

Yakmak istediğimiz LED numarasını bildiğimizden, sadece o biti ‘leds’ değişkeninde ayarlamalı ve shift register’ı güncellemeliyiz.

 

bitSet(leds, led);

updateShiftRegister();

 

Sonraki iki satır Seri Monitöre bir onay mesajı yazar.

 

Serial.print(“Yanan LED “);

Serial.println(led);

İlk satır, Serial.println yerine Serial.print kullanır. İkisi arasındaki farklılık, parametresindeki her şeyi yazdırdıktan sonra Serial.print’in yeni bir satır başlatmamasıdır. İlk satırı kullanıyoruz, çünkü mesajı iki parçaya yazdırıyoruz. Öncelikle genel olarak: ‘Yanan LED’ ekrana galacak ve daha sonra LED’in numarası.

LED’in numarası bir metin dizesi olmaktan ziyade bir ‘int’ değişkeninde tutulur. Serial.print ya çift tırnak içine alınmış bir metin dizesi ya da bir ‘int’ ya da hemen hemen her türde değişken alabilir.

Loop içindeki ikinci ‘if’ ifadesinden sonra, tek bir rakam işlendiğinde, ‘ch’ nin ‘x’ harfi olup olmadığını kontrol eden üçüncü bir ‘if’ ifadesi bulunur.

if (ch == ‘x’)

{

leds = 0;

updateShiftRegister();

Serial.println(“Hepsi Kapatildi “);

}

Eğer ch içerisindeki değer ‘x’ harfi ise, tüm LED’leri temizler ve bir onay mesajı gönderir.

Diğer Yapılacak Şeyler

Her karakterden sonra gönder’i tıklayarak LED’leri ayrı ayrı kontrol etme karakterini gönderdik. Bununla birlikte, tüm karakter komutlarını tek bir satırda gönderirseniz, bu da işe yarayacaktır. Seri Monitör’e aşağıdakileri tek seferde girip ‘Gönder’i tıklatmayı deneyin:

x0246

Şimdi, Arduino’nun ne kadar hızlı iletişim kurabileceğini görelim. Programda setup() içindeki baud hızını 9600’dan 115200’e değiştirin ve tekrar Arduino’ya yükleyin. Daha sonra Serial Monitor’ü açtıktan sonra açılır listeden 115200’ü seçin.

 

5

Her şeyin hala çalıştığını göreceksiniz. Yüksek hızlı iletişim genellikle gerekli değildir, bu nedenle 9600’lük baud hızı sıklıkla kullanılır, çünkü GPS modülleri gibi birçok seri çevre birimi bu varsayılan baud hızına sahip olacak, bu yüzden standart bir şey.

Ayrıca, baud hızını eşleştirmemeyi deneyin – örneğin programda setup bölümünde Serial.begin (9600) kullanın ve serial monitördeki açılır menüden baud hızını 57600 seçin. Neye benzediğini gördünüz mü? Hepsi bozuldu mu? Bu bir uyuşmazlık. Seri monitörde garip veriler alıyorsanız, baud hızlarınızı kontrol edin ve eşleştiğinden emin olun

Seri Monitör, yanlış işleyen bir programda, hata ayıklamak için mükemmel bir yoldur. Bazen, bir fonksiyonun davranması gerektiğini düşündüğünüz gibi davranmadığında, Serial.println () ifadelerini anahtar yerlere yerleştirerek, neler olup bittiğini görebilirsiniz.

Umarım faydalı olabilmişimdir……

 

 

Arduino Serial Monitor” için 11 yorum

  1. Kardeş bigi paylaşımının harika tam işime yarayacak teşekkürler sana ama kod çalışmıyor hata veriyor sürekli bazı yerlerini düzelttim diğerlenini bulamadım yardımcı olabilirmisin ? başka formatta yollasan ?

    Beğen

      1. uygulamalar kısmındaki karaşimşek devresini kurduysan ve bu sayfadaki programı yüklediysen sorunsuz çalışması gerekiyor. Eğer sayfadan copy paste yapıyorsan, arduino ide de bazı kısımları düzenlemen gerekiyor olabilir, buna dikkat ettinmi? hata kodundan anladığım kadarıyla bir yerde ; işareti koyulmamış sanırım.

        Beğen

      2. selim kardeş şimdi programı denedim, üst virgül ve tırnak işaretleri ile ch – ‘0’ olan satırlardaki işaretleri arduino ide tanımıyor. programı copy paste yapma, el ile her satırı tek tek yaz. o zaman program çalışacak

        Liked by 1 kişi

      3. bir de programdaki türkçe karakterleri düzeltmeyi unutmuşum. serial monitöre anlamsız karakterler görürsün, programdaki tük türkçe karakterleri (ı,ö,ü,ş gibi) ingilizce karakterler ile değiştirmen gerekiyor.

        Liked by 1 kişi

    1. sanırım shift register olarak 74HC595 entegre kullanıyorsun. 2 adet shift registeri arka arkaya kullanmak için 1. hc 595in 9 nolu bacağını, 2. hc 595’in 14. ayağına bağlanaman lazım.

      Beğen

Yorum bırakın