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

char float - Konwersja zmiennej 'float' do 'char'

RobotGTX 02 Maj 2013 17:34 2229 12
  • #1 02 Maj 2013 17:34
    RobotGTX
    Poziom 7  

    Problem wygląda tak:
    Mam pewną zmienną float wynik o wartości załóżmy 126,8.

    Chciałbym wyświetlić to zmienną na wyświetlaczu opartym o sterownik HD44780. Problem w tym że funkcja LCD_WriteText() obsługuje tylko tablice char.

    Wymyśliłem, żeby oddzielić wartość nieprzeciekową (tj. 126) od przeciekowej (tj. 8). Następnie podzielić te liczby na osobne cyfry i prze konwertować je na char (tj. 1 2 6 8). Wtedy mógłbym to wyświetlić. Założenie wydaje mi się dobre ale... gorzej z jego wykonaniem nie mogłem napisać odpowiedniego kodu :/

    Możliwe, że istnieje jakaś funkcja czy coś :)

    0 12
  • #2 02 Maj 2013 18:07
    skalsky5000
    Poziom 20  

    Poczytaj o sprintf()

    0
  • #3 02 Maj 2013 18:43
    Steryd3
    Poziom 31  

    Rozumiem, że piszesz w C. Jeżeli tak, to wszystko zależy jak mocny obliczeniowo mikrokontroler masz do dyspozycji. Najłatwiej jest skorzystać z funkcji sprintf z odpowiednimi parametrami. Innym rozwiązaniem jest budowa funkcji zamieniającej zmienną typu int na tablicę char w oparciu o funkcję itoa lub też stworzenie swojej funkcji opartej o rozbicie liczby na cyfry i konwersję poszczególnych cyfr na kod ASCI(dodawanie wartości 48 do cyfry).

    0
  • #4 02 Maj 2013 18:47
    RobotGTX
    Poziom 7  

    Tak programuje w C. Moc obliczeniowa - mam ATMega8 16MHz.

    Spróbuje z tą funkcją sprintf.

    0
  • #5 02 Maj 2013 19:52
    Steryd3
    Poziom 31  

    Próbuj ale może być różnie bo AVR ma małe zasoby. Z pewnością jest to najwygodniejsza opcja. Osobiście a AVRach używam drugiej z wymienionych przeze mnie opcji tj. funkcji itoa.

    0
  • #6 02 Maj 2013 20:07
    RobotGTX
    Poziom 7  

    Nie wiem o co kaman...

    Napisałem prosty program aby sprawdzić jak działa ta funkcja i coś jest nie tak...

    Kod: c
    Zaloguj się, aby zobaczyć kod

    W efekcie nic nie moja się na wyświetlaczu... Próbowałem dopisywać (char) a także dodawać 48. W efekcie raz na wyświetlaczu pojawiło się pełno dziewnych znaków ;/ Ale nie 4....

    0
  • #7 02 Maj 2013 20:32
    Carmixus
    Poziom 14  

    itoa -> integer to ascii string -> funkcja zmieniająca liczbę całkowitą na stringa. Nie floaty.

    Ale można ją próbować wykorzystać z rzutowaniem floata na inty, np.:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod pisany z głowy, więc może nie do końca działać, być może trzeba będzie pozmieniać niektóre indeksy, czy coś. Z funkcją sprintf() byłoby łatwiej, ale prawdopodobnie kosztem większego zużycia pamięci i/lub dłuższego czasu działania takiej konwersji.

    edit: Drobna zmiana w kodzie - właśnie doczytałem że już wpadliście na podobny pomysł. :P

    0
  • #8 02 Maj 2013 20:34
    Steryd3
    Poziom 31  

    Czy to jest cały program czy tylko fragment?? Wpisz po prostu do liczba1 jakąś liczbę z palca tj.:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Po ostatniej linijce wstaw pętle nieskończoną np
    Kod: c
    Zaloguj się, aby zobaczyć kod
    lub
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Sprawdź czy działa samo
    Kod: c
    Zaloguj się, aby zobaczyć kod
    gdy w tablicę char wypełnisz ręcznie.

    0
  • #9 02 Maj 2013 20:44
    RobotGTX
    Poziom 7  

    To nawet nie jest jego fragment :P
    Gdy zrobię tak:
    char text[12];
    text[0] = "A"
    LCD_WriteText(text);

    Wyświeltacz normalnie wyświetli "A" problem występuje w zasadzie tylko przy liczbach.

    0
  • #10 02 Maj 2013 20:49
    Steryd3
    Poziom 31  

    Wyciąłem z swoich zasobów jak ja to swego czasu realizowałem:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Były to dwie funkcje które służyły do wypisania na wyświetlaczu liczby( po uprzednim określeniu jej pozycji na wyświetlaczu).
    Mam nadzieje, że ten krótki fragmencik okaże się pomocny.

    0
  • #11 02 Maj 2013 21:01
    RobotGTX
    Poziom 7  

    Sorki ;/ Ale nie za bardzo wiem co zrobić z tym kodem... Moja biblioteka do obsługi wyświetlacza nie posiada funkcji LCDdata

    0
  • #12 02 Maj 2013 21:08
    krru
    Poziom 32  

    RobotGTX napisał:
    To nawet nie jest jego fragment :P
    Gdy zrobię tak:
    char text[12];
    text[0] = "A"



    To jest w zasadzie błędne. Powinno być:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    albo
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pojedyncze apostrofy oznaczają literkę, podwójne - ciąg znaków jako tablicę wskaźnik (który oczywiście w szczególności może być jednoznakowy).


    A
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Działa prawidłowo?

    0
  • #13 02 Maj 2013 21:41
    Steryd3
    Poziom 31  

    Moja funkcja lcd_str to to samo co u Ciebie LCD_WriteText. Wstawiłem ją tylko po to by można było się zorientować co ona robi a nie byś ją stosował.

    0