İçindekiler:

Durum Makinelerini Kullanan Arduino HMI: 9 Adım
Durum Makinelerini Kullanan Arduino HMI: 9 Adım

Video: Durum Makinelerini Kullanan Arduino HMI: 9 Adım

Video: Durum Makinelerini Kullanan Arduino HMI: 9 Adım
Video: Arduino HMI, Visual Studio ile 2024, Temmuz
Anonim
Durum Makinelerini Kullanan Arduino HMI
Durum Makinelerini Kullanan Arduino HMI

Bu Eğitilebilir Kitapta, Arduino için 16x2 LCD Tuş Takımı Kalkanı kullanarak basit ve genişletilebilir bir HMI gerçekleştirmek için YAKINDU Statechart Araçlarını nasıl kullanacağınızı göstereceğim.

Sonlu Durum Makineleri (FSM), karmaşık İnsan Makine Arayüzlerini (HMI) geliştirmek için güçlü bir tasarım modelidir. Bir HMI'nın işlevselliği artabileceğinden, durum makineleri gibi bir tasarım deseni kullanmak faydalıdır.

Tam örnek, YAKINDU Statechart Tools'a yerleştirilmiştir. Ek olarak, IDE'de derleme ve flashing için Eclipse C++ IDE for Arduino Plugin kullanılmıştır.

YAKINDU Statechart Tools'un Kısa Bir Özeti

Bu araç ile grafik durum makineleri oluşturmak mümkündür. Kullanıcının durum makinesinden C, C++ veya Java kodu oluşturmasını sağlar. Bu yaklaşımla, model değiştirilebilir veya genişletilebilir ve kullanıcı kodu yeniden oluşturabilir ve düz kaynak kodu yazmak zorunda kalmaz.

Gereçler

Parçalar:

  • Arduino (Uno, Mega)
  • USB kablosu
  • 16x2 LCD Tuş Takımı Kalkanı

Aletler:

  • YAKINDU Durum Çizelgesi Araçları
  • Arduino için Eclipse C++ IDE

Adım 1: Donanım

Image
Image

LCD Tuş Takımı Kalkanı Arduino'ya kolayca takılabilir. 16x2 LCD Ekrana sahiptir ve ek olarak altı buton vardır:

  • Sol
  • Doğru
  • Yukarı
  • Aşağı
  • Seçme
  • (Sıfırla)

Açıkçası, bunlardan beşi kullanılabilir. Anahtarlar bir voltaj bölücüye bağlanır ve voltaja bağlı olarak Pin A0 kullanılarak algılanır. Bunları doğru bir şekilde algılamak için yazılımdan çıkmayı kullandım.

Adım 2: Nasıl Çalışması Gerektiğini Tanımlayın

HMI Kontrolü
HMI Kontrolü

Uygulama üç şeyi yapabilmelidir.

  1. Durumları Burada Kullanın Beş durum arasında gezinmek için düğmeleri kullanmak istiyorum: Üst, Orta, Alt, Sol ve Sağ
  2. KronometreBaşlatılabilen, durdurulabilen ve sıfırlanabilen basit bir kronometre. Her 100 milisaniyede bir artırılmalıdır
  3. SayaçÜçüncü kısım basit bir yukarı/aşağı sayacı içerir. Pozitif sayıları sayabilmeli ve sıfırlanabilir olmalıdır.

Aktif menü (veya durum) üst satırda 16x2 LCD'de görüntülenecektir. Uygulama (Durum, Zamanlayıcı veya Sayaç) en alt satırda görüntülenecektir. Navigasyon için sol ve sağ buton kullanılmalıdır.

3. Adım: Durum Makinesinin Arayüz Oluşturulması

Düğmeler geri döndürülecek ve durum makinesine bağlanacaktır. Durum makinesindeki olaylarda olduğu gibi kullanılabilirler. Ek olarak, mevcut menüyü görüntülemek için işlemler tanımlanır. Ve biri zamanlayıcı ve diğeri sayaç için olmak üzere en az iki değişken tanımlanır.

arayüz:

// giriş olayları olarak düğmeler olayda sağ olayda sol olayda olay yukarı olay aşağı olay seçiminde // HMI'ye özgü değerleri göster işlem displayLCDString(değer:dize, uzunluk:tamsayı, konum:tamsayı) işlem ekranıLCDInteger(değer:tamsayı, konum:integer) işlemi clearLCDRow(konum:integer) internal: //depolama için değişkenler var cnt: tamsayı var timeCnt: tamsayı = 0

