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

Termometr na Atmega8, °C i °F

13 Mar 2011 00:05 2681 11
  • #1 9269781
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #2 9269813
    kuuczoo
    Poziom 26  
    Z tego co się orientuję to pisząc
    temp2 = 32+(5/9)*temp;
    działasz na liczbach całkowitych, więc wynik będzie zawsze 32 bo 5/9 całkowite to 0. Chyba powinno być
    temp2 = 32.0+(5.0/9.0)*temp;
    Ale nie jestem pewien.

    Dodano po 17 [minuty]:

    Z tego co pamiętam z programowania w C to właśnie zapis "5.0/9.0" dawał kompilatorowi sygnał że dzielenie ma się odbyć na liczbach rzeczywistych a nie całkowitych. Grunt, że prawdopodobnie tu tkwi błąd.
  • #3 9269948
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #4 9270150
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #5 9270273
    mirekk36
    Poziom 42  
    Poza tym warto się zastanowić czy konieczne jest korzystanie z typów float do tak prostych celów??? Przecież w 100% można się obejść bez nich robiąc proste działania na liczbach całkowitych.

    W zależności od tego ile masz miejsc po przecinku w temperaturze to przez tyle pomnożyć liczby składowe w tym działaniu. Np jeśli będą dwa miejsca po przecinku to:

    T(F) = 32 + (1.8*10) * (T(C)*10)

    a potem wynik dzielisz ale modulo 100 (polecenie div w języku AVR GCC i struktura div_t) i masz jak na tacy podane dwie liczby całkowite. Pierwsza to dziesiętne części temperatury druga to setne.

    Oczywiście samą temperaturę w st C też już wcześniej można tak przechowywać a na czas obliczania scalić ją poprzez pomnożenie części dziesiętnej x100 i dodanie części ułamkowej.
  • #6 9270369
    Konto nie istnieje
    Poziom 1  
  • #8 9270431
    Konto nie istnieje
    Poziom 1  
  • #10 9270444
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #11 9270716
    Konto nie istnieje
    Poziom 1  
  • #12 9270734
    Konto nie istnieje
    Poziom 1  
REKLAMA