Host ile Smart Display Arasında CANopen Haberleşmesi
Bir Smart Display'in kontrol edilebilmesi için uygun bir sistem arayüzüne ve haberleşme protokolüne ihtiyaç vardır. Bu makalede, host kontrolü açısından ele alınan uygulamalı bir Arduino örneği üzerinden HOST'un Smart Display üzerindeki Indicator rengini değiştirmek için nasıl komut gönderdiği açıklanmaktadır. Örnekte, kullanıcı arayüzüne bir dokunmatik buton eklenir ve Arduino'ya fiziksel bir buton bağlanır. Fiziksel butona veya dokunmatik butona basıldığında ekrandaki Indicator'ın rengi değişir ve harici LED açılır veya kapatılır.
Bu uygulamada, bir Arduino geliştirme kartı kullanılarak 3,5 inç CAN Smart Display'in nasıl kontrol edileceği gösterilmektedir. Örnek; fiziksel butonun, dokunmatik butonun, ekrandaki Indicator'ın ve kart üzerindeki LED'in program aracılığıyla kontrol edilmesini ve Smart Display'in HOST tarafından gönderilen komutları nasıl aldığını kapsamaktadır. CAN Bus shield ile donatılmış Arduino Mega 2560, host kontrol birimi olarak kullanılır ve Smart Display ile CANopen üzerinden haberleşir.
Sistemin blok diyagramı aşağıda gösterilmektedir:

Sistem Blok Diyagramı
Bu uygulama için aşağıdaki bileşenler gereklidir:
- 3,5 inç CANopen Smart Display
- Arduino Mega 2560
- Arduino Mega 2560 için CAN Bus shield
- CAN Bus Dongle
- Fiziksel buton
- LED
- Smart Display GUI Builder v0.4.2 veya üzeri
Bu demo üç bölümden oluşmaktadır:
- GUI Builder'da projenin tasarlanması
- Projenin oluşturulması ve yüklenmesi
- Arduino host'un programlanması
GUI Builder'da Projenin Tasarlanması
İlk olarak yeni bir proje oluşturun ve proje adını girin. Ardından cihaz türünü seçin; bu örnekte 3,5 inç cihaz kullanılmaktadır. Haberleşme protokolü olarak CANopen'ı seçin ve ekran yönünü Landscape olarak ayarlayın. Daha sonra UI şablonları arasından Blank Template'i seçin ve aşağıda gösterildiği gibi Create düğmesine tıklayarak yeni projeyi oluşturun.

Bu ayarlar tamamlandıktan sonra boş bir sayfa açılır.

Bu uygulama örneği için çalışma alanına bir dokunmatik buton ve bir Indicator widget'ı ekleyin. Gerekli widget'ları kontrol panelinden seçip aşağıda gösterildiği gibi çalışma alanına sürükleyip bırakabilirsiniz.

Projenin Oluşturulması ve Yüklenmesi
Önceki ayarlar ve kullanıcı arayüzü tasarımı tamamlandıktan sonra proje oluşturulup Smart Display'e yüklenebilir. GUI Builder araç çubuğundaki Device seçeneğine tıklayın ve Device Property'yi seçin. Device Property penceresinde varsayılan baud rate değerini kullanabilir veya uygulamanızın gereksinimlerine göre değiştirebilirsiniz. Arduino programında yapılandırılan baud rate değerinin GUI Builder'daki ayarla aynı olduğundan emin olun. Ayarları tamamladıktan sonra aşağıda gösterildiği gibi Upload düğmesine tıklayarak projeyi Smart Display'e yükleyin.

Projenin yüklenmesi tamamlandığında "Upload project completed" mesajı görüntülenir. Aşağıda gösterildiği gibi OK düğmesine tıklayarak pencereyi kapatın.

Yükleme işlemi tamamlandıktan sonra Smart Display açılış ekranını görüntüler.

Açılış ekranının ardından Smart Display, yüklenen uygulama sayfasına geçer. Bu durum, projenin başarıyla oluşturulduğunu ve Smart Display'e yüklendiğini gösterir.

