Autor Wątek: Aplikacja DomowyKokpit  (Przeczytany 62043 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #240 dnia: Marca 14, 2011, 18:59:35 »
Dzięki,działa prawidłowo tzn.na końcu stringa są dwa zera.Teraz mam możliwość wyboru,albo trzy liczby i dwie ostatnie zgaszone albo tak jak w symulatorze 3 liczby oraz dwie ostatnie na stała zera.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #241 dnia: Marca 15, 2011, 00:30:35 »
Po pierwsze składam hołd codeking'owi - za pomysł z grupami wyświetlaczy - niesamowicie to wygodne.

Po drugie prośba. W pliku simout.xml jest biblioteka/słownik znaków. Czy mógłbyś przygotować zestaw znaków zapalających poszczególne segmenty? Przydałoby mi się to do stworzenia jakiejś ciekawej sekwencji testowej. Ja proponuję taki zestaw stałych: sA, sB, sC itd. (s-segment i litera segmentu), albo np. ^a, ^b, ^c itd.

Ewentualnie jeszcze, ale to niekoniecznie (bo mógłbym to już ułożyć z poszczególnych segmentów)
Litera T:  segmenty A, F, E - identyfikator np. letT (albo z jakimś znaczkiem)
Litera E: segmenty A, F, E, G, D
Litera S: segmenty A, F, G, C, D

I już bym sobie ułożył słowo: TEST :-)

Odp: Aplikacja DomowyKokpit
« Odpowiedź #242 dnia: Marca 15, 2011, 07:17:19 »
Shopik czy masz na myśli wyświetlacze znakowe LCD czy 7segLED.W HSC identyfikacja LCD polega na wyświetleniu jego nr np 01 lub 02 (tyle jest na jednej karcie).Dalej można w teście wprowadzić literę lub cyfrę na dowolnej pozycji.Testowanie segmentów w 7segLED  jest nadmiarowe,ponieważ widać który segment nie działa lub jest zwarty z sąsiednim.Może miałeś inny test na myśli.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #243 dnia: Marca 15, 2011, 07:37:30 »
Mam na myśli wyświetlacze 7 segmentowe. Przyda mi się to do stworzenia ciekawszej animacji. to już nie tyle z konieczności, co dla zabawy - ale przecież całe nasze hobby to dla zabawy...
Poza tym przyda się to choćby do tego, żeby na wyświetlaczu veritical speed uzyskać "-".  Dla codekinga to nie będzie żaden problem, ponieważ w pliku xml umieścił już słownik kilku znaków (wszystkie cyfry, przecinek i kropkę) - które konwertowane są zapewne na postać bitową (to trzeba przeliczyć, a on to potrafi).

Odp: Aplikacja DomowyKokpit
« Odpowiedź #244 dnia: Marca 15, 2011, 17:54:55 »
Edytor słownika jest w planach (planuje dużo rzeczy ale czas jest ograniczony).

Dla ułatwienia, kiedy kodowałem simOUT, zrobiłem sobie prosty programik (http://homesimcockpit.com/pliki/7SEG.exe), który pozwala na kodowanie znaków. Programu nie trzeba konfigurować. Klika się segmenty, które chcemy zapalać a na dole okna jest liczba (wartość) jaką trzeba wpisać w pliku simOUT.xml.

Należy pamiętać o tym, żeby znak, który będzie zamieniany na dane segmenty był unikalny w słowniku. Przykładowa litera E (dopisana jest mała litera "e" bo wielkość znaków jest rozróżniana) i znak minus:

<char chr="E" value="158" />
<char chr="e" value="158" />
<char chr="-" value="2" />

Odp: Aplikacja DomowyKokpit
« Odpowiedź #245 dnia: Marca 15, 2011, 19:18:15 »
Sprawdziłem program działa.Zapytam z ciekawości kolejne segmenty g-a mają wartości binarne 2,4,8,16,32,64 oraz 128.Dlaczego akurat te wartości,czy to wynika z HSC?
Drugie pytanie datyczy dodatkowych znaków wynikających z kombinacji zapalonych segmentów np.-,A,B,C,D,E,F,H i innych.Dopisując te znaki do pliku SimOut.xml można je później użyć w wyświetlaczach np. -12345 lub FF dla kodu ASCI?

Odp: Aplikacja DomowyKokpit
« Odpowiedź #246 dnia: Marca 15, 2011, 19:30:29 »
Dzięki - o coś takiego mi chodziło. Ale support!

Teraz insza inszość, ale poniekąd też może dotyczyć HSC. Zadałem pytanie na vatsimie jak przeliczać ten nieszczęsny heading z offsetu 0580. W odpowiedzi dostałem zagadkę, której jednak nie umiem rozwiązać... Nic mi to nie podpowiada

Cytuj
We wszystkim co ma związek z komputerem, wygodniej się posługiwać systemem szesnastkowym (h) albo dwójkowym (b) niż decymalnym vel dziesiątkowym (d).
Przelicz sobie w Windowsowym kalkulatorze (przy wielkości danych Word - nie mylić z pakietem Office):
a) x00h - xB6h = x??h =zamień na dec=> ??d
b) 65 536d / 2d = ??d =zamień na hex=> x??h

