[LabVIEW] Model wyświetlacza z lampkami NIXIE

Tutaj umieszczamy tematy związane z językami programowania niepasującymi do innych działów.
Regulamin forum
Temat prosimy poprzedzić nazwą języka umieszczonego w nawiasach kwadratowych np. [Pascal].
Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

[LabVIEW] Model wyświetlacza z lampkami NIXIE

Postautor: tasza » sobota 29 kwie 2017, 14:56

Studenckie dramaty (odc.1)

czyli projekt z podstaw programowania w pakiecie LabVIEW co się komuś przydarzył zaraz po zimowych feriach.
Pierwotny temat był naprawdę wdzięczny i raczej prosty - zamodelować trójdekadowy licznik elektromechaniczny, taki co ma kolejne cyferki na tarczy lub walcu i widać tylko tą bieżącą. Obowiązkowe do wykorzystania atomowe operacje graficzne lub na plikach graficznych.
Oddany został bez walki, czyli w ramach ogólnie pojętej `pomocy` wydziubałam we dwa wieczory te aplikacje i do niej parę zdań opisu co jest do czego.

Po przeróbkach programiku na lampki NIXIE niniejszym się dzielę gdyby ktoś chciał się neonowym LabVIEW także pobawić, szczerze zachęcam....

Działanie aplikacji

pokazuje rysunek poniżej

00_diagram.png

i jest ono następujące: na początek powstała tablica nazw plików [1] zawierająca elementy (0.bmp ... E.bmp) ,
ale to nie są zwykłe stringi lecz elementy typu Path Constants (Functions ▸ Programming ▸ File I/O ▸ File Constants), a znaleziony w sieci obrazek (ten bodajże: https://image.shutterstock.com/z/stock- ... 171297.jpg) ja pocięła GIMP-em na małe kawałki co dało mi dziesięć cyferek, a zgaszoną lampkę (E od empty) oraz M jak minus ja dorobiłam sobie w KolourPaint.
Tak zbudowana tablica ścieżek do plików graficznych wchodzi na terminal [2] pętli FOR, której zadaniem jest odczytanie i załadowanie bitmap do jednowymiarowej tablicy obrazków;
Pętla FOR [3] (Functions ▸ Programming ▸ Structures) wykorzystana do ładowania grafik nie wykorzystuje opcji automatycznego indeksowania, zatem terminal [2] ma ustawione `Enable Indexing` na False, a granica iteracji N została ustawiona na 12, bo tyle mamy elementarnych obrazków.
Kolejne elementy czyli nazwy plików z grafiką są wybierane przez bloczek Index Array [4] (Functions ▸ Programming ▸ Array) zwracający wskazany indeksem element zmiennej tablicowej i podawane na bloczek Build Path [6] (Functions ▸ Programming ▸ File I/O), który buduje pełną, bezwzględną ścieżkę do zasobu na dysku.
Drugim argumentem wywołania jest lokalizacja foldera z bitmapami nixie-cyferek, a tę zwraca nam bloczek Application Directory [5] (Functions ▸ Programming ▸ File Constants ).
Kolejny bloczek Read BMP File [7] (Functions ▸ Programming ▸ Graphics & Sound ▸ Graphics Formats) odczytuje surowe dane o obrazku (tu: BMP, ale można też JPG, PNG) i przekazuje dalej do bloczka Draw Flattened Pixmap [8] (Functions ▸ Programming ▸ Graphics & Sound ▸ Picture Functions) aby uzyskać jednolity strumień danych do dalszego rysowania.
Tak załadowane w pamięci bitmapki i zorganizowane w formie 12-elementowego wektora podawane są na wejście głównej pętli aplikacji While [10] (Functions ▸ Programming ▸ Structures);
Dalsze wykonanie przebiega w tejże pętli, nieskończonej z uwagi na stałą True podawaną na terminal sterujący pętli [10A] ustawiony na "Continue if True".
Wartość do wyświetlenia zadawana jest z kontrolki Slide [9] (Controls ▸ Classic ▸ Classic Numeric) ustawionej tak, aby zwracać dane typu I8 (ośmiobitowy integer).
Dalsze przetwarzanie tej wartości jest dwutorowe. Po pierwsze należy uporać się z polaryzacją sygnału, dla wartości mniejszych od zera trzeba pokazywać lampkę z minusem, a dla równych i większy od zera - lampkę jakby pustą.
Znak liczby zwraca nam bloczek Greater Or Equal To 0[12] (Functions ▸ Programming ▸ Comparison) i jest to zmienna logiczna, która podana na wejście bloczka Select [14] (z tej samej paletki) decyduje o indeksie obrazka do wyświetlenia (pusta lampka lub ta z minusem). Obrazek wybrany via index rysowany jest na kontrolce 2D Picture [17] (Controls ▸ Classic Graph ▸ Controls).
Prezentacja wartości numerycznej wymaga nieco więcej zachodu, ale w sumie nie jest jakoś arcyskomplikowana.
Po pierwsze należy pozbyć się znaku, co zapewnia nam bloczek Absolute Value [11] (Functions ▸ Programming ▸ Numeric). Z tak wyliczonej wartości należy pozyskać odpowiednio: setki, dziesiątki oraz jedności, aby tymi wartościami zaindeksować tablicę obrazków i pokazać odpowiednie lampki. Setki i dziesiątki są bliźniacze, różnią się tylko stałą (100,10) podawaną na wejście y bloczka Quotient & Remainder [15](Functions ▸ Programming ▸ Numeric). Jako indeks dla grafiki korzystamy z wyjścia IQ, które wyliczane jest zależnością floor(x/y), wyjście R bloczka (opisane równaniem x - y*floor(x/y)) stanowi wejście kostki obsługującej następną dekadę. Jedności to po prostu wyjście R bloczka od dziesiątek [16].

Tak zorganizowany diagram współpracuje z panelem, na którym jest raptem pięć komponentów - zadajnik wartości w formie suwaka i cztery kontenerki na grafikę 2D, wszystko to osadzone w wytłaczanych, szarych ramkach.

01_panel-1.png

02_panel-2.png

Na żywo
nasz wirtualny wyświetlacz NIXIE mamy też na filmiku

https://youtu.be/KsBdMqii4Wk

A w formie dygresji

te lampki, co ich wyszukane obrazki wykorzystałam, to są rosyjskie NIXIE IN-12A, te moje pochodzą z 1991 roku i świecą cudnie, po prostu magia.

03_IMG_6496.JPG
04_IMG_6499.JPG
05_IMG_6497.JPG
06_IMG_6498.JPG



I ciekawam teraz niezmiernie, czy ktoś się podejmie ożenić to co powyżej z Analog Discovery 2 :) tak, aby mieć woltomierz NIXIE?
Swojego gotowca pokaże także, ale póki co poczekam, a nuż ktoś-coś...

#slowanawiatr
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

Re: [LabVIEW] Model wyświetlacza z lampkami NIXIE

Postautor: SuperGość » poniedziałek 17 lip 2017, 18:46

temat z kwietnia, a ja go przegapiłem i trzeba było fb żebym tu trafił ... ehh
dzięki tasza


Wróć do „Inne języki programowania”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości