logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[bascom-avr] zmiana rozdzielczosci zmiennej

ciomateusz 06 Sie 2010 23:56 2025 19
REKLAMA
  • #1 8372734
    ciomateusz
    Poziom 14  
    Witam
    mam problem ze zmianą rozdzielczości wyświetlania zmiennej w bascomie pod procesor dokładnie atmega16.
    Mam zmienną typu single i chciał bym ją na wyświetlaczu lcd wyświetlać z rozdzielczością 0,5 czyli po kolei ....-1 -0,5 0 0,5 1 1,5 2 2,5 ...itd.
    Z rozdzielczością 0,1 nie ma problemu bo wystarczy zamaskować niepotrzebne dane i gotowe ale jak się zabrać za rozdzielczość 0,5? może ktoś przerabiał ten temat?
  • REKLAMA
  • Pomocny post
    #2 8372741
    Konto nie istnieje
    Poziom 1  
  • #3 8373326
    ciomateusz
    Poziom 14  
    oki dzięki o to właśnie mi chodziło działa dobrze ale mam jeszcze jeden kłopot
    chcę żeby każda wartość na wyświetlaczu była w jednym miejscu to znaczy żeby znak kropki był w tej samej linii zawsze czyi coś takiego

    
    -12.5
     -7.0
      0.0
     12.5
    


    próbowałem funkcjami
    
    wysw = Fusing(wart , "###.#")
    wysw = Format(wysw , "00000") 
    


    ale nie działa to
  • REKLAMA
  • #5 8373897
    ciomateusz
    Poziom 14  
    próbowałem też tak. efekt jest taki że przy przejściu z ujemnej na dodatnią liczbę "kropka" przesuwa się o jeden, w drugą strone jest to samo. Liczby -1.0 i -11.5 są dobrze tak samo jak z liczbami 1.5 i 11.5. Problem jest tylko przy przejsciu z tego + na minus bo ta "ta kropka wędruje w bok
  • #6 8374007
    Freddy
    Poziom 43  
    Gdybyś łaskawie poczytał w helpie opis komendy "FORMAT" nie pisał byś takich rzeczy, tylko rozwiązał problem sam! Nie czekaj na gotowca !
  • #7 8374571
    ciomateusz
    Poziom 14  
    pisałem że próbowałem rozwiązać problem, patrzyłem do helpa i nie wykombinowałem więc pisze tu. Takie wyświetlanie miałem już zrealizowane bez funkcji format (dodając parę pętli if) jednak na przyszłość chciał bym wiedzieć normalne rozwiązanie.
    Według mnie bascom help mówi żeby zrobić tak
    
     Stout1 = Fusing(wout1 , "##.#" )
     Stout1 = Format(stout1 , "-   . ")
    

    ale to nie działa

    jak do tej pory to mam tak i działa:
    
     Stout1 = Fusing(wout1 , "##.#" )
     Stout1 = Format(stout1 , "-   ")
    


    i przy wyświetlaniu tak:
    
    If wout1 >= 0 Then
      Lcd " "
      End If
     Lcd Stout1
    


    to załatwia problem przesuwania się "kropki" przy zmianie znaku.
  • #8 8374870
    Freddy
    Poziom 43  
    Jednak nie przeczytałeś helpa, bo w nim jest dokładnie napisane i podany jest przykład.
    S = Format(s , " +000.00")
  • REKLAMA
  • #9 8376807
    ciomateusz
    Poziom 14  
    wszystko pięknie tylko że ta opcja dodaje 0 przed samą cyfrą i znak + (wcześniej pokazałem przykłady jakie chcę uzyskać)
    Próbowałem też bez zera na początku i bez plusa (zastąpione spacjami) tylko wtedy tak jak mówię przy zmianie znaku liczba pływa
  • #10 8377169
    Freddy
    Poziom 43  
    Czy próbowałeś samo ?
    S = Format(s , "+")

    Zawsze możesz potem wyciąć znak "+" ze stringu. :)
  • #11 8377273
    Konto nie istnieje
    Poziom 1  
  • #12 8377288
    Freddy
    Poziom 43  
    Oczywiście chodziło mi o wycięcie i zastąpienie go spacją :)
  • #14 8378107
    ciomateusz
    Poziom 14  
    to widzem że nie ma jednoznacznej metody żeby uzyskać zamierzony efekt i na przyszłość też będę musiał kombinować. Dzięki wszystkim za wszelkie podpowiedzi - tak jak pisałem problem mam rozwiązany tylko nie bezpośrednio na czym mi zalezało.

    Temat można zamknąć

    Proszę poprawić pisownię.
    Robak
  • #15 8694688
    ciomateusz
    Poziom 14  
    Odnowie temat bo teraz mam bardzo podobny problem. Mianowicie chodzi o uzyskanie coś w rodzaju pętli histerezy czyli mając zmienną np i=13,14,15,16,17 chcę zaokrąglić ją do dziesiątek (teraz już żaden problem) jednak chcę się pozbyć migotania cyfr (gdy zaokrąglamy liczbę 15 uzyskujemy 10 a gdy 16 wychodzi już 20). Moje pytanie to: czy jest sposób na to żeby gdy wartość zmiennej i osiągnie dajmy na to 16 to przechodzimy po zaokrągleniu na 20 a na 10 przejdziemy wtedy gdy i spadnie do 14 (załatwiło by mi to problem migotania ostatniej cyfry gdy i zbliża się do 15,16). są na to jakieś gotowe może funkcje? spotkał się ktoś z rozwiązaniem tego problemu? (język dalej bascom i procesor z rodziny avr)
  • #16 8696061
    Freddy
    Poziom 43  
    Próbowałeś tak : int(a/10)*10 ?
  • Pomocny post
    #17 8696740
    Konto nie istnieje
    Poziom 1  
  • #18 8698580
    ciomateusz
    Poziom 14  
    o to to
    Na ten sam pomysł wpadłem dzisiaj. Dzieki za pomoc
    Teraz już sobie poradzę (myślę:D)
  • #19 8699436
    Freddy
    Poziom 43  
    atom1477 napisał:
    O matko, Freddy. A co to ma wspólnego z histerezą?
    ...

    odpowiedziałem jak "zaokrąglić" do dziesiątek, czyżby było źle ?
  • REKLAMA
  • #20 8774534
    ciomateusz
    Poziom 14  
    Problem rozwiązany w następujący sposób:
    
    temp=wyswietl+7
    if  I >=temp then
    wyswietl=wyswietl+10
    else
    temp=temp-14
    if I<=temp then
    wyswietl=wyswietl-10
    end if
    end if
    lcd wyswietl
    
REKLAMA