Szukaj kodu

Lekcja 14/31-1: Arduino Millis (bez opóźnienia) i funkcje map | SunFounder Robojax

Lekcja 14/31-1: Arduino Millis (bez opóźnienia) i funkcje map | SunFounder Robojax

Ten przewodnik przedstawia funkcję Arduino millis(), podstawowe narzędzie do projektów opartych na czasie, które wymagają nieblokującego wykonywania kodu. W przeciwieństwie do delay(), które wstrzymuje cały program, millis() śledzi czas, który upłynął od uruchomienia płytki, umożliwiając Arduino efektywne wykonywanie wielu zadań jednocześnie. Możesz użyć tej techniki do zbudowania:

  • Nieblokujących migaczy LED, które działają, podczas gdy inny kod jest wykonywany.
  • Zdarzeń czasowych wyzwalanych przez czujniki lub przyciski, takich jak światło, które wyłącza się 5 sekund po naciśnięciu przycisku.
  • Prostych systemów rejestracji danych, które zapisują wartości czujników w regularnych odstępach czasu.
  • Systemów interfejsu użytkownika, które reagują na dane wejściowe bez zawieszania się.
Zmontowany samochód Sunfounder

Zrozumienie funkcji millis()

Funkcja millis() to wbudowane polecenie Arduino, które zwraca liczbę milisekund od momentu uruchomienia bieżącego programu na płytce Arduino. Zaczyna się od zera po włączeniu zasilania i zwiększa się co milisekundę. Możesz wywołać tę funkcję w dowolnym miejscu kodu, aby uzyskać bieżącą wartość „czasu pracy”. Na przykład po 1 sekundzie zwraca 1000; po 5 sekundach zwraca 5000. Kluczową zaletą jest to, że nie wstrzymuje kodu, więc możesz sprawdzać czas, podczas gdy inne zadania nadal działają.

Dlaczego unikać delay()?

Funkcja delay() to prosty sposób na wstrzymanie programu, ale jest to funkcja blokująca. Gdy wywołasz delay(5000), Arduino przestaje wykonywać cały inny kod na 5 sekund, zamrażając wszelkie podłączone komponenty. Jest to problematyczne w projektach, które muszą stale reagować na dane wejściowe lub aktualizować wyjścia. Użycie millis() pozwala sprawdzić, czy minęła określona ilość czasu bez zatrzymywania reszty programu, co czyni go idealnym do wielozadaniowości.

Wymagany sprzęt

  • Płytka Arduino (Uno, Mega itp.)
  • Kabel USB do programowania i zasilania

Schemat połączeń

Ten przykład nie wymaga żadnych zewnętrznych połączeń. Arduino wystarczy podłączyć do komputera przez USB, aby przesłać kod i wyświetlić dane z monitora szeregowego.

Wyjaśnienie kodu

Ten pierwszy przykład to prosta demonstracja działania millis(). Kod inicjalizuje monitor szeregowy i wypisuje wartość millis() w nieskończonej pętli.

void setup() {
  Serial.begin(9600);//inicjalizacja monitora szeregowego
  Serial.println("Wprowadzenie do millis");
  delay(2000);
}

void loop() {
  Serial.println(millis());
}

Funkcja setup() rozpoczyna komunikację szeregową z prędkością 9600 bodów i wypisuje komunikat powitalny. delay(2000) tutaj służy tylko do demonstracji, aby pokazać, że millis() zaczyna liczyć od momentu uruchomienia programu. Funkcja loop() ciągle wypisuje bieżącą wartość millis(). Po otwarciu monitora szeregowego zobaczysz czas w milisekundach szybko rosnący. To ilustruje, że millis() to licznik, który nigdy się nie zatrzymuje, zapewniając ciągłe odniesienie czasowe dla programu.

To jest podstawowy element konstrukcyjny. Na filmie instruktor pokazuje, jak użyć tej wartości do wyzwalania działań po określonym czasie, na przykład sprawdzania, czy minęło 5000 milisekund (5 sekund), zanim wykona się określony blok kodu. Robi się to poprzez zapisanie bieżącej wartości millis() w zmiennej, a następnie porównanie jej w głównej pętli.

Sterowanie diodą LED wartością procentową za pomocą funkcji map() jest omówione w Lekcji 14/31-4: Arduino kodowanie map() przykład 1.

Prezentacja projektu na żywo

Na filmie instruktor przesyła ten kod i otwiera monitor szeregowy. Widać, że dane wyjściowe zaczynają się po początkowym opóźnieniu 2 sekund, pokazując wartość bliską 1999. Liczby następnie szybko rosną, demonstrując ciągłe liczenie milisekund. Ten widok na żywo potwierdza, że funkcja działa i zapewnia jasne wizualne zrozumienie, jak śledzony jest czas.

Powiązane projekty z tego filmu

Rozdziały

  • [00:00] Wprowadzenie do millis()
  • [01:19] Co to jest millis() i dlaczego go używać
  • [03:06] Praktyczna demonstracja millis()
  • [05:46] Użycie millis() do wyzwalania zdarzenia czasowego
  • [08:29] Przykład z przyciskiem
  • [12:14] Zaawansowany przykład czasowy z przyciskiem
  • [17:20] Wprowadzenie do funkcji map()
  • [19:47] Przykład kodu dla map() z diodą LED
  • [22:41] Tworzenie niestandardowej funkcji map

Obrazy

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
916-Lesson 14/31-1: Arduino coding millis() example 1
Język: C++
/*
Lesson 14/31: Arduino coding millis() example 1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
/*
 * Example-1 of using millis() with Arduino
 * Written by Ahmad Shamshiri on July 27, 2019
 * in Ajax, Ontario, Canada
 * Watch video instructio for millis() :https://youtu.be/u2HsiTS8niQ
 */


void setup() {
  Serial.begin(9600);//initialize serial monitor
  Serial.println("Introduction to millis");
  delay(2000);
  


}

void loop() {

  Serial.println(millis());

}// loop end

Zasoby i odniesienia

Pliki📁

Biblioteki Arduino (zip)