Arduino Millis vs Opóźnienie

Arduino Millis vs Opóźnienie
Arduino to platforma oparta na sprzęcie i oprogramowaniu, która zapewnia uczniom doskonałą okazję do nauki i tworzenia interesujących projektów. Przed skokiem na sprzęt musi utworzyć logikę za pomocą Arduino IDE, na której projekt wykona przypisane funkcje. W różnych operacjach dostępnych jest szeroki zakres funkcji, które można użyć w Arduino. W tym przewodniku omówiliśmy funkcję MILLIS () i Delay () używaną w programowaniu Arduino.

Co to funkcja millis () w Arduino?

Ta funkcja daje całkowity czas od uruchomienia kodu Arduino i będzie nadal działać do pracy. Podobnie, ta funkcja daje upływający czas w milisekundach i ma pojemność do pracy przez 50 dni po tym, jak ta funkcja zresetuje swoją wartość do zera.

Znaczenie tej funkcji polega na tym, że można ją użyć w programie Arduino, jeśli instrukcja ma działać tylko w określonym czasie. W celu dalszej ilustracji wyjaśniliśmy działanie funkcji Millis według przykładu.

Załóżmy, że musimy wykonywać instrukcję co 5 sekund, więc najpierw zdefiniowaliśmy czas w milisekundach, po czym wykonanie konkretnej instrukcji.

niepodpisany długi czas wykonywania = 5000;

Tak więc definiujemy stałą zmienną wymienioną czas egzekucji mając wartość 5000 milisekund, a następnie sprawdzić bieżący czas programu czas teraźniejszy zmienny.

niepodpisany długi teraźniejszość;
tereeTime = Millis ();

Następnie musimy stworzyć warunek czasu, w którym instrukcja zostanie wykonana. Tworzymy więc warunek IF, który będzie prawdziwy, gdy różnica obecnego i przeszłego czasu osiągnie 5000 milisekund, a instrukcja wewnątrz stanu IF zostanie wykonana. W takich warunkach musimy również zadeklarować inną zmienną, która zaoszczędzi poprzedni czas lub przeszłość.

Możemy zaprojektować ten warunek w taki sposób, że gdy różnica prądu i poprzedniego czasu jest większa niż równa czasu wykonania, wówczas wykonują następującą instrukcję. Po wykonaniu odpowiedniej instrukcji Zapisz ten bieżący czas w zmiennej rozrywki.

niepodpisana długa rozrywka = 0;
if (tereeTime-Pasttime> = ExecutionTime)
// Uruchom instrukcję
Pasttime = CurrentTime;

Tutaj należy pamiętać, że użyliśmy długiego typu danych ze względu na funkcję millis (), ponieważ ma ona znacznie duże wartości.

Kod Arduino dla funkcji funkcji Millis ()

Pełny kod zrozumienia funkcji funkcji Millis jest podany jako:

const unsigned długi wykonywanie = 5000; /*czas, w którym instrukcja wykona*/
niepodpisany długa przeszłość = 0; // zmienna dla silnego czasu w przeszłości
niepodpisany długi terentTime = 0; // zmienna do przechowywania czasu obecnego
void setup ()
Seryjny.Rozpocznij (9600); // inicjowanie komunikacji szeregowej

void Loop ()
tereeTime = Millis (); // aktualizacja wartości teraźniejszości
/ * To jest wydarzenie */
if (tereeTime - przeszłość> = wykonanie) / *warunek czasu, w którym instrukcja zostanie wykonana * /
Seryjny.Drukuj („czas obecny to:”);
Seryjny.println (tereeTime); // wyświetlający czas obecny
Seryjny.drukuj („”); // w tym przestrzeń
Seryjny.drukuj („Instrukcja do wykonania:”);
Seryjny.println („Witamy w Linuxhint”); // instrukcje do wykonania
Pasttime = PresentTime; // Aktualizacja wartości czasu przeszłego

Kod Arduino będzie działał w taki sposób, że na przykład na przykład wartość rozrywki wynosi zero i powiedzmy, że aktualny czas wynosi 400 milisekund. Zgodnie z warunkami IF odpowiedź wyniesie 400, czyli mniej niż 5000 milisekund, więc warunek IF będzie fałszywy.

