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

Wyświetlanie temperatury z DS18B20 na LCD - problem z kodem C

Bluzman 11 Mar 2020 18:03 519 4
REKLAMA
  • #1 18524662
    Bluzman
    Poziom 4  
    Witam. Ostatnio popełniłem kod w języku C żeby uruchomić popularny czujnik DS18B20. Przepisałem z zrozumieniem na tyle ile potrafiłem kod znaleziony w sieci, został trochę zmodyfikowany. Dodałem wyświetlanie temperatury z zmiennej po przecinku na LCD.

    Przedstawiam kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Czasem kompilacja przebiega poprawnie a innym wypluwa warning:
    ../main.c: In function 'main':
    ../main.c:17:12: warning: 'temp' is used uninitialized in this function [-Wuninitialized]
    double c = temp;

    W obu przypadkach wyświetla się to samo:
    Temp: 0,10 C

    Prosiłbym o przeanalizowanie tego kodu. Co robię źle?
  • REKLAMA
  • #2 18524701
    tmf
    VIP Zasłużony dla elektroda
    Ostrzeżenie mówi, że używasz zmienną temp, która nie została zainicjalizowana, co jest prawdą. W linii double c = temp; przypisujesz temp do c, ale temp nigdzie wcześniej nie ma przypisanej wartości. Pamiętaj, że deklaracja zmiennej w większości przypadków nie powoduje nadania im jakiejkolwiek wartości początkowej.
    Poza tym robisz źle, bo odczyt temp. masz w pętli, przypisujesz wynik do temp, ale nigdzie nic więcej z tym wynikiem nie robisz. W efekcie nie spodziewaj się jakichkolwiek sensownych wyników.
  • REKLAMA
  • #3 18524708
    n6210
    Poziom 29  
    Nie winikajac w obliczenia wsadz to:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    po tym:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 18525793
    Bluzman
    Poziom 4  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    To nic nie zmieniło

    Ale zrobiłem tak
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Teraz zmienia się tylko wartość przed przecinkiem a po jest cały czas ...,10. Czyli tak jak nie stosowałem tych obliczeń wcześniej. Wychodzi na to, że te obliczenia są do bani.

    Dodano po 4 [minuty]:

    tmf napisał:

    Poza tym robisz źle, bo odczyt temp. masz w pętli, przypisujesz wynik do temp, ale nigdzie nic więcej z tym wynikiem nie robisz. W efekcie nie spodziewaj się jakichkolwiek sensownych wyników.


    Ale jakby odczyt temperatury nie był w pętli to wtedy zmienna miałaby wartość nadaną jeden raz, na początku wykonywania programu i wyświetlałoby cały czas to samo. Chyba dobrze rozumuję?
  • #5 18525878
    n6210
    Poziom 29  
    nie wiem co te obliczenia mają zrobić, ale nie może po prostu zftormatować sposobu wyświetlania
    w samym sprintf np.:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    albo zrób to na stałym przecinku np:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA