Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[BASCOM] Średni wynik z ADC i problem z funkcją Round

08 Mar 2011 19:44 2157 9
  • Poziom 16  
    Mam problem z uśrednieniem wyniku z przetwornika ADC. Nabazgrałem cos ale nie do końca to działa. Chcę z czytywać 10 ostatnich wyników i wyciągnąć z nich średnią arytmetyczną, wysłać do LCD na pierwsza linie.

    Następnie ten uśredniony wynik będzie dzielony przez 6 i mnożony przez 100 i wysłany do LCD na druga linie.

    Mam też problem z funkcją zaokrąglania round po zaokrągleniu dalej mam przecinek i zero. A dożę do jego zlikwidowania. Jak to poprawić.


    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Specjalista automatyka domowa
    Uśrednianie ci nie działa, bo nie zerujesz zmiennej Sre po dziesięciu pomiarach. Wynikiem funkcji format musi być zmienna tekstowa, a ty próbujesz zapisać to do Dys typu Single. Zresztą Dys po Round nie wymaga formatowania. Co najwyżej konwersji na tekst.
  • Poziom 16  
    Czyli powinienem powinno wygladać to tak:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Chciałem zastosować funkcje format, aby nie przesuwało mi miejscami cyfr jak liczba zmniejszy się ze 100 na 10 czy 1. A nie chce zer przed np: 001 czy 010.
    Czyli musiałbym zmienić zmienną Dys z Single na String?

    Mógłbyś wrzucić kod jak to powinno wyglądać?
  • Specjalista automatyka domowa
    Jeśli nie chcesz przesuwania liczb na wyświetlaczu to zrób tak:
    Po zaokrągleniu, zamień liczbę na tekst za pomocą STR. Następnie policz ilość znaków w tej zmiennej tekstowej za pomocą LEN i jeśli ma za mało to dodaj potrzebną ilość spacji za pomocą SPC lub np. " ".
  • Poziom 16  
    To wcześniejsze zerowanie Sre dobrze poprawiłem?

    Kurcze nie za bardzo rozumiem tą komendę LEN próbuję tak:


    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 16  
    Wgrałem taki kod niestety uśrednianie nie działa (wynik tak jakby jest co pętle dodawany do siebie jeżeli powinno być 18 to co sekundę rośnie o 18, 36...), ale sformatowane jest dobrze.

    Co do wyświetlanie wartości zaokrąglonej to w takim układzie w linijce widzę tylko jedną cyfrę.

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Specjalista automatyka domowa
    Bo powinieneś Sre w Else przepisać do innej zmiennej i wyzerować.
    I obrabiać tą nową zmienną. Inaczej ona po przejściu pętli jest zapisywana nową wartością.
    Co do wyświetlania zaokrąglenia to nie dokończyłeś nic z obsługą długości liczby przerobionej na tekst. Zmienna Dys_by zawiera tylko ilość znaków a nie wartość.
    Powinieneś w zależności od ilości znaków dodawać spacje by mieć zawsze liczby na tym samym miejscu. Czyli np. jeśli spodziewasz się otrzymać liczbę od jednej cyfry do trzech, to musisz napisać taki warunek,by po otrzymaniu liczby dwucyfrowej dodać jedną spację na początek, a jeśli ta liczba by była jednocyfrowa to dodać dwie spacje. Ilosć cyfr podaje ci właśnie funkcja LEN

    Poglądowy kod "na szybko" może zawierać blędy. Ale myślę, że jak są to je sobie juz sam poprawisz.
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 16  
    Wgrałem, ale wynik pokazuje się tylko na ułamek sekundy i później czysty LCD. Tak w pętli.

    Wynik dalej jest bardzo różny skacze co odświeżenie.

    Wyniku zaokrąglonego w ogóle nie pokazuje.
  • Poziom 16  
    Poradziłem już sobie z uśrednianiem wyniku, ale mam dalej problem z tym zaokrąglaniem.

    Nie ma jakiegoś prostego sposobu na zaokrąglenie liczby ułamkowej ?
    Te funkcje round i int nie działają poprawnie.
    Zaokrąglają, ale pozostaje przecinek i zero na końcu, którego chcę się pozbyć.