11-07-2022, 14:47
W kursie jest to wyjaśnione. Jak wpiszesz delay(1000) to przez sekundę, czyli wieczność w świecie uC, uC nic nie robi, zamiast tego jak chcesz świeć ledem przez 1s to ją włączasz, zapisujesz sobie kiedy to zrobiłeś i pozwalając programowi robić inne rzeczy sprawdzasz, czy już minęła sekunda, by wyłączyć led. Do tego służy funkcja millis().
Tak samo jak byś to zrobił z delay, to robisz delay(1) i zliczasz sobie takie postoje w zmienna++, jak zmienna jest >1000 to zmieniasz stan led. Tylko delay(1) zajmuje więcej niż 1ms, a inne czynności w loop też coś trwają i w zależności ile ich jest błąd pomiaru 1s będzie się zmieniał, nawet jak ustalisz sobie, że zamiast 1000 zliczasz 995, to za chwilę coś dopiszesz do programu i już nie będzie to 995 tylko np. 990.
A jak chcesz migać 1 ledem co 1s, a drugim led co 0.25s to już problem. Można zrobić delay(1) i co 250 takich przystanków zmieniać stan led1, a co 1000 drugiej.
Z millis() to działa lepiej, jego licznik, taka zmienna++, działa w przerwaniach niezależnie od tego co się dzieje w loop, chociaż o tyle niedokładnie, że zerkasz na niego z loop, więc nie zawsze dokładnie 1s od poprzedniego zerknięcia.
Tak samo jak byś to zrobił z delay, to robisz delay(1) i zliczasz sobie takie postoje w zmienna++, jak zmienna jest >1000 to zmieniasz stan led. Tylko delay(1) zajmuje więcej niż 1ms, a inne czynności w loop też coś trwają i w zależności ile ich jest błąd pomiaru 1s będzie się zmieniał, nawet jak ustalisz sobie, że zamiast 1000 zliczasz 995, to za chwilę coś dopiszesz do programu i już nie będzie to 995 tylko np. 990.
A jak chcesz migać 1 ledem co 1s, a drugim led co 0.25s to już problem. Można zrobić delay(1) i co 250 takich przystanków zmieniać stan led1, a co 1000 drugiej.
Z millis() to działa lepiej, jego licznik, taka zmienna++, działa w przerwaniach niezależnie od tego co się dzieje w loop, chociaż o tyle niedokładnie, że zerkasz na niego z loop, więc nie zawsze dokładnie 1s od poprzedniego zerknięcia.
Miło być decenianym https://buycoffee.to/kaczakat