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

Problem z typami danych, konwersja typów

rob666 15 Kwi 2010 10:04 1079 3
REKLAMA
  • #1 7963276
    rob666
    Poziom 2  
    Witam,
    mam pytanko do szanownego grona:

    Posiadam mikrokontroler avr do którego podłączone mam czujnik temp ds18b20 i wyświetlacz 7segmentowy. (Czujnik działa poprawnie jeśli wyświetlam temperaturę na wyświetlaczu LCD).
    Chciałbym jednak wyświetlać temp na wyświetlaczu 4x 7 Seg.

    napisałem funkcje do wyświetlania na 7 seg
    void display(uint8_t init,char l1,char l2,char l3,char l4)

    przetestowane i działa poprawnie

    Teraz problem:
    w jaki sposób mogę uzyskać char l1, l2, l3, l4 :?: jak to prze konwertować :?: mając do dyspozycji dane z czujnika:

    ds.nds[0] = get_1w();
    ds.nds[1] = get_1w();
    
    union{
    int tds;
    char nds[2];
    }ds;


    do wyświetlania na LCD wykorzystuje
    itoa(ds.tds/16,buf,10);//temper. całkowita
    LCD_WriteText(buf);
  • REKLAMA
  • #2 7963379
    elonica
    Poziom 12  
    Witam,

    Jeśli dobrze rozumiem:
    char * itoa ( int value, char * str, int base );
    itoa zapełnia Twój buf który jest tablicą (dokładniej buf jest wskaźnikiem do pierwszego elementu tablicy buf[n]).

    więc wywołaj:

    void display(uint8_t init,char l1,char l2,char l3,char l4)

    gdzie l1 -> buf[0] (lub *buf)
    gdzie l2 -> buf[1] (lub *(buf+1))
    gdzie l3 -> buf[2] (lub *(buf+2))
    gdzie l4 -> buf[3] (lub *(buf+3))

    (lub odwrotnie - może się okazać, że cyfry będą w złej kolejności)
  • REKLAMA
  • #4 7963628
    OlekM
    Poziom 17  
    Pytanie jest - co ma być w tych zmiennych, bo są przynajmniej 3 możliwości:

    1. segmenty, które mają być zapalone / zgaszone, zapisane na kolejnych bitach
    2. liczba z zakresu 0 - 9
    3. znak z zakresu '0' - '9'
REKLAMA