Bu rehberimizde, devreyakan Forum topluluğumuzdan gelen yoğun istekler doğrultusunda; Nextion hmi sayfalar arası veri aktarma ve global değişken yönetimi mimarisini, örnek bir sayısal klavye (keypad) projesi üzerinden adım adım ele alacağız.
Endüstriyel otomasyon, akıllı ev sistemleri ve IoT kontrol ünitelerinde yaygın olarak kullanılan dirençli veya kapasitif dokunmatik ekran ailesi Nextion HMI (Human Machine Interface), mikrodenetleyici üzerindeki işlem yükünü azaltarak arayüz tasarlamayı son derece kolaylaştırır.
Bu proje kapsamındaki örnek senaryomuz, ana ekranda (Sayfa A) akım ve gerilim değerlerinin görüntüleneceği iki adet giriş alanı tasarlamaktır. Kullanıcı bu alanlardan birine dokunduğunda, otomatik olarak sayıları girip silebileceği bağımsız bir klavye ekranı (Sayfa B) açılacak; burada girilen değer, ana ekrandaki ilgili hedef kutusuna veri kaybı olmaksızın aktarılacaktır. Projede kullanılan hazır .HMI kaynak dosyalarını bilgisayarınıza indirmek ve Nextion Editor üzerinde doğrudan incelemek için Nextion HMI Sayfalar Arası Veri Aktarımı Örnek Projesini indirebilirsiniz.

Nextion HMI Sayfalar Arasında Değer Aktarmak: Hafıza Yönetiminin Anahtarı: vscope Parametresi
Nextion Editor içerisinde eklediğiniz her bileşen (metin kutusu, buton, kaydırıcı vb.) varsayılan olarak `vscope` (variable scope – değişken etki alanı) özelliği `local` (yerel) olarak yapılandırılmıştır. Local modda, ilgili bileşenin verileri ve özellikleri sadece o an aktif olan sayfa ekrandayken RAM bellekte tutulur. Sayfa değiştiği an (örneğin `page B` komutu çalıştırıldığında) A sayfasındaki tüm bileşenler bellekten silinir ve varsayılan başlangıç değerlerine döner.
Verileri sayfalar arasında taşımak ve kalıcı kılmak için şu iki adımlı donanımsal mimariyi kurmalıyız:
- Global Değişken Tanımlama (`vscope=global`): Değer alacak ana sayfadaki bileşenlerin (örneğin `t0` ve `t1` metin kutularının) özellikler panelinde (Attribute table) yer alan `vscope` değerini `global` olarak değiştirin. Bu işlem, Nextion mikrodenetleyicisine bu değişkenlerin sayfa kapansa dahi RAM üzerinde korunması talimatını verir.
- Uzak Sayfadan Veri Yazma: İkinci sayfadaki bir buton üzerinden ana sayfadaki global değişkene veri göndermek için `SayfaAdi.BilesenAdi.Ozellik = Deger` sözdizimini kullanın. Örnek: `A.t0.txt=t0.txt`
Nextion Editor ile Projenin Oluşturulması ve Kodlanması
Yeni bir Nextion projesi açarak ekran çözünürlüğünüze uygun yatay yerleşimi seçin. Projede kullanacağınız fontları tasarlayıp sistem kütüphanesine ekleyin. Arka plan resmi veya renklerini tanımladıktan sonra iki adet sayfa oluşturun. Birinci sayfanın adını `A`, ikinci sayfanın (klavye) adını ise `B` olarak değiştirin.
1. Adım: A Sayfası (Ana Form) Yapılandırması
A sayfasına dört adet metin (text) bileşeni ekleyin. Sol taraftakileri sabit başlık olarak kullanmak üzere `Akım(A)` ve `Voltaj(V)` şeklinde adlandırın. Sağ taraftaki giriş alanları olan `t0` (akım değeri) ve `t1` (voltaj değeri) bileşenlerinin `vscope` özelliğini kesinlikle `global` yapın.
Kullanıcı `t0` kutusuna dokunduğunda klavyenin hangi kutuya yazacağını anlaması için B sayfasında yer alan global bir değişkeni (`va0`) bayrak (flag) olarak kullanacağız. `t0` bileşeninin Touch Release Event (Dokunmayı Bırakınca) olay koduna şunları yazın:
B.va0.val=0 // B sayfasındaki va0 değişkenini 0 yaparak akım kutusunun seçildiğini belirtir
B.t0.txt="" // Klavye ekranındaki metin alanını temizler
page B // Klavye sayfasına geçiş yaparAynı şekilde, kullanıcı voltaj girişi yapmak üzere `t1` kutusuna dokunduğunda çalışacak Touch Release Event kodunu şu şekilde yapılandırın:
B.va0.val=1 // B sayfasındaki va0 değişkenini 1 yaparak voltaj kutusunun seçildiğini belirtir
B.t0.txt="" // Klavye ekranındaki metin alanını temizler
page B // Klavye sayfasına geçiş yapar
2. Adım: B Sayfası (Klavye Ekranı) Yapılandırması
B sayfasında kullanıcının girdiği sayıyı anlık görebilmesi için üst kısma bir `t0` metin kutusu yerleştirin ve bunun da `vscope` özelliğini `global` yapın. Ardından ekran üzerine 13 adet buton ekleyerek üzerlerindeki yazıları sırasıyla `0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ., Sil, Tamam` olarak düzenleyin.
Ayrıca sayfanın herhangi bir yerine dokunmatik ekranda görünmeyen, hangi girişin güncelleneceğini hafızasında tutacak `va0` isimli bir değişken (variable) ekleyin ve özellikler tablosundan `vscope` değerini `global` olarak seçin.

