27 Kasım 2018 Salı

ASENKRON SERİ HABERLEŞME İLE PYTHON YAŞ-BURÇ UYGULAMASI

Asenkron Seri Haberleşme ile Python Yaş ve Burç Uygulaması

Asenkron seri haberleşmenin genel mantığını ve işleyişi ile alakalı bilgilerden sonra seri ekrana veri yazma, seri ekrandan veri okuma komutlarını öğrenmiştik. Bu komutları kullandığımız örnek bir kodu incelemiştik. Şimdi bu kodlar ile alternatif programlar yazacağız.

Şuan asenkron seri haberleşmeyi "python" kodu ile yapıyoruz. Bir sonraki aşamada "c" kodu ile asenkron seri haberleşme nasıl başlar, nasıl veri göndeririz gibi konuları inceleyeceğiz. Şuan "python"da bir kaç alternatif uygulama yaparak farklı veri tiplerinin gönderilmesi ve okunması, okunan veri ile led, fan kontrolü gibi uygulamalar yapacağız.

Asenkron seri haberleşmede alıcı verici arasında gönderilen veya alınan tüm veriler karakter şeklindedir. Eğer sayılarla veya farklı veri tipleriyle uğraşmak istiyorsak alınan veriyi alındıktan hemen sonra başka bir veri tipine dönüştürüp aynı şekilde göndermeden de hemen önce elimizdeki veriyi karaktere dönüştürüp uygulamalarımızda sorunsuz bir şekilde ilerleyebiliriz.

Geçelim bu yazının ana konusu olan yaş ve burç programına. Bu program çalıştırdığımızda kullanıcıya iki seçenek sunsun. Bu seçenekler "yaş hesaplama" ve "burç öğrenme" olsun. Daha sonra seçilen kategoriye göre bizden doğum tarihimizi veya doğduğumuz ay ve gün bilgisini istesin. Daha sonra sonuçları ekrana yazsın ve program sürekli olarak dönsün.



Gerekli kütüphaneleri tanımladıktan sonra haberleşme parametrelerini de tanımlıyoruz. Daha sonra seri ekrana "yas hesaplama" için '1', "burç öğrenme" için '2'yi girmesi gerektiğine dair bilgilendirici bir mesaj yolluyoruz. Aynı anda bulunduğumuz cihazda da "seri haberleşme başlıyor" diye bir mesaj yazmasını istiyoruz.



"While" ile programın sürekli dönmesini tanımladıktan sonra kullanıcıdan bir kategori seçmesi isteniyor. Seri ekrandan girilen '1' veya '2' karakter olarak alınıp "secenek" değişkenine atanıyor.

"secenek" değişkeninin '1' olması durumunda bulunduğumuz cihazda seçilen kategori bilgisi yazdırılıyor. Daha sonra kullanıcıdan doğum yılını girmesi isteniyor. Doğum yılı bilgisi "yil" değişkenine atanacak. Burada seri ekrandan girilen verinin alınması için "ser.read(4)" kullandık. Bu kod '4' karakter girdiğimizde okuma işini durdurur ve bu 4 karakteri alır. Doğum yılı dört basamaklı olacağı için bu şekilde bir okuma yapmak bizim için uygun. Fakat "space" ve "silme" tuşları da bir karakter ifade ettiğinden doğum yılını girerken yanlış bir şey yazdığınızda bunu silmek için uğraşmayın. Program sürekli çalıştığından bir sonrakinde doğum tarihimizi doğru girerek doğru sonucu öğrenebiliriz.

Doğum yılı "yil" değişkenine atandığında bu veri "string(karakter dizisi)" veri tipinde. String veriyi "integer(tam sayı)" formatına dönüştürmemiz gerekiyor. Bunun için "int(yıl)" dönüşümünü kullanıp doğum tarihinin integer formatını "intyil" değişkenine atıyoruz. Sonra yaşı bulmak için gerekli işlemi yapıyoruz. Şuan bulduğumuz yaş integer tipinde. Bu veriyi string formatına dönüştürmek için "str(yas)" dönüşümünü kullanırız. İlk kısım bu kadar.



"secenek" değişkenin '2' olması durumunda bulunduğumuz cihazda seçilen kategori bilgisi yazdırılıyor. Daha sonra kullanıcıdan doğum tarihini ay-gün bitişik olarak girmesi isteniyor. Bu şekilde istenmesinin sebebi alınan veriyi daha kolay bir şekilde işlemek.

Veri okunurken "ser.readline()"kullanılıyor. Çünkü bazen girişlerde  26 Ağustos tarihi  "0826" yerine "826" şeklinde de girilebilir. Bu yüzden "ser.readline()" kullanıyoruz. Doğum tarihini girdikten sonra "enter"a basmamız gerekiyor, yoksa "ser.readline()" sürekli okumaya devam eder.

Okuduğumuz bu veriyi "tarih" değişkenine atıyoruz. Şuan "tarih" değişkeni string formatında. Bu veriyi integer forma dönüştürmek için "int(tarih)" dönüşümünü kullanıyoruz ve bunu "inttarih" değişkenine atıyoruz. Sonrasında burçlarına neye göre belirlendiğiyle alakalı bir algoritma kuruyoruz.  Bu algoritma sadece "if" yapılarından oluşuyor. Örneğin, 23 Ağustos ile 22 Eylül arası doğanlar başak burcu oluyor. Eğer ay bilgisini başa getirirsek ki kullanıcıdan bu bilgiyi alırken böyle istedik. Başak burcu 08.23 ile 09.22 arasındakiler oluyor. Böylece her burç için artan sayısal sistemde bir formül yakalamış olduk. Bu formüle göre her sayı aralığını ilgili burca yönlendirmek için "if"yapısını kullanıyoruz.



Doğum tarihine göre bulduğumuz burçları "burc" değişkenine direk string olarak atadığımız için sonucu ekrana yazdırırken bir veri tipi dönüşümü yapmıyoruz.

Eğer verilen kategorilerden biri seçilmemişse bir uyarı mesajı yazılıyor ve program başa dönerek tekrardan bir kategori seçmesi isteniyor.





Programın çalışması bu şekilde. Şuan için iki kategori belirledik fakat bu kategoriler genişletilebilir. Daha sonra kullanıcıdan aldığımız verilerle kullanıcıya pek bir şey sunmadık fakat yine bu işlemler artabilir. Örneğin burç öğrenme kategorisinde girilen bilgilere göre ekrana o burçla alakalı haftalık yazılar yazılabilir. Girilen doğum tarihi bilgisine göre aynı tarihte doğmuş önemli şahsiyetlerin veya o tarihte olmuş önemli olayla yazdırılabilir.

Kodun tamamına https://github.com/koksalkapucuoglu/asenkron_haberlesme/blob/master/yas_burc.py github deposundan ulaşabilirsiniz.

Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtebilirsiniz. Burada eksik olarak anlattığımı düşündüğünüz veya sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.

Hiç yorum yok:

Yorum Gönder

Öne Çıkan Yayın

ORANGE PI PYTHON UART

ORANGE PI PYTHON UART Python kurulum  yazısında Orange pi'de Python konusuna giriş yapmıştık. Daha sonra  Python Gpio  yazısında gir...