Podobnie, w trzeciej lub czwartej iteracji „teraźniejszość” wynosi 5000 milisekund, wówczas różnica wyniesie 5000 milisekund, ponieważ wartość „przeszłości” jest nadal zerowa. Tak więc instrukcja zostanie wykonana, a wartość rozrywki zostanie zaktualizowana.

W ten sposób możemy użyć funkcji Millis do uruchomienia konkretnej instrukcji w określonym czasie.

Wyjście kodu Arduino dla funkcji millis ()

W monitorze szeregowym można wyraźnie zauważyć, że gdy istnieje różnica „teraźniejszości”, a „przeszłość” wynosi 5000, warunek będzie prawdziwy. Zdjęcie opublikowane poniżej pokazuje wartości „terentTime”, w którym warunek IF jest prawdziwy, oraz instrukcja, która ma zostać wykonana.

Jeśli po prostu wydrukujemy wartość funkcji Millis (), która jest przechowywana w nazwie zmiennej „PresentTime” będzie wyglądać tak, jak na obrazie podanym poniżej:

Co to jest funkcja opóźnienia () w Arduino

Funkcja opóźnienia () służy głównie do zatrzymywania kodu Arduino przez pewien czas. Innymi słowy, ta funkcja tworzy opóźnienie określone przez użytkownika w funkcjonowaniu kodu Arduino.

Ta funkcja może być używana w programie, w którym wartość dowolnej zmiennej ma być często aktualizowana. Zatem, udzielając zatrzymania programu Arduino, da czujnik czasu na zaktualizowanie jego wartości.

Podobnie możemy użyć funkcji opóźnienia, aby przerwać między wykonaniem wielu instrukcji. Funkcja opóźnienia wymaga czasu w milisekundach jako jej wejściu, a składnia dla funkcji opóźnienia podano poniżej:

opóźnienie (czas w millisekundach);

Kod Arduino dla za pomocą funkcji opóźnienia

Aby zademonstrować funkcjonalność funkcji opóźnienia (), opracowaliśmy kod Arduino podany jako:

void setup ()
Seryjny.Rozpocznij (9600); // inicjowanie komunikacji szeregowej

void Loop ()
Seryjny.wydrukuj („Witaj i witamy”); // instrukcja przed opóźnieniem
opóźnienie (5000); // tworzenie pauzy 5000 milisekund
Seryjny.println ("\ n do Linuxhint.com "); // instrukcja po opóźnieniu

W kodzie Arduino podaliśmy dwie instrukcje, które wydrukują dane na monitorze szeregowym. Obie instrukcje są wykonywane z opóźnieniem 5000 milisekund. Innymi słowy, po wykonaniu pierwszej instrukcji użyliśmy funkcji opóźnienia, która zatrzyma kod Arduino na 5000 milisekund. Po 5000 milisekund program zostanie uruchomiony z miejsca, w którym został zatrzymany, a druga instrukcja zostanie wykonana.

Wyjście kodu Arduino do używania funkcji opóźnienia ()

Zdjęcie opublikowane poniżej jest pierwszą instrukcją podaną przed użyciem funkcji opóźnienia ().

Po tej instrukcji program jest zatrzymywany na 5000 milisekund, a następnie wykonanie drugiej instrukcji odbywa się. Poniższy rysunek pokazuje, że program uruchomił drugą instrukcję.

Porównanie funkcji millis () i opóźnienia ()

Różnice między funkcją Millis () a funkcją opóźnienia podano w poniższej tabeli:

Funkcja millis () Funkcja opóźnienia ()
Można go użyć do uruchomienia konkretnej instrukcji w określonym czasie Ta funkcja po prostu tworzy pauzę w przepływie kodu Arduino
Ta funkcja daje czas w milisekundach od momentu uruchamiania kodu Arduino i może nadejść do czasu na 50 dni Ta funkcja wymaga czasu w milisekundach jako wejście użytkownika i działa na ten konkretny czas
Ta funkcja nie zatrzymuje się ani nie zatrzymuje kodu Ta funkcja zatrzymuje cały kod na jakiś czas

