STM32 – LCD ÜZERİNDE printf() TARZINDA FORMATLANMIŞ TEXT GÖRÜNTÜLEMEK

Gerek TFT gerekse popüler 4×20 benzeri ekranlara text ve sayısal değerleri, pritf() kullanır gibi tek bir komutla yazmayı hep istemişimdir.

Geçenlerde you cube üzerinde Eddie Amaya’nın buna bir çözüm önerdiğini görünce çok sevindim. Bu güne kadar haberdar olmadığım bazı standard C fonksiyonlarını kullanarak bunu yapmak mümkünmüş. Ondan aldığım ilham ile kendi LCD ve TFT kütüphanelerime böyle bir fonksiyon ekledim.

I2C arayüzlü 20×4 LCD örneği üzerinden bunu nasıl yaptığımı anlatacağım.

PROJE KURULUMU

STM32F103C8 Mapple ve I2C arayüzlü 20×4 LCD

PROJE KURULUMU

Örneğimi STM32F103C8 Mapple Leaf ve yaygın olarak kullanılan 20×4 mavi ışıklı LCD ekran üzerinde vereceğim.

LCD, STM32 kite I2C1 port üzerinden bağlı.

STM32 cubeIDE Proje ortamını hazırlarken özellikle belirteceğim fazla bir şey yok. Sadece I2C1 portunu etkinleştirmek gerekiyor, parametreleri varsayılan değerlerinde bırakmak yeterli.

Yararlanacağımız standard C kütüphaneleri için “stdarg.h” dosyasını eklemek gerekiyor:

LCD_I2C_printf() FONKSİYONU

Fonksiyonumun adını printf() den esinlenerek LCD_I2C_printf() koydum. Bunun birer benzerini TFT ve OLED ekran kütüphanelerine de koyacağım.

C dilinde opsiyonel parametreler kullanılabildiğini daha önce bilmiyordum. Bu vesile ile bunu da öğrenmiş oldum. Aynı fikri başka nerelerde uygulayabilirim, bakacağım.

Yukarıdaki fonksiyon içinde, stdarg kütüphane içeriğinde yer alan va_list tip tanımı ile vs_start() ve vsprintf() fonksiyonlarından yararlanarak, text/sayı karışımı halindeki satırımı bir karakter dizisi halinde buffer[] içine yerleştiriyorum.

Bu satırın format alanlarını da içeren text kısmını msg dizisi içinde veriyoruz, argümanları da “” işaretli alana virgüllerle ayrılmış olarak koyuyoruz. Bu kullanım, aynen printf() fonksiyonunda olduğu gibi. Formatlamanın nasıl yapıldığını görmek için printf() dokümantasyonuna bakılabilir. Ben burada göz önünde kalması için aşağıdaki tabloyu koymakla yetineceğim.

Bakınız dediği notta float sayıların double a çevrildiğinden söz ediyor.

TEST PROGRAMI

Gelelim bunu kullanmak için örnek koda. main.x kullanıcı alanına koyduğum kod aşağıdaki gibi:

KAYAN NOKTALI ONDALIK KESİRLİ (float tipi) SAYILAR İÇİN

Float (%f) formatında sayılar yazdırabilmek için yapılması gereken bir ayar daha var. Project/Properties/C/C++ Build/Settings/MCU Settings/Tool Settings menüsü altındaki pencerede Use float with printf … satırının kutucuğunu işaretliyoruz.

SONUÇ

Bu iyi oldu, çok kullanacağımı sanıyorum. Sayısal verileri itoa() ile text kısmından ayrı hazırlayıp ekrana göndermek sıkıcı oluyordu. Hele kayan noktalı bir sayıyı istenen uzunlukta ondalık kesirleriyle yazdırmayı düşününce, bu kadar basit ve temel bir bilgiye bu kadar geç ulaştığıma hayıflanıyorum.

Bu yayının sonu – Selçuk Özbayraktar Ağustos 2020