Dlaczego delay() blokuje wszystko
Zobaczyć, jak wstrzymanie zatrzymuje reakcję płytki.
Dlaczego delay() blokuje wszystko to bezpłatna lekcja Arduino & IoT Academy na CoddyKit. To lekcja 2 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.
Prosta pauza
Funkcja delay wstrzymuje działanie szkicu na określoną liczbę milisekund. To najprostszy sposób na spowolnienie działania i sprawienie, by miganie było widoczne.
delay(1000);Co oznacza 1000
delay(1000) czeka pełną sekundę, ponieważ wartość jest podana w milisekundach. Zatem delay(500) oznacza pół sekundy, a delay(2000) — dwie sekundy.
Zamraża płytkę
Jest jednak pewien problem: delay zamraża wszystko. Podczas oczekiwania płytka nie robi zupełnie nic innego, jak osoba wstrzymująca oddech. 😮
Pomijane naciśnięcia przycisku
Podczas działania delay płytka nie może wykryć naciśnięcia przycisku. Jeśli naciśnie się go w trakcie pauzy, zdarzenie zostanie po prostu zignorowane, co dla użytkownika wygląda jak awaria.
Zobacz problem
W tym przykładzie między kolejnymi sprawdzeniami znajduje się jednosekundowe delay, więc każde naciśnięcie w ciągu tej sekundy zostanie utracone, zanim nastąpi następny odczyt.
digitalRead(buttonPin);
delay(1000);Tylko jedno zadanie naraz
Ponieważ delay blokuje działanie, nie można jednocześnie migać diodą LED i obserwować czujnika. Cały szkic czeka jako jedno zadanie.
Sumowanie kolejnych opóźnień
Dwa wywołania delay jedno po drugim po prostu się sumują. Jeśli umieści się ich kilka w różnych miejscach, płytka spędzi większość czasu zamrożona i nie będzie reagować.
W sam raz dla prostych szkiców
delay nie jest niczym złym. W przypadku pojedynczej migającej diody LED, gdy nic więcej się nie dzieje, jego użycie jest całkowicie jasne i odpowiednie.
Prawdziwy cel
Prawdziwym celem jest nieblokujący szkic, który nadal reaguje, a jednocześnie odmierza czas zdarzeń. Oznacza to, że pętla nie może być zamrażana przez długą pauzę.
Zamiast tego myśl o czasie
Zamiast wstrzymywać działanie można sprawdzać, ile czasu upłynęło, i działać dopiero wtedy, gdy minie go wystarczająco dużo. W międzyczasie pętla nadal wykonuje kolejne obroty.
Nadchodzi lepsze narzędzie
Wkrótce poznasz millis — zegar, który pozwala mierzyć upływ czasu bez zamrażania działania. Dzięki niemu prawdziwe projekty pozostają responsywne.
Szybkie sprawdzenie
Jaka jest główna wada używania delay w szkicu?
Podsumowanie
Wiesz już, że delay jest prosty, ale zamraża płytkę, przez co pomija dane wejściowe i blokuje inne zadania. Następnie nauczysz się odmierzać czas zdarzeń bez zatrzymywania pętli. ✨
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 „Dlaczego delay() blokuje wszystko” jest bezpłatna?
Tak — pełny tekst „Dlaczego delay() blokuje wszystko” 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 „Dlaczego delay() blokuje wszystko”?
Zobaczyć, jak wstrzymanie zatrzymuje reakcję płytki. Ć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 2 z 4.
Ile czasu zajmuje lekcja „Dlaczego delay() blokuje wszystko”?
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