Jak mogę użyć Millis () zamiast opóźnienia ()

Używamy funkcji Millis zamiast opóźnienia, używając po prostu warunku IF dla określonego czasu, w którym chcemy uruchomić każdą instrukcję. W ten sposób automatycznie da opóźnienie między wykonaniem dwóch lub więcej instrukcji a celem opóźnienia można podać. Główną zaletą korzystania z Millis zamiast opóźnienia jest to, że cały program Arduino nie kończy się; tylko wykonanie niektórych instrukcji jest zatrzymane. Jednak funkcja opóźnienia zatrzymuje cały program i za pomocą funkcji opóźnienia może nieco przegapić zewnętrzne dane wejściowe do programu, ponieważ cały program jest zatrzymany.

Aby dalej zilustrować, dostarczyliśmy kod Arduino, w jaki sposób możemy użyć funkcji Millis zamiast funkcji opóźnienia:

const unsigned długi wykonywanie = 6000; /*czas, w którym pierwsza instrukcja wykona*/
const unsigned Long ExecutionTime1 = 2000; /*czas, w którym druga instrukcja wykona*/
niepodpisany długa przeszłość = 0; // Zmienna dla mocnego czasu pierwszej instrukcji
niepodpisany długi terenTime = 0; // zmienna do przechowywania czasu obecnego
niepodpisany długi przeszłość1 = 0; // Zmienna dla silnego czasu drugiej instrukcji w przeszłości
void setup ()
Seryjny.Rozpocznij (9600); // inicjowanie komunikacji szeregowej

void Loop ()
tereeTime = Millis (); // aktualizacja wartości teraźniejszości
/ * To jest wydarzenie */
if (tereeTime - przeszłość> = wykonanie) / *warunek czasu, w którym instrukcja zostanie wykonana * /
Seryjny.Drukuj („czas obecny to:”);
Seryjny.println (tereeTime); // wyświetlający czas obecny
Seryjny.drukuj („”); // w tym przestrzeń
Seryjny.drukuj („Instrukcja do wykonania:”);
Seryjny.println („trzymaj światła”); // instrukcje do wykonania
Pasttime = PresentTime; // Aktualizacja wartości czasu przeszłego

if (tereeTime - Pasttime1> = ExecutionTime1) / * warunek czasu, w którym instrukcja zostanie wykonana * /
Seryjny.wydruku („czas obecny”);
Seryjny.println (tereeTime); // wyświetlający czas obecny
Seryjny.wydrukuj („”); // w tym przestrzeń
Seryjny.drukuj („Instrukcja do wykonania:”);
Seryjny.println („włącz światła”); // instruction do wykonania
Pasttime1 = terentTime; // aktualizacja obecnego czasu instrukcji SCODN

Tutaj, w kodzie, użyliśmy funkcji Millis do wykonywania dwóch instrukcji z opóźnieniem prawie 4 sekund. Opublikowaliśmy obraz wyjścia kodu Arduino skompilowanego w celu wyjaśnienia, w jaki sposób można użyć funkcji Millis, zastępując ją funkcją opóźnienia.

W wyjściu widzimy, że gdy czas wynosi 2 sekundy, druga instrukcja jest wykonywana, aż czas osiągnie 6 sekund. Gdy czas osiągnie 6 sekund, wykonywana jest pierwsza instrukcja.

Wniosek

Aby utworzyć logikę dowolnego zadania, które należy wykonać za pomocą Arduino, istnieje wiele funkcji, których można użyć. Funkcje te sprawiają, że funkcjonalność kodu Arduino jest wydajna i łatwa do zaimplementowania utworzonej logiki.Istnieją dwie funkcje, które szczegółowo omówiliśmy, jedna to funkcja Millis, a druga to funkcja opóźnienia. Funkcja Millis wykonuje konkretną instrukcję w określonym czasie, podczas gdy funkcja opóźnienia zatrzymuje kod Arduino na pewien czas.