Spisu treści:

Arduino HMI przy użyciu maszyn stanowych: 9 kroków
Arduino HMI przy użyciu maszyn stanowych: 9 kroków

Wideo: Arduino HMI przy użyciu maszyn stanowych: 9 kroków

Wideo: Arduino HMI przy użyciu maszyn stanowych: 9 kroków
Wideo: HMI Dashboard Arduino Project 2024, Listopad
Anonim
Arduino HMI przy użyciu maszyn stanowych
Arduino HMI przy użyciu maszyn stanowych

W tej instrukcji pokażę, jak używać narzędzi YAKINDU Statechart Tools do realizacji prostego i rozszerzalnego interfejsu HMI za pomocą osłony klawiatury LCD 16x2 dla Arduino.

Maszyny skończone (FSM) to potężny wzorzec projektowy do tworzenia złożonych interfejsów człowiek-maszyna (HMI). Ponieważ funkcjonalność interfejsu HMI może wzrosnąć, przydatne jest użycie wzorca projektowego, takiego jak automaty stanów.

Kompletny przykład jest osadzony w YAKINDU Statechart Tools. Dodatkowo do kompilacji i flashowania w środowisku IDE wykorzystano IDE Eclipse C++ dla wtyczki Arduino.

Krótkie streszczenie narzędzi wykresów stanów YAKINDU

Za pomocą tego narzędzia możliwe jest tworzenie graficznych maszyn stanów. Pozwala użytkownikowi na wygenerowanie kodu C, C++ lub Java z automatu stanowego. Dzięki takiemu podejściu model można zmienić lub rozbudować, a użytkownik może po prostu ponownie wygenerować kod i nie musi pisać zwykłego kodu źródłowego.

Kieszonkowe dzieci

Części:

  • Arduino (Uno, Mega)
  • Kabel USB
  • Ekran klawiatury LCD 16x2

Narzędzia:

  • Narzędzia wykresów stanu YAKINDU
  • Eclipse C++ IDE dla Arduino

Krok 1: Sprzęt

Image
Image

Ekran klawiatury LCD można po prostu podłączyć do Arduino. Posiada wyświetlacz LCD 16x2 i dodatkowo posiada sześć przycisków:

  • Lewo
  • Dobrze
  • W górę
  • W dół
  • Wybierz
  • (Resetowanie)

Oczywiście można użyć pięciu z nich. Klucze są podłączone do dzielnika napięcia i są wykrywane za pomocą pinu A0 w zależności od napięcia. Użyłem odbicia oprogramowania, aby je poprawnie wykryć.

Krok 2: Zdefiniuj, jak to powinno działać

Sterowanie HMI
Sterowanie HMI

Aplikacja powinna być w stanie zrobić trzy rzeczy.

  1. Obsługuj stanyTutaj chcę używać przycisków do nawigacji między pięcioma stanami: Góra, Środek, Dół, Lewo i Prawo
  2. StoperProsty stoper, który można uruchamiać, zatrzymywać i resetować. Powinien być zwiększany co 100 milisekund
  3. Licznik Trzecia część zawiera prosty licznik w górę/w dół. Powinien być w stanie liczyć liczby dodatnie i powinien być resetowalny

Aktywne menu (lub stan) zostanie wyświetlone na wyświetlaczu LCD 16x2 w górnym wierszu. Aplikacja (stan, timer lub licznik) zostanie wyświetlona w dolnym wierszu. Do nawigacji należy używać lewego i prawego przycisku.

Krok 3: Podłączanie maszyny stanowej

Przyciski zostaną odbite i podłączone do maszyny stanu. Mogą być używane jak w zdarzeniach w maszynie stanów. Dodatkowo zdefiniowane są operacje służące do wyświetlania bieżącego menu. Definiowane są co najmniej dwie zmienne, jedna dla timera i jedna dla licznika.

berło:

// przyciski jako wejście zdarzenia w zdarzeniu w prawo w zdarzeniu w lewo w zdarzeniu w górę w zdarzeniu w dół w zdarzeniu wybierz // wyświetl specyficzne wartości HMI operacja displayLCDString(value:string, length:integer, position:integer) operacja displayLCDInteger(value:integer, position:integer) operacja clearLCDRow(position:integer) internal: //zmienne do przechowywania var cnt: integer var timeCnt: integer = 0

