Arduino & IoT Academy · Lekcja

Dlaczego delay() blokuje wszystko

Zobaczyć, jak wstrzymanie zatrzymuje reakcję płytki.

Lekcja 2 z 413 kroki

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

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 „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

  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