Usuwanie drgań styków za pomocą millis()
Ignorować zakłócenia dzięki krótkiemu oknu stabilności.
Usuwanie drgań styków za pomocą millis() 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.
Dlaczego nie użyć po prostu delay()?
Po naciśnięciu możesz wstrzymać działanie za pomocą delay(), ale spowoduje to zatrzymanie całej płytki. Lepszym narzędziem do obsługi czystych sygnałów z przycisków jest millis().
millis() to stoper
millis() zwraca liczbę milisekund od uruchomienia płytki. Porównując dwa odczyty, można zmierzyć upływ czasu bez zatrzymywania programu.
unsigned long now = millis();Plan eliminacji drgań
Pomysł jest prosty: gdy stan pinu się zmieni, uruchom timer. Uznaj nowy stan za prawidłowy dopiero wtedy, gdy utrzyma się niezmiennie przez krótki czas.
Wybierz czas eliminacji drgań
Opóźnienie wynoszące około 50 milisekund to klasyczny wybór. Jest wystarczająco długie, aby przeczekać drgania, a jednocześnie zdecydowanie zbyt krótkie, by można je było zauważyć.
const unsigned long DEBOUNCE = 50;Zapamiętaj ostatnią zmianę
Potrzebujesz zmiennej przechowującej informację, kiedy pin ostatnio zmienił stan. Przy każdym obiegu pętli porównuj ją z bieżącym czasem.
unsigned long lastChange = 0;Śledź dwa stany
Przechowuj osobno surowy odczyt i potwierdzony stabilny stan. Surowy odczyt jest zaszumiony, a stabilny stan to ten, któremu ufa logika programu.
int lastRaw = HIGH;
int stable = HIGH;Wykryj zmianę
W każdym obiegu odczytaj stan pinu. Jeśli różni się od ostatniej surowej wartości, sygnał właśnie się zmienił, więc zresetuj timer.
int raw = digitalRead(BTN);
if (raw != lastRaw)
lastChange = millis();Poczekaj na stabilizację
Jeśli od ostatniej zmiany upłynęło wystarczająco dużo czasu, odczyt się ustabilizował. Teraz można bezpiecznie uznać go za rzeczywisty stan.
if (millis() - lastChange > DEBOUNCE) {
stable = raw;
}Reaguj na zbocze
Aby wywołać działanie tylko raz na naciśnięcie, obserwuj zmianę stabilnego stanu na LOW. To pojedyncze zbocze jest czystym sygnałem naciśnięcia po eliminacji drgań.
if (stable == LOW && lastStable == HIGH)
Serial.println("clean press");Aktualizuj dane na przyszłość
Na końcu obiegu zapisz bieżące odczyty w zmiennych last. Dzięki temu porównanie będzie aktualne przy każdym kolejnym obiegu.
lastRaw = raw;
lastStable = stable;Wygrywa działanie bez blokowania
Ponieważ millis() nigdy nie wstrzymuje działania płytki, czujniki i wyjścia nadal pracują. Eliminujesz drgania, podczas gdy cała reszta nadal działa. 🚀
Szybkie sprawdzenie
Sprawdźmy, jak eliminacja drgań za pomocą millis() rozpoznaje prawdziwe naciśnięcie.
Podsumowanie: czyste naciśnięcia
Użyłeś millis(), aby ignorować drgania bez zatrzymywania płytki i akceptować naciśnięcie dopiero po ustabilizowaniu sygnału. Solidna, profesjonalna obsługa wejścia! ✅
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 „Usuwanie drgań styków za pomocą millis()” jest bezpłatna?
Tak — pełny tekst „Usuwanie drgań styków 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 „Usuwanie drgań styków za pomocą millis()”?
Ignorować zakłócenia dzięki krótkiemu oknu stabilności. Ć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 „Usuwanie drgań styków 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
- Dlaczego przyciski „odbijają”
- Usuwanie drgań styków za pomocą millis()
- Zapisywanie wartości w EEPROM
- Zapamiętywanie licznika po resecie