Po wygenerowaniu kodu C++ zdarzenia in muszą zostać odbite i połączone z interfejsem. Ten fragment kodu pokazuje, jak to zrobić.

W pierwszej kolejności zostaną zdefiniowane przyciski:

#define BRAK 0#define WYBIERZ 1 #define LEWO 2 #define DOWN 3 #define UP 4 #define RIGHT 5

Następnie jest zdefiniowana funkcja odczytu przycisku. Wartości mogą się różnić w zależności od producenta osłony LCD.

static int readButton() { int wynik = 0; wynik = analogRead(0); if (wynik < 50) { zwróć PRAWO; } if (wynik < 150) { return UP; } if (wynik < 300) { return DOWN; } if (wynik < 550) { return LEFT; } if (wynik < 850) { return SELECT; } zwróć BRAK; }

Na koniec przyciski zostaną odbite. Osiągnąłem dobre wyniki z 80 ms. Gdy przycisk zostanie zwolniony, podniesie on odpowiednio w przypadku.

int oldState = BRAK;static void raiseEvents() { int buttonPressed = readButton(); opóźnienie(80); stary stan = buttonPressed; if (oldState != BRAK && readButton() == BRAK) { switch (oldState) { case SELECT: { stateMachine->raise_select(); przerwa; } case LEFT: { stateMachine->raise_left(); przerwa; } case DOWN: { stateMachine->raise_down(); przerwa; } case UP: { stateMachine->raise_up(); przerwa; } case PRAWY: { stateMachine->raise_right(); przerwa; } domyślnie: { przerwa; } } } }

Krok 4: Sterowanie HMI

Każdy stan jest używany dla jednej części menu. Są podstany, w których aplikacja - na przykład stoper - będzie wykonywana.

Dzięki takiemu projektowi interfejs można łatwo rozbudować. Dodatkowe menu można po prostu dodać, korzystając z tego samego wzorca projektowego. Odczytanie wartości czujnika i wyświetlenie jej w czwartej pozycji menu to nic wielkiego.

Na razie jako kontrola służy tylko lewa i prawa strona. Ale góra i dół mogą być również używane jako rozszerzenie nawigacji w menu głównym. Tylko przycisk wyboru będzie używany do wejścia do określonej pozycji menu.

Krok 5: Obsługa stanów

Stany obsługi
Stany obsługi

Menu stanów uchwytów jest używane tylko jako kolejny przykład nawigacji. Używanie góra, dół, prawo lub lewo umożliwia przełączanie między stanami. Aktualny stan będzie zawsze drukowany w drugiej linii na wyświetlaczu LCD.

Krok 6: Stoper

Stoper
Stoper

Stoper jest dość prosty. Początkowo wartość timera zostanie zresetowana. Timer można uruchomić za pomocą lewego przycisku i przełączać za pomocą lewej i prawej strony. Użycie strzałek w górę lub w dół powoduje zresetowanie timera. Timer można również wyzerować, dwukrotnie naciskając przycisk wyboru - wychodząc z menu i ponownie wchodząc do niego, ponieważ timer zostanie wyzerowany po początkowym wejściu do stopera.

Krok 7: Licznik

Licznik
Licznik

Przynajmniej jest zaimplementowany licznik. Wejście w stan licznika kasuje licznik. Można go uruchomić za pomocą dowolnego przycisku, z wyjątkiem przycisku wyboru. Jest zaimplementowany jako prosty licznik w górę/w dół, którego wartość nie może być mniejsza niż 0.

Krok 8: Symulacja

Krok 9: Zdobądź przykład

Możesz pobrać IDE tutaj: YAKINDU Statechart Tools

Po pobraniu IDE znajdziesz przykład poprzez Plik -> Nowy -> Przykład

Dla hobbystów jest darmowy, ale możesz też skorzystać z 30-dniowego okresu próbnego.

Zalecana: