Program pomiar temperatury - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Program pomiar temperatury (/watek-program-pomiar-temperatury) |
Program pomiar temperatury - Scoti - 08-05-2018 Witam chce napisać program dzięki któremu będę mógł odczytywać temperaturę z czujników DS18B20 w kilku miejscach jednocześnie(powiedzmy 3 ale fajnie jakby program był dla n-czujników). Mam takie założenie aby w konsoli wyświetlało mi się np.: "Czas 1h23min30s Czujnik Pierwszy: 24°C Czujnik Drugi: 23.5°C Czujnik Trzeci 24 °C Czas 1h23min32s Czujnik Pierwszy: 24.5°C Czujnik Drugi: 24°C Czujnik Trzeci 24°C " I tak dalej opóźnienie myślę ustawić na 2 sekundy dokładność domyślna to 0.5 °C nie będę tego zmieniał. Czas może być mierzony od momentu podłączenia ardurino. Do tego programu są potrzebne 2 biblioteki OneWire oraz DallasTemperature. Zacząłem już coś tworzyć ale słabo bardzo by mi zależało na tym czy w jakiś sposób mogę tą godzina sterować aby się tak wyświetlała. Poniżej program jaki mam (nie ma szału) Kod: #include <OneWire.h> //Wczytanie biblioteki RE: Program pomiar temperatury - Robson Kerman - 09-05-2018 Oczywiście, jak zwykle, jest wiele sposobów na wyświetlanie czasu. W tym przypadku, upływającego czasu od uruchomienia programu. Można na przykład zrobić tak Kod: unsigned long sec = millis()/1000; Można też w pętli sprawdzać czy minęła sekunda i inkrementować czas. Kod: int SS; Wyświetlanie tak samo jak w pierwszym przykładzie. Różnica jest taka, że ten zegar zresetuje się za 245000 lat, a gdybyś zadeklarował HH jako unsigned long long, to program mógł by liczyć te godziny przez miliardy lat. Nie chce mi się liczyć, ale reset Wszechświata będzie wcześniej niż reset tego zegara. RE: Program pomiar temperatury - es2 - 09-05-2018 (09-05-2018, 07:58)Robson Kerman napisał(a): Można też w pętli sprawdzać czy minęła sekunda i inkrementować czas.Czas należy odliczać na przerwaniach, do tego służą. Gdy w kodzie pojawią się delay co jest nagminna, złą praktyka Arduinowców, to sekunda może zrobię się dłuższa niżby sie wydawało. Arduino udostępnia odpowiednie mechanizmy odliczania czasu, wywoływania zdarzeń, w bibliotece timer. RE: Program pomiar temperatury - Robson Kerman - 09-05-2018 (09-05-2018, 08:25)es2 napisał(a): Czas należy odliczać na przerwaniach, do tego służą. W pełni się zgadzam. Dla tego w powyższych przykładach użyłem funkcji millis(), która to odlicza czas na przerwaniach. Pierwszy przykład jest delay'o odporny i gdyby pogrzebać w bibliotece millis.cpp, to można by wywołać przerwanie co jedną sekundę, a reset funkcji będzie za trzynaście lat, co w zupełności wystarczy Arduinowcom. Z drugiej jednak strony, co to była by za pomoc, widząc że dzieciak ma problem z konwersją milisekund na godziny, minuty i sekundy, czyli jest na 100% początkujący, a ja bym mu napisał "Weź se zrób na przerwaniach". RE: Program pomiar temperatury - es2 - 09-05-2018 (09-05-2018, 08:56)Robson Kerman napisał(a): Z drugiej jednak strony, co to była by za pomoc, widząc że dzieciak ma problem z konwersją milisekund na godziny, minuty i sekundy, czyli jest na 100% początkujący, a ja bym mu napisał "Weź se zrób na przerwaniach". Dobrych nawyków trzeba uczyć od początku, zwłaszcza, jeśli kod nie jest skomplikowany. Pod linkiem https://playground.arduino.cc/Code/Timer opisane są przykłady użycia biblioteki timer. W przypadku autora w setup wystarczy dodać Kod: t.every(1000, takeReading); Kod: void takeReading() zadeklarować zmienną: Kod: uint32_t volatile licznik_sekund=0; I mamy licznik sekund. Z odczytem licznika trochę gimnastyki, bo to nie ARM i 32 bitów nie odczyta jednym rozkazem Kod: uint32_t CzytajLicznikSekund() PS Mam nadzieję, ze niczego nie pominąłem. RE: Program pomiar temperatury - Scoti - 11-05-2018 Dziękuje za odpowiedzi wszystko fajnie tylko że mi nie działa :/ jakich muszę bibliotek użyć? Czy muszę określić jakiś pin czy co przeze który będzie się urządzenie komunikowało czy coś? RE: Program pomiar temperatury - es2 - 12-05-2018 (11-05-2018, 17:20)Scoti napisał(a): Dziękuje za odpowiedzi wszystko fajnie tylko że mi nie działa :/ jakich muszę bibliotek użyć? Czy muszę określić jakiś pin czy co przeze który będzie się urządzenie komunikowało czy coś? "Oczywista, oczywistość", że trzeba skonfigurować pin. Warto pokazać też schemat, może jest błąd w połączeniach. Biblioteki Arduino, dość nieszczęśliwie obsługują 1-Wire. Zaletą (chyba jedyną) jest to, że można wybrać dowolny pin do komunikacja, reszta, to same wady. Do 1-Wire, najlepiej użyć USART. Niestety, najpopularniejsze UNO, praktycznie nie ma USART. Jedyny dostępny, jest użyty do pseudo debugowania. |