Pretraži kod

Lekcija 14/31-1: Arduino Millis (bez odgode) i map funkcije | SunFounder Robojax

Lekcija 14/31-1: Arduino Millis (bez odgode) i map funkcije | SunFounder Robojax

Ovaj vodič predstavlja Arduino millis() funkciju, osnovni alat za projekte zasnovane na vremenu koji zahtijevaju neblokirajuće izvršavanje koda. Za razliku od delay(), koji zaustavlja cijeli program, millis() prati proteklo vrijeme od pokretanja ploče, omogućavajući vašem Arduinu da efikasno obavlja više zadataka. Ovu tehniku možete koristiti za izradu:

  • Neblokirajućih LED bljeskalica koje rade dok se drugi kod izvršava.
  • Vremenski kontrolisanih događaja pokrenutih senzorima ili dugmadima, kao što je svjetlo koje se gasi 5 sekundi nakon pritiska na dugme.
  • Jednostavnih sistema za bilježenje podataka koji snimaju vrijednosti senzora u pravilnim intervalima.
  • Korisničkih interfejs sistema koji reaguju na unose bez zamrzavanja.
Sastavljeni Sunfounder automobil

Razumijevanje millis() funkcije

millis() funkcija je ugrađena Arduino komanda koja vraća broj milisekundi od kada je Arduino ploča počela izvršavati trenutni program. Počinje od nule pri uključivanju i povećava se svake milisekunde. Ovu funkciju možete pozvati u bilo kojem trenutku u svom kodu da dobijete trenutnu vrijednost "vremena rada". Na primjer, nakon 1 sekunde vraća 1000; nakon 5 sekundi vraća 5000. Ključna prednost je što ne pauzira vaš kod, tako da možete provjeriti vrijeme dok se drugi zadaci nastavljaju izvršavati.

Zašto izbjegavati delay()?

delay() funkcija je jednostavan način za pauziranje programa, ali je blokirajuća funkcija. Kada pozovete delay(5000), Arduino prestaje izvršavati sav drugi kod na 5 sekundi, zamrzavajući sve povezane komponente. Ovo je problematično za projekte koji trebaju reagirati na unose ili kontinuirano ažurirati izlaze. Korištenje millis() omogućava vam da provjerite je li prošlo određeno vrijeme bez zaustavljanja ostatka programa, što ga čini idealnim za obavljanje više zadataka.

Potreban hardver

  • Arduino ploča (Uno, Mega, itd.)
  • USB kabl za programiranje i napajanje

Vodič za povezivanje

Ovaj primjer ne zahtijeva vanjsko povezivanje. Arduino samo treba biti povezan s računarom putem USB-a za upload koda i pregled serijskog monitora.

Objašnjenje koda

Ovaj prvi primjer je jednostavna demonstracija kako millis() funkcioniše. Kod inicijalizira serijski monitor i ispisuje vrijednost millis() u beskonačnoj petlji.

void setup() {
  Serial.begin(9600);//inicijalizacija serijskog monitora
  Serial.println("Uvod u millis");
  delay(2000);
}

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

setup() funkcija pokreće serijsku komunikaciju na 9600 bauda i ispisuje poruku dobrodošlice. delay(2000) ovdje služi samo za demonstraciju da pokaže kako millis() počinje brojati od trenutka pokretanja programa. loop() funkcija kontinuirano ispisuje trenutnu vrijednost millis(). Kada otvorite Serijski monitor, vidjet ćete vrijeme u milisekundama kako se brzo povećava. Ovo ilustruje da je millis() brojač koji se nikada ne zaustavlja, pružajući kontinuiranu vremensku referencu za vaš program.

Ovo je osnovni gradivni blok. U videu, instruktor demonstrira kako koristiti ovu vrijednost za pokretanje akcija nakon određenog perioda, kao što je provjera je li prošlo 5000 milisekundi (5 sekundi) prije izvršavanja specifičnog bloka koda. To se radi pohranjivanjem trenutne millis() vrijednosti u varijablu i zatim njenim poređenjem u glavnoj petlji.

Upravljanje LED diodom s procentualnom vrijednošću pomoću map() funkcije obrađeno je u Lekciji 14/31-4: Arduino kodiranje map() primjer 1.

Demonstracija projekta uživo

U videu, instruktor uploaduje ovaj kod i otvara Serijski monitor. Možete vidjeti da izlaz počinje nakon početnog kašnjenja od 2 sekunde, pokazujući vrijednost blizu 1999. Brojevi se zatim brzo povećavaju, demonstrirajući kontinuirano brojanje milisekundi. Ovaj prikaz uživo potvrđuje da funkcija radi i pruža jasno vizuelno razumijevanje kako se vrijeme prati.

Povezani projekti iz ovog videa

Poglavlja

  • [00:00] Uvod u millis()
  • [01:19] Šta je millis() i zašto ga koristiti
  • [03:06] Praktična demonstracija millis()
  • [05:46] Korištenje millis() za pokretanje vremenski kontrolisanog događaja
  • [08:29] Primjer s tipkalom
  • [12:14] Napredni primjer mjerenja vremena s tipkalom
  • [17:20] Uvod u map() funkciju
  • [19:47] Primjer koda za map() s LED diodom
  • [22:41] Kreiranje prilagođene map funkcije

Slike

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
916-Lesson 14/31-1: Arduino coding millis() example 1
Jezik: 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

Resursi i reference

Datoteke📁

Arduino biblioteke (zip)