AVR ile Nextion Uygulamaları
Bir önceki makalede Nextion ekran kullanımına kısa bir giriş yapmıştık. Bunu uygulamalarla pekiştirmek istiyorum. Bu uygulamalar temel düzeyde olsa da bunun üzerine ilaveler yaparak projelerinizi rahatça gerçekleştireceğinizi düşünmekteyim. Nextion ekranlarla çalışırken kaynak olarak daha önce verdiğim “Instruction set” oldukça yeterli olacaktır.
Nextion Luxmetre
Daha öncesinde BH1750 ile seri port ekranında çalışan basit bir luxmetre yapmış ve daha sonrasında bunu MAX7219 modülü ile görsel bir hale getirmiştik. 7 segman göstergeler karakter LCD’ler gibi 80'li yıllar ve hatta daha öncesinden kalma bir teknoloji olduğu için uygulamaya biraz modern bir görünüm kazandırmak adına Nextion ekran kullanacağız. Nextion ekran ile bir proje yaparken ilk öncelikle grafik işlem programlarında sayfa tasarımını yapmakla işe başlıyoruz.
Ben burada lux değerini sayısal olarak gösterecek bir yeri köşeli dörtgen içine aldım ve üst kısma hangi değer olduğunu ifade etmek adına “LUX” yazdım. Ekran boş duymasın diye de sağ üste ışığı ifade etmek adına bir ampül ikonu yerleştirdim. Sizin Photoshop ve benzeri programlardaki beceriniz burada tasarımın kalitesini oldukça etkilemekte. Ben grafik tasarımı ile neredeyse hiç uğraşmadığım için çok ileri arayüz yapmakla uğraşmak istemedim.
Editörde element olarak “Number” tipinde n0 elementini buraya koyuyoruz ve arkaplanı siyah yapıyoruz. n0 elementinin değerini uygulama esnasında mikrodenetleyici ve UART protokolü vasıtasıyla değiştireceğiz. Bu sayısal değerlerin ifadesi için de bir font tipi belirlememiz gerekmekte. Eski sürümlerde bu fontlar oldukça sıkıntılı olsa da yeni sürümde “Font generator” ile bunu rahatça yapıyoruz.
Şimdi AVR tarafına geçip örnek kodumuzu inceleyelim.
Burada öneki uygulamada yer alan bh1750_oku() fonksiyonundan ve I2C kütüphanesinden faydalandım. Yeni bir fonksiyon olarak nextion_komut() fonksiyonunu göreceksiniz. Burada char* komut şeklinde yani karakter dizisi olarak alınan argüman uart_puts() ile gönderilip ardından kurala uygun şekilde 0xFF değeri gönderilmektedir. Komut gönderme kısmında ise şuraya dikkat etmek gereklidir.
sprintf(buf,"n0.val=%lu", lux);
Burada n0.val=değer şeklinde bir komut göndererek n0 adlı elementin değerini güncellemekteyiz.
Çalışma esnasında oldukça iyi sonuçlar aldım. Nextion ekranlar AVR’a doğrudan bağlanan TFT ekranlardan çok daha hızlı çalışmakta.
Nextion Düğme Uygulaması
Bu uygulamada ekrana veri göndermek yerine ekrandan veri alacağız ve bu aldığımız veriye göre işlem yapacağız. Bu ekranların dokunmatik olduğunu biliyoruz. Dokunma alanı vasıtasıyla kullanıcıdan veri alma imkanımız vardır.
Burada t0 adında bir metin kutusu oluşturup varsayılan yazı olarak “Dugmeye Basin” yazısını belirledim. Sonrasında b0, b1, b2 ve b3 adında düğmeler oluşturup bu düğmelere bastığımız zaman belirli bir değeri göndermesini belirledim. Bunu düğmeye tıkladığımızda sağ alta yazacağımız kodla belirlemekteyiz.
Burada “Touch Press Event” kısmında yani düğmeye basıldığında neler yapılacağını yazmaktayız. Yine “Instruction Set” sayfasından yararlanarak get “1” ifadesini yazdım. Bu düğmeye basıldığı zaman ASCII “1” ifadesini gönder demektir.
Hata ayıklama ekranında sadece 31 yani ‘1' karakterinin değil diğer verilerin de gönderildiğini görüyoruz. Bu durumda okunan dizide 31 değerini arayıp ona göre işlem yapmamız gerekecektir. Şimdi AVR programını inceleyerek devam edelim.
Burada uart_available() fonksiyonu ile gelen veri tampon belleğinde veri olup olmadığını kontrol ediyoruz ve eğer veri varsa bir while döngüsü ile bunu buf karakter dizisinin içerisine karakter karakter aktarıyoruz. Sonra kaydettiğimiz dizide ilgili karakterleri aramak için strchr() fonksiyonunu kullanıyoruz. strchr() fonksiyonu bir arama fonksiyonu olup karakter dizisinde belirttiğimiz karakterden kaç adet olduğunu bize geri döndürmektedir. Eğer aradığımız karakterden var ise bunu şart ifadelerinde kontrol edip t0 elementine veri yazmaktayız.
nextion_komut("t0.txt=\"1. Dugmeye Basildi\"");
Nextion’dan veri okuma esnasında biraz sıkıntı yaşadığımı ve bazen okunan verinin başıyla sonunun birbirine karıştığını söylemem gerekir. Bu konuyu çözmek için çok üzerinde durmadım ve yukarıda kullandığım kod sıkıntısız çalıştı. Eğer karakter dizisinin tamamında ararsanız sıkıntı olmamakta ama belli bir indeksi aramak isterseniz başka başka değerlerle karşılaşabilmektesiniz.
Ekran Parlaklığını Ayarlama
Nextion instruction set sayfasını incelediğinizde ekran için kullanacağınız pek çok komutla karşılaşacaksınız. Bunlardan biri de “dim” komutudur. Dim komutu ekran parlaklığını ayarlamak için kullanılmaktadır. Bir örnekte bunu gösterelim. Ekranda herhangi bir tasarım dosyasını açmanız yeterlidir. Bu tamamen mikrodenetleyici taraflı çalışmaktadır.
Burada for döngüsü içinde parlaklığı 0 ile 100 arasında ayarlamaktayız. Çalışma sırasında ekran parlaklığının en sönükten en parlağa kademeli bir şekilde arttığını göreceksiniz.