C++ kodunu oluşturduktan sonra, in olayları geri döndürülmeli ve arayüze bağlanmalıdır. Bu kod parçacığı, bunun nasıl yapılacağını gösterir.

İlk başta, düğmeler tanımlanacaktır:

#define YOK 0#define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define SAĞ 5

Ardından butonu okumak için tanımlanmış bir fonksiyon var. Değerler, LCD Shield üreticisine bağlı olarak değişebilir.

statik int readButton() { int sonuç = 0; sonuç = analogRead(0); if (sonuç < 50) {dönüş SAĞ; } if (sonuç < 150) { dönüş YUKARI; } if (sonuç < 300) { AŞAĞI döndür; } if (sonuç < 550) { dönüş SOL; } if (sonuç < 850) { geri SEÇ; } HİÇBİRİ döndür; }

Sonunda, düğmeler kaldırılacaktır. 80 ms ile iyi sonuçlar elde ettim. Bir düğme bırakıldığında, olaya göre yükseltecektir.

int oldState = NONE;statik void boostEvents() { int buttonPressed = readButton(); gecikme(80); oldState = buttonPressed; if (oldState != NONE && readButton() == NONE) { switch (oldState) { case SELECT: { stateMachine->raise_select(); kırmak; } durum SOL: { stateMachine->raise_left(); kırmak; } durum AŞAĞI: { stateMachine->raise_down(); kırmak; } durum YUKARI: { stateMachine->raise_up(); kırmak; } durum SAĞ: { stateMachine->raise_right(); kırmak; } varsayılan: { ara; } } } }

Adım 4: HMI Kontrolü

Her durum, menünün bir bölümü için kullanılır. Uygulamanın - örneğin kronometrenin - yürütüleceği alt durumlar vardır.

Bu tasarım ile arayüz kolayca genişletilebilir. Aynı tasarım deseni kullanılarak ek menüler kolayca eklenebilir. Bir sensörün değerini okumak ve onu dördüncü bir menü öğesinde görüntülemek önemli değil.

Şimdilik sadece sol ve sağ kontrol olarak kullanılıyor. Ancak yukarı ve aşağı, ana menüde gezinme uzantısı olarak da kullanılabilir. Belirli bir menü öğesine girmek için yalnızca seçim düğmesi kullanılacaktır.

Adım 5: Durumları Yönetin

Kullanım Durumları
Kullanım Durumları

Tutamaç durumları menüsü yalnızca başka bir gezinme örneği olarak kullanılır. Yukarı, aşağı, sağa veya sola kullanmak, durumlar arasında geçişe izin verir. Mevcut durum her zaman LCD Ekranın ikinci satırına yazdırılacaktır.

6. Adım: Kronometre

Kronometre
Kronometre

Kronometre oldukça basittir. Başlangıçta, zamanlayıcı değeri sıfırlanacaktır. Zamanlayıcı, sol düğme kullanılarak başlatılabilir ve sol ve sağ kullanılarak değiştirilebilir. Yukarı veya aşağı kullanmak zamanlayıcıyı sıfırlar. Zamanlayıcı, seçim düğmesini iki kez kullanarak - menüden çıkıp bir kez daha girerek sıfıra ayarlanabilir, çünkü zamanlayıcı başlangıçta kronometreye girildiğinde sıfıra ayarlanacaktır.

Adım 7: Sayaç

Tezgah
Tezgah

En azından uygulanan bir sayaç var. Sayaç durumuna girmek, sayacı sıfırlar. Seçim düğmesi dışında herhangi bir buton kullanılarak başlatılabilir. Değeri 0'dan küçük olmayan basit bir yukarı/aşağı sayacı olarak uygulanır.

Adım 8: Simülasyon

9. Adım: Örneği Alın

IDE'yi buradan indirebilirsiniz: YAKINDU Statechart Tools

IDE'yi indirdikten sonra, örneği Dosya -> Yeni -> Örnek yoluyla bulabilirsiniz.

Hobiler için ücretsizdir, ancak 30 günlük deneme sürümünü de kullanabilirsiniz.

Önerilen: