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

Odliczanie Czasu Arduino LCD1602

08 Lis 2019 23:20 117 1
  • Poziom 11  
    Witam. Proszę o pomoc. Potrzebuje zrobić takie coś. Wciskam przycisk i puszczam , następuje odliczanie czasu 20 sekund na wyświetlaczu LCD 1602. Po upłynięciu czasu zapala się dioda i na wyświetlaczu komunikat: Koniec pomiaru.

    Wciskam kolejny przycisk i puszczam, następuje odliczanie czasu 50 sekund na wyświetlaczu LCD 1602. Po upłynięciu czasu zapala się dioda numer 2 i na wyświetlaczu komunikat: Koniec pomiaru drugiego.

    Nie wiem jak zrobić czy na Deley, czy na millis. Nie mam pomysłu jak ułożyć kod.
    Może ktoś pomoże??
    Przeszukałem Google ale nie znalazłem nic co mogło by spełniać moje zadanie.
    Dziękuje za pomoc
  • PCBway
  • Poziom 36  
    mateusz93mk napisał:


    Nie wiem jak zrobić czy na Deley, czy na millis. Nie mam pomysłu jak ułożyć kod.
    Może ktoś pomoże??
    Dziękuje za pomoc


    Czas odliczany przez funkcję delay() jest dość dokładny, bo odcinki czasowe 1-milisekundowe są formowane przez wbudowany w procesor Timer0. Arduino automatycznie (bez twojej wiedzy) konfiguruje go do tej funkcji.
    Jednak zliczaniem tych milisekund zajmuje się procesor, zatem zliczając 20000 milisekund (= 20 sec.) program będzie praktycznie stał w miejscu (robił wrażenie, że nic się nie dzieje), aż do czasu wypełnienia tych 20 sekund. A ty chciałbyś, aby jednocześnie z liczeniem czasu obsłużył także LCD z aktualną wartością naliczonych sekund, albo może z dodatkowym rachunkiem ilości sekund (nie milisekund (!)) pozostałych do końca zadanej procedury. Tak się nie dzieje, bo ten procesor nie wykonuje więcej niż jedną czynność "na raz'.
    Do takiej kombinacji musisz użyć funkcji millis(), gdzie w części głównej programu (pętli loop) sprawdzasz, czy zadany czas już upłynął; jeżeli tak, to wydajesz odpowiednie komendy dla portów z diodami, a także dla LCD - że czas już zakończony. Jeżeli nie upłynął, to wyświetla aktualną bądź przeliczoną wartość czasu wynikającą z odpowiedniego rachunku (tego co chcesz publikować).
    Jak to robić(?) ? przeanalizuj uważnie przykład w Arduino: "BlinkWithoutDelay".
    Tworząc kod wzoruj się na tym przykładzie..... tam jest wszystko co ci potrzeba wiedzieć i zastosować. Reszta to twoja koncepcja i wyobraźnia.
    Odcinki 1-milisekundowe dla funkcji millis() pochodzą z tej samej funkcji w arduino co delay(), więc są identycznie dokładne.
    Hint: Najpierw jednak odnajdź co to za funkcja millis(), co ona tworzy i jak ten "arduinowy zegar " wykorzystać, jaka jest analogia w porównaniu do codziennego używania zegarów ściennych, tych na dworcach kolejowych, czy też tych zegarków na ręce.

    e marcus