Z podpunktu "b)" wnioskuję (teoria nie poparta praktyką), że 180 też powinien podawać jako wartość "dodatnią".
Jeśli po tych ćwiczeniach nie będziesz znał wzoru, to dam następną podpowiedź.

(...)
Chyba się zapędziłem i zdublowałem zapis oznaczający zapis szesnastkowy.
Na matematyce (w zależności od szkoły) zapis wygląda np. 3Ah, w anglojęzycznych dokumentach często jest zapis x3A bądź 0x34, co oznacza to samo, czyli 58d zapisaną w formacie szesnastkowym.
Więc:
a) 00h - B6h = ??h =zamień na dec=> ??d



I co wy na to... Hexami to się w podstawówce bawiłem... około 1995 roku!!!! Nic już nie pamiętam!

Odp: Aplikacja DomowyKokpit
« Odpowiedź #247 dnia: Marca 15, 2011, 20:03:24 »
Faktycznie podstawa to kod binarny czyli dwójkowy lub szestnastkowy.Jest jeszcze dzięsiętny dwójkowo dziesiętny,ósemkowy,trójkowy i chyba piątkowy.Ja też już tym się nie zajmuję,ale przeliczenie jest proste.Dla programisty jest to podstawa dla hardwarowców jest ułatwienie ponieważ można zastosować odpowiedni dekoder i problem rozwiązany.Są też kalkulatory przeliczające liczby z jednego kodu na drugi.Mój przykład z FF dla 7segLED to liczba 15 w hexa czyli binarnie 1111 1111.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #248 dnia: Marca 15, 2011, 20:05:03 »
Zapytam z ciekawości kolejne segmenty g-a mają wartości binarne 2,4,8,16,32,64 oraz 128.Dlaczego akurat te wartości,czy to wynika z HSC?
To wynika z wsadu do uC, jak się dobrze przyjrzysz schematowi sterownika LED, cały port B z Attiny2313 steruje segmentami. W uC mogę przypisać jedną liczbę do portu B i w rezultacie ta liczba wysteruje mi wszystkie osiem linii tego portu za jednym zamachem (tylko jedno przypisanie zamiast 8 oddzielnie dla każdego segmentu). Kolejne linie portu B sterują konkretnymi segmentami, stąd właśnie takie wartości. Ale to nie ma dla Ciebie (jako użytkownika) żadnego znaczenia, wszystko załatwia wsad do uC i moduł simOUT, który wie co wysłać do uC :)

Cytuj
Drugie pytanie datyczy dodatkowych znaków wynikających z kombinacji zapalonych segmentów np.-,A,B,C,D,E,F,H i innych.Dopisując te znaki do pliku SimOut.xml można je później użyć w wyświetlaczach np. -12345 lub FF dla kodu ASCI?
Nie do końca, nie można wpisać jako znaku ciągu "-12345" lub "FF". Znak to znak, czyli jeden znak :) Nie ma (jeszcze) obsługi konkretnego kodu ASCII, narazie trzeba wpisać dokładnie znak jaki będzie zamieniany na konkretne segmenty.

shopiK, jesteś pewny, że chcesz użyć offsetu 0580 ? On odpowiada za kurs na jakim leci samolot. HDG z autopilota (chyba o to Ci chodzi) jest pod offsetem 07CC. Poniżej skrypt popełniony przez Zająca podczas testów (wyświetlanie i ustawianie ALT i HDG z autopilota):