Klavye butonlarının çalışma mekanizması string birleştirme mantığına dayanır. Örneğin `0` butonu bırakıldığında (Touch Release Event):
t0.txt=t0.txt+"0"Aynı şekilde `5` butonu bırakıldığında:
t0.txt=t0.txt+"5"Bu metin ekleme işlemini `Sil` ve `Tamam` butonları hariç tüm rakam ve nokta (`.`) butonlarına uygulayın.
💡 Mühendislik İpucu: Nextion’da Geri Silme (Backspace) Kodu
Nextion Editor Gizli Karakter Eksiltme Yöntemi
Nextion HMI komut setinde hazır bir string kırpma veya backspace fonksiyonu bulunmaz. Ancak Nextion derleyicisinin çok faydalı bir gizli özelliği vardır: String bir ifadeden tam sayı çıkartırsanız, derleyici stringin sonundaki karakterleri girilen sayı kadar siler!
Bu nedenle Sil butonunun Touch Release Event koduna sadece şunu yazarak mükemmel bir backspace (son karakteri silme) fonksiyonu elde edebilirsiniz:t0.txt=t0.txt-1
Son olarak, kullanıcının veri girişini bitirip onayladığı Tamam butonunun Touch Release Event olayına, bayrak değişkenini kontrol ederek veriyi doğru kutuya yazacak olan şu koşullu kod bloğunu ekleyin:
if(va0.val==0)
{
A.t0.txt=t0.txt // Akım seçilmişse girilen metni A sayfasındaki t0'a yazar
}
if(va0.val==1)
{
A.t1.txt=t0.txt // Voltaj seçilmişse girilen metni A sayfasındaki t1'a yazar
}
page A // Ana sayfaya geri döner
Neden Global Değişkenler Dikkatli Kullanılmalıdır?
Nextion HMI donanımlarının dahili RAM kapasiteleri oldukça sınırlıdır (özellikle Basic ve Enhanced modellerinde). Gereksiz yere her bileşeni `global` olarak tanımlamak, ekranın RAM belleğinin hızla dolmasına ve derleme sırasında bellek taşma (Memory Overflow) hatalarına yol açar. Bu nedenle, sadece sayfalar arasında taşınması zorunlu olan kritik parametreleri `global` yapmalı, diğer tüm yardımcı görsel bileşenleri `local` modda bırakmalısınız.
Projelerinizde takıldığınız noktaları danışmak veya diğer geliştiricilerle bilgi alışverişinde bulunmak için devreyakan Forum Nextion HMI Bölümü başlığı altında yeni konular açarak topluluğumuzla etkileşime geçebilirsiniz.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.

