Smart Display, CANopen ve Custom CAN ID dahil olmak üzere birden fazla CAN haberleşme protokolünü destekler. CANopen; farklı cihaz türleri için haberleşme profillerini, cihaz profillerini ve nesne modellerini tanımlayan standartlaştırılmış bir haberleşme protokolüdür. Bu sayede CAN bus üzerindeki cihazların yapılandırılması, izlenmesi ve kontrol edilmesi için standart bir yöntem sunar. Öte yandan, CAN bus üzerindeki cihazların mevcut standart protokollerle karşılanamayan belirli işlevleri veya gereksinimleri olduğunda, Custom CAN ID kullanılarak CAN haberleşmesi uygulama gereksinimlerine göre tanımlanabilir ve daha esnek bir yapılandırma sağlanabilir.
Bu makalede, bir Arduino kartı, CAN bus modülü ve sensör kullanılarak Custom CAN ID üzerinden 7 inç Smart Display'de sayfaların nasıl değiştirileceği açıklanmaktadır. Projede kullanılan donanım bileşenleri, Arduino programının derlenmesi ve Custom CAN ID kullanılarak Smart Display'de sayfa değiştirme işleminin gerçekleştirilmesi ele alınmaktadır.
Bu uygulama sayesinde geliştiriciler, Arduino kartı, CAN bus modülü ve Custom CAN ID arasındaki haberleşme ve kontrol yapısını daha iyi anlayabilir ve bu örneği ilgili Smart Display CAN haberleşme uygulamalarının geliştirilmesinde referans olarak kullanabilir.

Şekil 1 Sistem Blok Diyagramı
Bu projede ana kontrolcü olarak Arduino Mega 2560, program geliştirme ortamı olarak ise Arduino IDE v2.0.4 kullanılmaktadır. Smart Display ile CAN bus arayüzü üzerinden haberleşebilmek için Arduino ana kontrolcüsü bir CAN bus shield'a bağlanır. Shield üzerinde bulunan MCP2515 CAN kontrolcüsü ve MCP2551 CAN transceiver, Arduino ana kontrolcüsü ile Smart Display arasında CAN bus haberleşmesini sağlar.
Bu uygulama için aşağıdaki bileşenler gereklidir:
- 7 inç Smart Display
- Arduino Mega 2560
- Arduino Mega 2560 için CAN bus shield
- CAN bus dongle
- Fiziksel buton sensörü
- LED
- Smart Display GUI Builder v0.4.5 veya üzeri
Bu demo üç bölümden oluşmaktadır:
- Projeyi GUI Builder'da tasarlama.
- Projeyi derleme ve yükleme.
- Arduino ana kontrolcüsünü programlama.
Projeyi GUI Builder'da Tasarlama
Başlamak için Smart Display GUI Builder'ın en güncel sürümünü açın ve yeni bir proje oluşturun. Proje adını girin; proje klasörü otomatik olarak seçilecektir.
Cihaz türünü, bu örnekte 7 inç cihazı, seçin ve haberleşme protokolü olarak "Custom CAN ID" seçeneğini belirleyin. Ekran yönü varsayılan olarak yatay modda ayarlanmıştır. Ardından boş bir kullanıcı arayüzü şablonu seçin ve Şekil 2'de gösterildiği gibi yeni projeyi oluşturmak için "Create" düğmesine tıklayın.

Şekil 2
Boş proje oluşturulduktan sonra Şekil 3'te gösterilen ekran görüntülenecektir.

Şekil 3
Bu demo için ikinci bir sayfa gereklidir. "Page" düğmesine ve ardından yeni bir sayfa eklemek için artı düğmesine tıklayın.

Şekil 4
Arka plan stili "Resource" panelinden değiştirilebilir.

Şekil 5
Arayüzün sağ tarafındaki "background" menüsünden istediğiniz arka plan stilini seçin.

Şekil 6
Projeyi Derleme ve Yükleme
Arayüz tasarımı ve önceki adımlar tamamlandıktan sonra proje derlenmeye ve yüklenmeye hazırdır. "Device" düğmesine tıklayın ve "Device Property" seçeneğini belirleyin. Protokol ve baud rate ayarlarını kontrol edin ve gerektiğinde düzenleyin. GUI Builder'daki baud rate değerinin Arduino programında yapılandırılan baud rate değeriyle aynı olduğundan emin olun. Ayarları tamamladıktan sonra "Connect to Device" düğmesine tıklayın. Cihaz bağlantısı başarıyla kurulduktan sonra Şekil 7'de gösterildiği gibi projeyi yüklemek için "Upload" düğmesine tıklayın.

Şekil 7
Projenin yüklenmesi tamamlandığında Şekil 8'de gösterildiği gibi "OK" düğmesine tıklayın.

Şekil 8
Yükleme tamamlandıktan sonra Smart Display'de başlangıç ekranı görüntülenir. Bu ekran Şekil 9'da gösterilmektedir.

Şekil 9
Ardından Smart Display, başlangıç ekranından proje sayfasına geçer. Bu, projenin GUI Builder üzerinden başarıyla derlendiğini ve yüklendiğini gösterir. Proje sayfası Şekil 10'da gösterilmektedir.

