Co warto wiedzieć o programowaniu Arduino w XOD?

Co warto wiedzieć o programowaniu Arduino w XOD?

Znacie graficzne generatory kodu do Arduino? Najwięcej osób kojarzy na pewno edytory, które pozwalają programować w Scratchu. Wybór jest jednak znacznie większy.

Ciekawym i darmowym środowiskiem jest XOD, który próbuje przekonać nas do zupełnie innej, dość dziwnej metody programowania.

W niektórych przypadkach pomocne mogą okazać się narzędzia, które kosztem wydajności, ułatwiają tworzenie programów. Dobrym przykładem mogą być generatory kodu działające w oparciu o gotowe bloczki reprezentujące jakieś fragmenty kodu. Łącząc takie bloczki możemy szybko zbudować całkiem rozbudowaną aplikację, która będzie działała, ale jej wydajność nie będzie wzorowa. Istnieje kilka środowisk, które stosują takie podejście i w tym artykule sprawdzimy jak działa jedno z nich – XOD.

Czym jest i jak poznać XOD?

Przygodę ze środowiskiem rozpoczynamy od wizyty na stronie XOD. Dostępne są tam dwie wersje oprogramowania: przeglądarkowa i desktopowa (dla systemów Windows, Linux oraz macOS).

Niezależnie od tego, który rodzaj IDE wybierzemy, to i tak będziemy mieć ten sam zestaw narzędzi i to samo GUI. W tym artykule skupimy się więc na wykorzystaniu wersji z PC. Środowisko z przykładowym "kodem" widoczne jest na poniższym zrzucie ekranu.

Widok programu XOD IDE

Widok programu XOD IDE

Jak wygląda programowanie w XOD?

Na pierwszy rzut oka program może wyglądać skomplikowanie – nie ma tu ani kodu programu, ani bloczków znanych z graficznych generatorów kodu jak S4A. Dysponujemy za to szeroką gamą węzłów (bloczków), które można łączyć na różne sposoby przy pomocy kolorowych sygnałów.

Węzły XOD mogą reprezentować całe fizyczne urządzenia takie jak czujniki lub napędy

Węzły XOD mogą reprezentować całe fizyczne urządzenia takie jak czujniki lub napędy

XOD wyróżnia się również sposobem reprezentacji projektu. W przypadku Arduino IDE, możemy wyróżnić główny plik z rozszerzeniem .ino oraz dodatkowe pliki związane z bibliotekami.

Węzły reprezentujące podstawowe operacje na peryferiach Arduino

Węzły reprezentujące podstawowe operacje na peryferiach Arduino

Zalety budowy programów z bloczków

W przypadku XOD projekt składa się z obiektów nazywanych patch, co na język polski najczęściej tłumaczy się jako "łata", słowo to można jednak również tłumaczyć jako "skrawek materiału". Ta druga wersja ma w tym przypadku chyba większy sens, więc zwrotów tych będziemy używać zamiennie.

Każda łata może reprezentować zarówno cały projekt wgrywany do mikrokontrolera Arduino, ale też nowy węzeł/bloczek, który może zostać użyty w innym programie. W ten sposób dość skutecznie ukryto mechanizm deklaracji funkcji.

Węzeł am-pm odpowiedzialny za sprawdzanie formatu podanej godziny

Węzeł am-pm odpowiedzialny za sprawdzanie formatu podanej godziny

Takie podejście daje też bardzo ciekawą możliwość – tak jak w językach interpretowanych zazwyczaj możliwe jest podejrzenie kodu źródłowego funkcji, tak w XOD poprzez dwukrotne kliknięcie możliwe jest podejrzenie zawartości węzłów. Wiele z nich (szczególnie reprezentujące fizyczne elementy) składa się z połączonych ze sobą prostszych węzłów. Zawartość powyższego bloczku wygląda następująco:

Zawartość węzła am-pm

Zawartość węzła am-pm

Jak widać na powyższym przykładzie wnętrza węzła am-pm, dodając do skrawka wejścia i wyjścia sygnałów oraz pewną logikę można uzyskać nowy węzeł realizujący określona funkcjonalność.

Taki sposób dodawania wejść i wyjść usprawnia tworzenie dokumentacji – każdy argument oraz wynik węzła można łatwo opisać. Aby sprawdzić jakie dane przyjmuje i przekazuje na wyjściu dany bloczek wystarczy otworzyć go lub podejrzeć informacje w wyszukiwarce węzłów.

Wyszukiwarka węzłów z dokumentacją

Wyszukiwarka węzłów z dokumentacją

