Arduino & IoT Academy · Lekcja

Miganie bez delay() za pomocą millis

Śledzić upływ czasu, aby uruchamiać zadania zgodnie z harmonogramem.

Lekcja 3 z 413 kroki

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. 🎉

Bezpłatny start

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

  1. int, float, bool na Arduino
  2. Dlaczego delay() blokuje wszystko
  3. Miganie bez delay() za pomocą millis
  4. Uruchamianie dwóch rzeczy jednocześnie
← Powrót do Arduino & IoT Academy