Arduino Host'un Programlanması
Bu örnekte Arduino host'u programlamak için Arduino IDE v2.0.4 kullanılmaktadır. CAN Bus haberleşmesi için mcp2515_can.h kütüphanesi ve çeşitli yardımcı kütüphanelerden yararlanılmaktadır. Daha ayrıntılı bilgi için Arduino koduna başvurabilirsiniz. Host ile Smart Display arasında haberleşme kurulurken nesnelerle ilişkili adreslerin doğru şekilde tanımlandığından emin olunmalıdır. Host ile Smart Display arasındaki CAN Bus haberleşmesi hakkında daha ayrıntılı bilgi için GUI Builder'daki haberleşme kayıtlarına başvurabilirsiniz. Gerekli nesne adresleri Arduino IDE programında aşağıda gösterildiği şekilde tanımlanmıştır.

CANopen yapısında Button stilinin index değeri 0'a (0x2000), Indicator stilinin index değeri ise 1'e (0x2001) karşılık gelir. Her nesnenin index değerinin dikkate alınması önemlidir. Bir nesnenin index değeri biliniyorsa, nesnenin durumu Arduino host programı üzerinden değiştirilebilir. İlgili nesne index değerleri, aşağıdaki simülasyon kayıt tablosunda yer alan komut bilgilerinden görülebilir:


Her nesnenin veri tipi burada tanımlanır. Ek nesneler kullanılacaksa, bu nesnelere karşılık gelen veri tiplerinin de programda tanımlanması gerekir.

Aşağıdaki şekil, ObjectFunCallback fonksiyonunun her nesneden alınan değerleri nasıl işlediğini göstermektedir. Kullanıcılar, uygulama gereksinimlerine göre kodu değiştirebilir veya ek nesneler için yeni işleme mantığı ekleyebilir.

Arduino host, fiziksel butonun durumunda bir değişiklik algıladığında ilgili değeri CANopen üzerinden Smart Display'e gönderir. Komut yapısında kullanılan ID ve sub-index değerleri için aşağıdaki kodu inceleyebilirsiniz. Programın bu bölümü, fiziksel butonun durumuna göre Indicator'ın (object index 2) değerini günceller.

Tüm nesnelerin register adreslerini tanımlayın, fiziksel buton ve LED gibi harici bileşenlerin pin modlarını giriş veya çıkış olarak yapılandırın ve aşağıda gösterildiği şekilde baud rate değerini ayarlayın:


Son olarak, bu uygulama senaryosunu gerçekleştirmek için gereken program mantığı loop() içinde tanımlanır. Fiziksel butona veya Smart Display üzerindeki dokunmatik butona basıldığında sistem, ekrandaki Indicator'ın rengini değiştirir ve harici LED'i açar veya kapatır.

Program Arduino IDE üzerinden başarıyla doğrulanıp yüklendikten sonra, fiziksel butona veya Smart Display üzerindeki dokunmatik butona basıldığında LED yanar ve Indicator'ın rengi yeşile döner. Indicator kırmızı renkte ve LED kapalı olduğunda ise fiziksel butona veya dokunmatik butona basılmadığı anlamına gelir. Bu durum aşağıda gösterilmektedir.

Yukarıda açıklanan programı GitHub bağlantısından indirebilirsiniz. Bu demo projesine ilişkin ek dosya ve bilgiler de örnekler içerisinde bulunmaktadır. Gerçek donanım kurulumu aşağıda gösterilmektedir.

Bu adımlar tamamlandıktan sonra, fiziksel buton veya Smart Display üzerindeki dokunmatik buton kullanılarak ekrandaki Indicator'ın durumu ve harici LED kontrol edilebilir. Böylece Smart Display CANopen haberleşme demosu tamamlanmış olur.
Sonuç
Bu örnek, GUI Builder'ın kullanımını ve uygulama sürecini gösterirken kullanıcıların CAN Bus üzerinden host tarafında kontrol uygulamalarının nasıl geliştirilebileceğini anlamalarına yardımcı olur. Ayrıca host'un Smart Display'i kontrol etmek için nasıl komut gönderip aldığını da göstermektedir. Bu örnek sayesinde geliştiriciler, host ile Smart Display arasındaki CANopen haberleşmesini ve kontrol yöntemlerini daha iyi anlayabilir ve edindikleri bilgileri sonraki Smart Display uygulamalarının geliştirilmesinde referans olarak kullanabilir.