Bardzo szybko przekonamy się, że takie podejście może być całkiem wygodne – niejednokrotnie obsługa całego urządzenia sprowadza się do pojedynczego bloczka, z którego można uzyskać gotowe, wstępnie obrobione dane.

Szczegółowy opis wejść i wyjść węzła reprezentującego czujnik Sharp

Szczegółowy opis wejść i wyjść węzła reprezentującego czujnik Sharp

Przykładowo, węzeł odpowiedzialny za obsługę czujnika odległości Sharp GP2Y0A21YK0F posiada w swojej budowie węzeł reprezentujący linearyzację wyników pomiaru (który też możemy podejrzeć).

Łatwy sposób na wielozadaniowość

Wspólną cechą charakterystyczną dla graficznych generatorów kodu jak XOD, S4A czy Visuino jest możliwość tworzenia kodu, który imituje działanie równoległe. Przykładowo przy pomocy bloczków można bardzo łatwo zaprogramować Arduino, aby program sterował niezależenie diodami świecącymi, obsługiwał przyciski i wykonywał inne czynności.

W XOD do realizacji czynności okresowych można wykorzystać węzły takie jak clock, który generują impulsy (fioletowy sygnał). Natomiast saw/square/sine/tri-wave odpowiedzialne są za generowanie przebiegów kolejno: piłokształtnego, prostokątnego, sinusoidalnego oraz trójkątnego o wartościach zmiennoprzecinkowych (cyjanowy sygnał).

Przykładowo, aby przy pomocy cyfrowo sterownaej diody NeoPixel (WS2812) uzyskać wielobarwną animację wystarczy do jej 3 kanałów podpiąć wynik bloczka generatora sinusoidy, przemnożony przez odpowiedni współczynnik, odpowiedzialny za maksymalną jasność. Należy też cyklicznie wysyłać dane do diody, na przykład w momencie zmiany wartości na jednym z kanałów.

Sterownik programowalnej diody RGB WS2812

Sterownik programowalnej diody RGB WS2812

W wyniku uzyskamy płynną zmianę kolorów diody:

Znaczna komplikacja programów

Choć XOD przyspiesza tworzenie aplikacji na Arduino, to nie jest to jednak idealne narzędzie. Pierwsze utrudnienie, napotkamy tworząc program o bardziej rozbudowanej logice. Aby program był czytelny każdy bloczek, który przejmuje dane z poprzedniego powinien być umieszczony piętro niżej. Powoduje to powstanie bardzo długich łańcuchów, które są ciężkie do przeanalizowania.

Dość obszerny przykład użycia wyświetlacza OLED

Dość obszerny przykład użycia wyświetlacza OLED

W przypadku dużych programów można wprowadzić pewien unikatowy węzeł, który nieco poprawia czytelność – jest to komentarz, czyli węzeł, który zawiera tylko tekst. Nie zmienia on jednak zbyt wiele.

Komentarz dostępny w projekcie przewodnika po XOD

Komentarz dostępny w projekcie przewodnika po XOD

Drugą niedogodnością jest prowadzenie długich sygnałów – połączenia biegną w linii prostej często przecinając inne sygnały i węzły. Niewielką poprawę czytelności wprowadzają magistrale.

Trudność przejrzystego prowadzenia sygnałów

Trudność przejrzystego prowadzenia sygnałów

Podsumowując, XOD jest unikatową (a nawet egzotyczną) alternatywą dla Arduino IDE i tradycyjnego programowania. Udogodnienie w postaci gotowych węzłów przyspiesza tworzenie aplikacji. Zaś możliwość niezależnego dodawania bloków i tworzenia "równoległych" zadań ułatwia to, co podczas tradycyjnego programowania nastręcza początkującym wiele trudności.

XOD na pewno nie jest dla każdego, warto jednak sprawdzić możliwości tego środowiska i dać mu szansę. Warto przeanalizować kilka gotowych programów, aby zrozumieć ideę. Może akurat dla Was takie zupełnie odmienne podejście będzie wygodniejsze? Dajcie znać w komentarzu, jeśli mieliście już kiedyś styczność z tym środowiskiem! Jakie są Wasze doświadczenia?

PlatformIO – alternatywne środowisko dla Arduino IDE
PlatformIO – alternatywne środowisko dla Arduino IDE

Jednym z powodów popularności Arduino jest dedykowane środowisko, które znacznie ułatwia pierwsze kroki z mikrokontrolerami. Niestety prosty... Czytaj dalej »

Autor: Piotr Adamczyk
Redakcja: Damian Szymański

arduino, ide, programowanie, xod

Trwa ładowanie komentarzy...