Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega16, Bascom, pomysł na zapis i wyświetlanie zmiennej.

lukashb 24 Oct 2010 14:19 2201 9
  • #1
    lukashb
    Level 39  
    Witam! Postanowiłem się uśmiechnąć do was o pomoc. Mianowicie od pewnego czasu męczy mnie kłopot na którego rozwiązanie niemogę wpaść. Mam urządzenie, na wyświetlaczu wyświetlam sobie zmienną String (cyfry) i właściwie tyle działa i to dobrze. Problem się rozpoczyna kiedy chciałbym "archiwizować" na LCD poprzednie wyniki zmiennej. Czy to się w ogóle da zrobić? pewnie się da, bo wszystko się da tylko za jaką cenę. Środowisko Bascom, LCD graficzny KS108, Atmega16. chcę zapisywać 4 "poprzednie" wyniki + piąty najnowszy. Czyli, nowy wynik zmiennej, reszta pusta, przychodzi kolejna zmienna i ta poprzednia trafia pod spód tej nowej. Wyświetlacz w konfiguracji pionowej stąd taki opis. Narazie programu nie wklejam, bo działa, tylko rozważmy teoretyczną możliwość rozwiązania takiego układu wyświetlania. Gdzie zapisywać zmienną, by nie została utracona itp. Jak narazie tu się mocno pogubiłem. Myślałem najpierw, by utworzyć dodatkowe 4 zmienne pomocnicze String, by przechowały te wartości, lecz jak je wpisywać to już problem. Gdy ostatnia pozycja się zapełni, i przyjdzie kolejna, to ta ostatnia zostaje nadpisana. Trochę zakręciłem, lecz mam nadzieję, że uda się coś wymyśleć. Pozdrawiam!
  • Helpful post
    #2
    Jaca
    Level 31  
    Stwórz tablicę za pomocą:

    Dim Zmienna(5) As Byte 'lub Word, Integer, Long, Single, Double...
    

    Przed zapisem aktualnej wartości do Zmienna(1), przesuń wartości z 1, 2, 3, 4 o jeden indeks (na 2, 3, 4, 5). Pamiętaj aby zrobić to tak, by nie "zamazać" wartości przy przesuwaniu. Potem zapisujesz aktualną wartość do Zmienna(1) i masz komplet, który wyświetlasz na LCD.
  • #3
    lukashb
    Level 39  
    Ok, czyli podobnie jak myślałem. Ale do rzeczy. Moją główną zmienną jest zmienna o nazwie "Sekwencja" jako String. Tworzę dalej 4 dodatkowe zmienne typu Sekwencja1 itp. także jako String, odpowiednio umieszczam każdą na LCD (X,Y) i potem przesuwam na zasadzie, że Sekwencja1 = Sekwencja2 itp?? przyznam, że takie proste zadanie sprawia mi nie lada problem, dlatego jeśli można by prosić o kawałeczek więcej to byłbym wdzięczny. Aktualnie dodaję te elementy:
    
    Dim Sekwencja1 as string * 10 <- ten akurat już jest, bo wyświetla aktualnie.
    
    Dim Sekwencja2 as string * 10
    
    Dim Sekwencja3 as string * 10
    
    Dim Sekwencja4 as string * 10
    
    Dim Sekwencja5 as string * 10
    
    


    Tak jak pisałem wyżej, trzeba przesunąć zmienne o jeden, prawdopodobnie w taki sposób:
    
    Sekwencja1 = Sekwencja2
    
    Sekwencja2 = Sekwencja3
    
    Sekwencja3 = Sekwencja4
    
    Sekwencja4 = Sekwencja5
    
    

    Tyle wiem narazie. Dziękuję.
  • Helpful post
    #4
    Jaca
    Level 31  
    Po to poradziłem Ci aby użyć do tego tablicy aby w łatwy sposób, przy użyciu pętli For...Next można było nią zarządzać (w tym i wyświetlać).

    Dim Seq(5) As String * 10
    Dim Tekst As String * 10
    Dim Index As Byte
    
    Tekst = "Aktualna"
    For Index = 4 to 1 Step -1
       Seq(index + 1) = Seq(index) 'przesuwanie 4 do 5, 3 do 4,...
    Next
    Seq(1) = Text
    
    'A tu wyświetlanie całości, wraz z aktualną wartością
    For Index = 1 to 5
       LCD(0 , Index) = Seq(index) ' LCD(x , y) lub inna procedura wyświetlania
    Next
    


    Czy tak nie prościej i bardziej czytelnie ? :)
  • #5
    lukashb
    Level 39  
    Hmm, no napewno jest mniej kodu, ale czy prościej, zaraz się okaże :D. Pierwsze pytanie, w którym miejscu deklaruję pozycję zmiennych na wyświetlaczu?? bo niemogę tego rozgryźć. Tzn, myślę, że to będzie ten fragment
    
    For Index = 1 to 5 
       LCD(0 , Index) = Seq(index) ' LCD(x , y) lub inna procedura wyświetlania 
    Next 
    
    ale nie zabardzo mi mówi zapis LCD(0 , Index), czy w tym miejscu ma być procedura wyświetlania?? Czy może źle rozumiem to?? Do wyświetlenia na LCD używam takiej biblioteki http://evertdekker.com/Joomla/index.php?option=com_content&task=view&id=49&Itemid=86 z poleceniem
     Lcdtext string, x , y , fontset , inverse , rotation 
    więc sądzę, że tak czy inaczej, gdzieś tam trzeba zapisać 5 razy taką wstawkę by wyświetlić całość na LCD (1 główna pozycja + 4 zapamiętane). Przepraszam, za takie pytania, ale wychodzą braki...
  • Helpful post
    #6
    Jaca
    Level 31  
    Zapis LCD(0, Index) dałem umownie bo nie wiedziałem jak będziesz to wyświetlał.
    Wstaw swój Lcdtext Seq(index), 0, Index * 8... w pętlę For...Next wyświetlania i gra. :)
  • #7
    lukashb
    Level 39  
    No dobra, a tam gdzie jest
    Tekst = "Aktualna" 

    to w miejsce "aktualna" wrzucam pierwszy wynik który przychodzi (Sekwencja1)??
    Jeżeli tak to spróboję zebrać to razem.
    
    Dim Seq(5) As String * 10 
    Dim Tekst As String * 10 
    Dim Index As Byte 
    
    Tekst = "Aktualna" 
    For Index = 4 to 1 Step -1 
       Seq(index + 1) = Seq(index) 'przesuwanie 4 do 5, 3 do 4,... 
    Next 
    Seq(1) = Text 
    
    'A tu wyświetlanie całości, wraz z aktualną wartością 
    For Index = 1 to 5 
       'Tu wstawiam...no właśnie, bo nie mogę dojść jak dokładnie to zapisać??
    Next 
    

    Tak jak pisałem, tak wygląda element wyświetlający
    Lcdtext string, x , y , fontset , inverse , rotation
    odpowiednio skonfigurowany i np. Lcdtext string, 0 , 64 , 1 , 0 , 1 gdzie zamiast string wstawiam Sekwencja. Ale gdzie tu upchnąć o te dane: Seq(index), 0, Index * 8, chyba będzie lepiej jak na Pw pójdziemy o ile można (prosiłbym) :). Dziekuję
  • Helpful post
    #8
    Jaca
    Level 31  
    Post wyżej napisałem jak ma wyglądać wyświetlanie tekstu. Wstaw tą linię tam gdzie umieściłeś komentarz "Tu wstawiam..." :)

    ps. Pisałem z pamięci i zamiast Seq(1) = Text powinno być Seq(1) = Tekst czyli zapisanie aktualnej wartości po przesunięciu.