Şekil 10
Arduino Host'u Programlama
mcp2515_can.h kütüphanesi Custom CAN ID haberleşmesi için, SPI.h kütüphanesi ise Serial Peripheral Interface (SPI) haberleşmesi için kullanılır. mcp2515_can.h kütüphanesi, gömülü sistemlerde yaygın olarak kullanılan MCP2515 CAN (Controller Area Network) denetleyicisi ile haberleşmeyi sağlar.
Bu kütüphane; MCP2515'in başlatılması, bit hızı, filtreler ve maskeler gibi CAN haberleşme parametrelerinin yapılandırılması, CAN mesajlarının gönderilip alınması ve hata kontrolü için gerekli işlevleri sağlar. Arduino IDE programında CAN haberleşmesi için gerekli ayarlar, Şekil 11'de gösterilen kodda tanımlanmıştır. Bunlar CAN ID, kontrol parametreleri ve ilgili değişkenleri içerir. Bu kod bölümü ayrıca programın ilerleyen aşamalarında kullanılacak global değişkenleri, sabitleri ve dizileri ilgili veri türleriyle birlikte başlatır.

Şekil 11
Bu kod bölümü, program başladığında bir kez çalışan setup() fonksiyonunu içerir. Serial.begin(), Serial Monitor ile seri haberleşmeyi 115200 baud hızında başlatır. Dahili LED pini pinMode() kullanılarak çıkış, fiziksel buton pini ise giriş olarak yapılandırılır. Ardından MCP2515 CAN denetleyicisini başlatmak için bir while döngüsü kullanılır ve CAN.begin(), CAN bit hızını 250 kbps olarak ayarlamak üzere CAN_250KBPS parametresiyle çağrılır.

Şekil 12
changePageFunction() fonksiyonu, belirli veri baytlarını içeren CAN mesajlarını MCP2515 üzerinden göndererek Smart Display'deki sayfalar arasında geçiş yapılmasını sağlar. Fonksiyon önce Smart Display'i yapılandırma moduna almak için bir "device mode" komutu gönderir. Ardından istenen sayfa numarasını içeren bir "change page" komutu gönderilir. Son olarak Smart Display'i yeniden görüntüleme moduna almak için bir "device mode" komutu daha gönderilir.

Şekil 13
Bu kod bölümü, setup() fonksiyonu tamamlandıktan sonra sürekli olarak tekrarlanan loop() fonksiyonunu içerir.
Program, analogRead() kullanarak fiziksel butonun gerilim değerini okur ve bu değeri buttonValue değişkeninde saklar. buttonValue değeri THRESHOLD değerinden büyükse fiziksel butonun basıldığı kabul edilir. Program daha sonra nowPage değişkeninin değerini 1 artırır ve sprintf() ile Serial.println() kullanarak mevcut nowPage değerini Serial Monitor'a gönderir.
Ardından mevcut nowPage değeri changePageFunction() fonksiyonuna aktarılır ve belirtilen görüntüleme sayfasına geçilir. nowPage değeri 0 değilse digitalWrite() ile 13 numaralı pindeki dahili LED açılır; aksi durumda LED kapatılır. lastDebounce değişkeni, son butona basılma zamanını kaydetmek amacıyla millis() kullanılarak mevcut zamanla güncellenir. Program, fiziksel buton bırakılana kadar while döngüsü içinde buttonValue değerini sürekli olarak okur.
Son olarak, CAN bus mesajlarının uygun zaman aralıklarıyla gönderilmesini sağlamak amacıyla döngünün sonunda delay(100) ile 100 ms'lik bir gecikme uygulanır.

Şekil 14
Daha fazla ayrıntı için Arduino koduna bakabilirsiniz. Host ile Smart Display arasında haberleşme kurulurken ilgili CAN haberleşme ayarlarının doğru şekilde yapılandırıldığından emin olun. Host ile Smart Display arasındaki haberleşme hakkında daha fazla bilgi için GUI Builder'daki haberleşme kayıtlarını inceleyebilirsiniz.
Program Arduino IDE'de başarıyla doğrulanıp yüklendikten sonra, fiziksel buton kullanılarak görüntüleme sayfaları arasında geçiş yapılabilir. Smart Display ilk sayfayı gösterirken LED kapalı kalır. Fiziksel butona basıldığında ekran ikinci sayfaya geçer ve LED yanar. Bu durum Şekil 15'te gösterilmektedir.

Şekil 15
Böylece Custom CAN ID üzerinden Smart Display sayfaları arasında geçiş yapma uygulaması tamamlanmış olur.
Programı, demo videosunu ve ilgili kaynakları indirmek için GitHub proje sayfasına başvurabilirsiniz. Gerçek donanım kurulumu Şekil 16'da gösterilmektedir.

Şekil 16
Sonuç
Bu örnekte, MCP2515 CAN denetleyicisine sahip bir Arduino kartı kullanılarak Custom CAN ID üzerinden Smart Display sayfalarının nasıl değiştirileceği gösterilmiştir. Arduino host, fiziksel butondan gelen giriş sinyalini okur ve görüntüleme sayfaları arasında geçiş yapmak için MCP2515 üzerinden Smart Display'e CAN komutları gönderir.
Bu örnek sayesinde geliştiriciler, Arduino host ile Smart Display arasındaki Custom CAN ID haberleşmesi ve kontrolü hakkında temel bilgi edinebilir ve bu yapıyı diğer Smart Display CAN haberleşme uygulamalarının geliştirilmesinde referans olarak kullanabilir.