Soek Kode

Les 14/31-1: Arduino Millis (geen vertraging) en map-funksies | SunFounder Robojax

Les 14/31-1: Arduino Millis (geen vertraging) en map-funksies | SunFounder Robojax

Hierdie gids stel die Arduino millis()-funksie bekend, 'n fundamentele hulpmiddel vir tydgebaseerde projekte wat nie-blokkerende kode-uitvoering vereis. Anders as delay(), wat die hele program stop, hou millis() die verlooptyd sedert die bord begin het, dop, wat jou Arduino in staat stel om effektief multitaak te doen. Jy kan hierdie tegniek gebruik om te bou:

  • Nie-blokkerende LED-flikkerligte wat loop terwyl ander kode uitgevoer word.
  • Getimede gebeurtenisse wat deur sensors of knoppies geaktiveer word, soos 'n lig wat 5 sekondes na 'n knoppiedruk afskakel.
  • Eenvoudige datalogging-stelsels wat sensorwaardes op gereelde intervalle aanteken.
  • Gebruikerskoppelvlakstelsels wat op invoere reageer sonder om te vries.
Sunfounder-motor saamgestel

Verstaan die millis()-funksie

Die millis()-funksie is 'n ingeboude Arduino-opdrag wat die aantal millisekondes teruggee sedert die Arduino-bord die huidige program begin hardloop het. Dit begin by nul met aanskakeling en verhoog elke millisekonde. Jy kan hierdie funksie op enige punt in jou kode oproep om die huidige "looptyd"-waarde te kry. Byvoorbeeld, na 1 sekonde gee dit 1000 terug; na 5 sekondes gee dit 5000 terug. Die belangrikste voordeel is dat dit nie jou kode onderbreek nie, sodat jy die tyd kan nagaan terwyl ander take voortgaan.

Hoekom delay() vermy?

Die delay()-funksie is 'n eenvoudige manier om 'n program te onderbreek, maar dit is 'n blokkerende funksie. Wanneer jy delay(5000) oproep, stop die Arduino alle ander kode vir 5 sekondes, wat enige gekoppelde komponente vries. Dit is problematies vir projekte wat deurlopend op invoere moet reageer of uitsette moet opdateer. Deur millis() te gebruik, kan jy nagaan of 'n sekere tyd verbygegaan het sonder om die res van jou program te stop, wat dit ideaal maak vir multitaak.

Hardeware Benodig

  • Arduino-bord (Uno, Mega, ens.)
  • USB-kabel vir programmering en krag

Bedradingsgids

Hierdie voorbeeld vereis geen eksterne bedrading nie. Die Arduino hoef net via USB aan jou rekenaar gekoppel te wees om die kode op te laai en die serial monitor-uitset te bekyk.

Kodeverduideliking

Hierdie eerste voorbeeld is 'n eenvoudige demonstrasie van hoe millis() werk. Die kode initialiseer die serial monitor en druk die waarde van millis() in 'n oneindige lus.

void setup() {
  Serial.begin(9600);//initialiseer serial monitor
  Serial.println("Inleiding tot millis");
  delay(2000);
}

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

Die setup()-funksie begin serial kommunikasie teen 9600 baud en druk 'n welkomsboodskap. Die delay(2000) hier is slegs vir demonstrasie om te wys dat millis() vanaf die oomblik wat die program hardloop, begin tel. Die loop()-funksie druk deurlopend die huidige waarde van millis(). Wanneer jy die Serial Monitor oopmaak, sal jy die tyd in millisekondes vinnig sien toeneem. Dit illustreer dat millis() 'n teller is wat nooit stop nie, wat 'n deurlopende tydverwysing vir jou program verskaf.

Dit is die fundamentele boublok. In die video demonstreer die instrukteur hoe om hierdie waarde te gebruik om aksies na 'n vasgestelde tydperk te aktiveer, soos om na te gaan of 5000 millisekondes (5 sekondes) verbygegaan het voordat 'n spesifieke kodeblok uitgevoer word. Dit word gedoen deur die huidige millis()-waarde in 'n veranderlike te stoor en dit dan in die hoof-lus te vergelyk.

Om 'n LED met 'n persentasiewaarde te dryf deur die map()-funksie te gebruik, word in Les 14/31-4: Arduino-kodering map() voorbeeld 1 gedek.

Lewende Projekdemonstrasie

In die video laai die instrukteur hierdie kode op en maak die Serial Monitor oop. Jy kan sien dat die uitset na die aanvanklike 2-sekonde-vertraging begin, met 'n waarde naby 1999. Die getalle neem dan vinnig toe, wat die deurlopende telling van millisekondes demonstreer. Hierdie lewendige aansig bevestig dat die funksie werk en bied 'n duidelike visuele begrip van hoe tyd dopgehou word.

Verwante projekte uit hierdie video

Hoofstukke

  • [00:00] Inleiding tot millis()
  • [01:19] Wat is millis() en hoekom dit gebruik
  • [03:06] Praktiese demonstrasie van millis()
  • [05:46] Gebruik millis() om 'n getimede gebeurtenis te aktiveer
  • [08:29] Voorbeeld met 'n drukknoppie
  • [12:14] Gevorderde drukknoppie-tydsberekening voorbeeld
  • [17:20] Inleiding tot die map()-funksie
  • [19:47] Kodevoorbeeld vir map() met 'n LED
  • [22:41] Skep 'n pasgemaakte map-funksie

Beelde

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

Hulpbronne en verwysings

Lêers📁

Arduino Biblioteke (zip)