script "lcd pic737"
{
    variable $control { module = "FSDataOutput"; id = "3110"; type = double; direct = out; }

    variable $altminus { module = "GameControllersInput"; id = "MJ16:przycisk_096"; type = bool; direct = in; }
    variable $altplus { module = "GameControllersInput"; id = "MJ16:przycisk_097"; type = bool; direct = in; }
    variable $altminusx10 { module = "GameControllersInput"; id = "MJ16:przycisk_104"; type = bool; direct = in; }   
    variable $altplusx10 { module = "GameControllersInput"; id = "MJ16:przycisk_105"; type = bool; direct = in; }

    variable_changed $altminus
    {
        if($altminus== true)
        {
            SetWithSignal( $control , MakeDouble( 0 , 65893 ) );
        }
    }
   
    variable_changed $altplus
    {
        if($altplus== true)
        {
            SetWithSignal( $control , MakeDouble( 0 , 65892 ) );
        }
    }
   
    variable_changed $altminusx10
    {
        if($altminusx10== true)
        {
            SetWithSignal( $control , MakeDouble( 0 , 1016 ) );
        }
    }
   
    variable_changed $altplusx10
    {   
        if($altplusx10== true)
        {
            SetWithSignal( $control , MakeDouble( 0 , 1017 ) );
        }
    }

    variable $hdgminus { module = "GameControllersInput"; id = "MJ16:przycisk_098"; type = bool; direct = in; }
    variable $hdgplus { module = "GameControllersInput"; id = "MJ16:przycisk_099"; type = bool; direct = in; }
    variable $hdgminusx10 { module = "GameControllersInput"; id = "MJ16:przycisk_106"; type = bool; direct = in; }   
    variable $hdgplusx10 { module = "GameControllersInput"; id = "MJ16:przycisk_107"; type = bool; direct = in; }

    variable_changed $hdgminus
    {
        if($hdgminus== true)
        {
            SetWithSignal( $control , MakeDouble( 0 , 65880 ) );
        }
    }
   
    variable_changed $hdgplus
    {
        if($hdgplus== true)
        {
            SetWithSignal( $control , MakeDouble( 0 , 65879 ) );
        }
    }
   
    variable_changed $hdgminusx10
    {
        if($hdgminusx10== true)
        {
            SetWithSignal( $control , MakeDouble( 0 , 1024 ) );
        }
    }
   
    variable_changed $hdgplusx10
    {
        if($hdgplusx10== true)
        {
            SetWithSignal( $control , MakeDouble( 0 , 1025 ) );
        }
    }

    variable $LCD11 { module = "LCDOnLPT"; id = "11"; type = string; direct = out; }
    variable $LCD12 { module = "LCDOnLPT"; id = "12"; type = string; direct = out; }

    variable $fs_alt { module = "FSDataInput"; id = "07D4"; type = int; direct = in; }
    variable $fs_hdg { module = "FSDataInput"; id = "07CC"; type = int; direct = in; }

    variable $modehdg { type = int;}

    variable_changed $fs_alt
    {
        $LCD11 = "  " + FormatNumber( ToDouble( $fs_alt ) / 19975.372160788090854781092647005d  , "000" );
    }
   
    variable_changed $fs_hdg
    {
        $modehdg = $fs_hdg / 182.04444444444444444444444444444d ;
    }
   
    variable_changed $modehdg   
    {
        if($modehdg >= 0)
        {
            $LCD12 = FormatNumber( $modehdg , "000" );
        }
        else   
        {   
            $LCD12 = FormatNumber( $modehdg + 360 , "000" );
        }
    }   
}


Odp: Aplikacja DomowyKokpit
« Odpowiedź #249 dnia: Marca 15, 2011, 22:20:00 »
Oczywiście, że chodziło mi o offset 07CC. Tego używam. Jeszcze skryptu Zajca nie testowałem, ale już widzę, że jest tam odpowiednie formatowanie. Więc powinno być ok.

Cieszę się, że intuicję miałem dobrą - chodzi o to dzielenie przez 182 (Zając używa dokładniejszej liczby) Ponadto podobnie myślałem podzieli hdg na tą większą od 0 i mniejszą (tylko nie doszedłem do tego, że trza by dodać 360 :)

Odp: Aplikacja DomowyKokpit
« Odpowiedź #250 dnia: Marca 15, 2011, 22:21:34 »
Cytuj
W uC mogę przypisać jedną liczbę do portu B i w rezultacie ta liczba wysteruje mi wszystkie osiem linii tego portu za jednym zamachem
Dzięki za wyjaśnienia.Bardzo to sprytnie zrobiłeś.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #251 dnia: Marca 16, 2011, 00:01:00 »
Dzięki przestudiowaniu skryptu Zająca - wyświetlacze już śmigają :-) Dzięki.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #252 dnia: Marca 17, 2011, 20:19:20 »
Czy język skryptów pozwala na "budowanie" nazw zmiennych w trakcie wykonywania kodu?

Chodzi mi o to, żeby zamiast:
$led_022_01 =true;
$led_022_02 =true;
$led_022_03 =true;
$led_022_04 =true;
$led_022_05 =true;
[code]

móc zrobić np w pętli:

[code]
for i=0 to 10
$led_022_(i) =true;
next i

Pamiętam, że nie każdy język skryptowy to potrafi, ale wolę się upewnić, oszczędziłoby mi to klawiatury.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #253 dnia: Marca 17, 2011, 21:00:13 »
HSC nie potrafi, nawet jeśli by potrafiło, to nic z tego nie przyjdzie bo nie ma jeszcze implementacji pętli :) Ale można pętle robić wykorzystując funkcje. Teoretycznie możnaby zastosować tablice, ale z kolei tablice nie mogą przechowywać zmiennych (referencji do zmiennych). Sporo różnych funkcji muszę dorobić do tego prymitywnego języka.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #254 dnia: Marca 17, 2011, 22:50:27 »
Akurat pętla to był przykład, można to timerem załatwić. Ale tak się właśnie domyślałem. Toż to język skryptowy.