Miganie bez delay() za pomocą millis
Śledzić upływ czasu, aby uruchamiać zadania zgodnie z harmonogramem.
Miganie bez delay() za pomocą millis to bezpłatna lekcja Arduino & IoT Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Arduino & IoT Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Arduino & IoT Academy zawiera 4 lekcji w sumie.
Wbudowany stoper
Funkcja millis zwraca liczbę milisekund, które upłynęły od włączenia płytki. To darmowy stoper, który cały czas odmierza czas. ⏱️
unsigned long now = millis();Dlaczego unsigned long
Wynik millis należy przechowywać w unsigned long. Licznik z czasem osiąga bardzo duże wartości, a zwykły int przepełniłby się w czasie krótszym niż minuta.
Główna idea
Zamiast wstrzymywać działanie, zapamiętujesz ostatni moment, w którym wykonano działanie, a następnie w każdej iteracji pętli sprawdzasz, ile czasu od niego upłynęło.
Zapamiętaj ostatni moment
Przechowuj w zmiennej takiej jak previousMillis moment ostatniego przełączenia diody LED. Przy każdym obrocie pętli porównasz ją z bieżącym czasem.
unsigned long previousMillis = 0;Ustaw interwał
Wybierz interwał, na przykład 1000 milisekund, jako odstęp między mignięciami. Działanie dopiero po upływie tego czasu zapewnia stały rytm.
const long interval = 1000;Czy upłynęło wystarczająco dużo czasu
W każdej iteracji pętli odejmij previousMillis od bieżącej wartości millis. Jeśli różnica jest co najmniej równa interwałowi, nadszedł czas na działanie.
if (millis() - previousMillis >= interval) {Zresetuj licznik czasu
W chwili wykonania działania ustaw previousMillis na bieżący czas. Spowoduje to ponowne rozpoczęcie odliczania, więc przed kolejnym mignięciem znów upłynie pełny interwał.
previousMillis = millis();Przełącz diodę LED
W bloku sterowanym czasem po prostu przełącz diodę LED: włącz ją, jeśli była wyłączona, albo wyłącz, jeśli była włączona. W ten sposób uzyskasz regularne miganie.
ledState = !ledState;
digitalWrite(ledPin, ledState);Pętla nigdy się nie zatrzymuje
Między kolejnymi mignięciami pętla wykonuje się z pełną szybkością, więc może odczytywać czujniki lub przyciski. Nic nie zostaje zamrożone podczas oczekiwania.
Odejmowanie obsługuje przepełnienie
Po około 49 dniach millis zawija się do zera, ale sposób oparty na odejmowaniu nadal zwraca prawidłową różnicę, więc odmierzanie czasu nadal działa.
Wielokrotnie użyteczny wzorzec
Ten wzorzec z użyciem millis działa dla dowolnych powtarzających się zadań, nie tylko dla migania. Wystarczy zmienić interwał i działanie, aby zaplanować praktycznie wszystko.
Szybkie sprawdzenie
Dlaczego wynik millis przechowujemy w unsigned long?
Podsumowanie
Poznałeś wzorzec z użyciem millis: zapamiętaj ostatni moment, sprawdź upływ czasu, a następnie wykonaj działanie i zresetuj licznik. Teraz płytka miga, pozostając w pełni gotowa do reakcji. 🎉
Ucz się C++ dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Miganie bez delay() za pomocą millis” jest bezpłatna?
Tak — pełny tekst „Miganie bez delay() za pomocą millis” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Arduino & IoT Academy, przejdź na CoddyKit PRO. Kurs Arduino & IoT Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Miganie bez delay() za pomocą millis”?
Śledzić upływ czasu, aby uruchamiać zadania zgodnie z harmonogramem. Ćwiczysz Arduino & IoT Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Arduino & IoT Academy?
Nie wymagamy żadnego doświadczenia. Arduino & IoT Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Miganie bez delay() za pomocą millis”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Arduino & IoT Academy?
Tak. Każda lekcja Arduino & IoT Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- int, float, bool na Arduino
- Dlaczego delay() blokuje wszystko
- Miganie bez delay() za pomocą millis
- Uruchamianie dwóch rzeczy jednocześnie