Caută cod

Lecția 14/31-1: Funcțiile Arduino Millis (fără delay) și map | SunFounder Robojax

Lecția 14/31-1: Funcțiile Arduino Millis (fără delay) și map | SunFounder Robojax

Acest ghid introduce funcția Arduino millis(), un instrument fundamental pentru proiecte bazate pe timp care necesită execuție non-blocantă a codului. Spre deosebire de delay(), care oprește întregul program, millis() urmărește timpul scurs de la pornirea plăcii, permițând Arduino-ului tău să efectueze mai multe sarcini eficient. Poți folosi această tehnică pentru a construi:

  • Dispozitive de clipire LED non-blocante care rulează în timp ce alt cod se execută.
  • Evenimente temporizate declanșate de senzori sau butoane, cum ar fi o lumină care se stinge la 5 secunde după apăsarea unui buton.
  • Sisteme simple de înregistrare a datelor care salvează valorile senzorilor la intervale regulate.
  • Sisteme de interfață cu utilizatorul care răspund la intrări fără a îngheța.
Mașină Sunfounder asamblată

Înțelegerea funcției millis()

Funcția millis() este o comandă Arduino încorporată care returnează numărul de milisecunde de când placa Arduino a început să ruleze programul curent. Începe de la zero la pornire și crește în fiecare milisecundă. Poți apela această funcție în orice moment al codului tău pentru a obține valoarea curentă a „timpului de funcționare”. De exemplu, după 1 secundă, returnează 1000; după 5 secunde, returnează 5000. Avantajul cheie este că nu întrerupe codul tău, astfel încât poți verifica timpul în timp ce alte sarcini continuă să ruleze.

De ce să eviți delay()?

Funcția delay() este o modalitate simplă de a întrerupe un program, dar este o funcție blocantă. Când apelezi delay(5000), Arduino oprește executarea oricărui alt cod timp de 5 secunde, înghețând orice componente conectate. Acest lucru este problematic pentru proiectele care trebuie să răspundă la intrări sau să actualizeze ieșirile continuu. Folosirea millis() îți permite să verifici dacă a trecut o anumită perioadă de timp fără a opri restul programului tău, fiind ideală pentru multitasking.

Hardware Necesar

  • Placă Arduino (Uno, Mega, etc.)
  • Cablu USB pentru programare și alimentare

Ghid de Cablare

Acest exemplu nu necesită cablare externă. Arduino trebuie doar conectat la computerul tău prin USB pentru a încărca codul și a vizualiza ieșirea monitorului serial.

Explicația Codului

Acest prim exemplu este o demonstrație simplă a modului în care funcționează millis(). Codul inițializează monitorul serial și afișează valoarea millis() într-o buclă infinită.

void setup() {
  Serial.begin(9600);//inițializează monitorul serial
  Serial.println("Introducere în millis");
  delay(2000);
}

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

Funcția setup() începe comunicarea serială la 9600 baud și afișează un mesaj de bun venit. delay(2000) aici este doar pentru demonstrație, pentru a arăta că millis() începe să numere din momentul în care programul rulează. Funcția loop() afișează continuu valoarea curentă a millis(). Când deschizi Monitorul Serial, vei vedea timpul în milisecunde crescând rapid. Aceasta ilustrează că millis() este un contor care nu se oprește niciodată, oferind o referință continuă de timp pentru programul tău.

Aceasta este piatra de temelie. În videoclip, instructorul demonstrează cum să folosești această valoare pentru a declanșa acțiuni după o perioadă stabilită, cum ar fi verificarea dacă au trecut 5000 de milisecunde (5 secunde) înainte de a executa un bloc specific de cod. Acest lucru se face prin stocarea valorii curente a millis() într-o variabilă și apoi compararea acesteia în bucla principală.

Conducerea unui LED cu o valoare procentuală folosind funcția map() este acoperită în Lecția 14/31-4: Exemplu 1 de cod Arduino map().

Demonstrație Live a Proiectului

În videoclip, instructorul încarcă acest cod și deschide Monitorul Serial. Poți vedea că ieșirea începe după întârzierea inițială de 2 secunde, afișând o valoare aproape de 1999. Numerele apoi cresc rapid, demonstrând numărarea continuă a milisecundelor. Această vizualizare live confirmă că funcția funcționează și oferă o înțelegere vizuală clară a modului în care este urmărit timpul.

Proiecte conexe din acest videoclip

Capitole

  • [00:00] Introducere în millis()
  • [01:19] Ce este millis() și de ce să o folosești
  • [03:06] Demonstrație practică a millis()
  • [05:46] Folosirea millis() pentru a declanșa un eveniment temporizat
  • [08:29] Exemplu cu un buton
  • [12:14] Exemplu avansat de temporizare cu buton
  • [17:20] Introducere în funcția map()
  • [19:47] Exemplu de cod pentru map() cu un LED
  • [22:41] Crearea unei funcții map personalizate

Imagini

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

Resurse și referințe

Fișiere📁

Biblioteci Arduino (zip)