Code zoeken

Les 14/31-1: Arduino Millis (zonder delay) en map-functies | SunFounder Robojax

Les 14/31-1: Arduino Millis (zonder delay) en map-functies | SunFounder Robojax

Deze handleiding introduceert de Arduino millis()-functie, een fundamenteel hulpmiddel voor tijdgebaseerde projecten die niet-blokkerende code-uitvoering vereisen. In tegenstelling tot delay(), die het hele programma stillegt, houdt millis() de verstreken tijd bij sinds het board is gestart, waardoor je Arduino effectief kan multitasken. Je kunt deze techniek gebruiken om te bouwen:

  • Niet-blokkerende LED-knipperaars die draaien terwijl andere code wordt uitgevoerd.
  • Getimede gebeurtenissen die worden geactiveerd door sensoren of knoppen, zoals een lamp die 5 seconden na een knopdruk uitgaat.
  • Eenvoudige datalogsystemen die sensorwaarden op regelmatige intervallen vastleggen.
  • Gebruikersinterfacesystemen die reageren op invoer zonder te bevriezen.
Sunfounder-auto gemonteerd

De millis()-functie begrijpen

De millis()-functie is een ingebouwd Arduino-commando dat het aantal milliseconden retourneert sinds het Arduino-board begon met het uitvoeren van het huidige programma. Het start op nul bij het inschakelen en wordt elke milliseconde verhoogd. Je kunt deze functie op elk punt in je code aanroepen om de huidige "uptime"-waarde te krijgen. Na 1 seconde retourneert het bijvoorbeeld 1000; na 5 seconden retourneert het 5000. Het belangrijkste voordeel is dat het je code niet pauzeert, zodat je de tijd kunt controleren terwijl andere taken blijven draaien.

Waarom delay() vermijden?

De delay()-functie is een eenvoudige manier om een programma te pauzeren, maar het is een blokkerende functie. Wanneer je delay(5000) aanroept, stopt de Arduino met het uitvoeren van alle andere code gedurende 5 seconden, waardoor aangesloten componenten bevriezen. Dit is problematisch voor projecten die continu moeten reageren op invoer of uitvoer moeten bijwerken. Het gebruik van millis() stelt je in staat om te controleren of een bepaalde tijd is verstreken zonder de rest van je programma te stoppen, waardoor het ideaal is voor multitasking.

Benodigde hardware

  • Arduino-board (Uno, Mega, enz.)
  • USB-kabel voor programmeren en voeding

Bekabelingshandleiding

Dit voorbeeld vereist geen externe bedrading. De Arduino hoeft alleen via USB op je computer te worden aangesloten om de code te uploaden en de seriële monitoruitvoer te bekijken.

Code-uitleg

Dit eerste voorbeeld is een eenvoudige demonstratie van hoe millis() werkt. De code initialiseert de seriële monitor en print de waarde van millis() in een oneindige lus.

void setup() {
  Serial.begin(9600);//seriële monitor initialiseren
  Serial.println("Introductie tot millis");
  delay(2000);
}

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

De setup()-functie start seriële communicatie op 9600 baud en print een welkomstbericht. De delay(2000) hier is alleen voor demonstratie om te laten zien dat millis() begint te tellen vanaf het moment dat het programma draait. De loop()-functie print continu de huidige waarde van millis(). Wanneer je de Seriële Monitor opent, zie je de tijd in milliseconden snel toenemen. Dit illustreert dat millis() een teller is die nooit stopt en een continue tijdreferentie biedt voor je programma.

Dit is de fundamentele bouwsteen. In de video demonstreert de instructeur hoe je deze waarde kunt gebruiken om acties te activeren na een ingestelde periode, zoals controleren of 5000 milliseconden (5 seconden) zijn verstreken voordat een specifiek codeblok wordt uitgevoerd. Dit wordt gedaan door de huidige millis()-waarde op te slaan in een variabele en deze vervolgens te vergelijken in de hoofdlus.

Het aansturen van een LED met een percentagewaarde met behulp van de map()-functie wordt behandeld in Les 14/31-4: Arduino-codering map() voorbeeld 1.

Live projectdemonstratie

In de video uploadt de instructeur deze code en opent de Seriële Monitor. Je kunt zien dat de uitvoer start na de initiële vertraging van 2 seconden, met een waarde nabij 1999. De getallen nemen vervolgens snel toe, wat de continue telling van milliseconden demonstreert. Deze live weergave bevestigt dat de functie werkt en biedt een duidelijk visueel begrip van hoe tijd wordt bijgehouden.

Gerelateerde projecten uit deze video

Hoofdstukken

  • [00:00] Introductie tot millis()
  • [01:19] Wat is millis() en waarom het gebruiken
  • [03:06] Praktische demonstratie van millis()
  • [05:46] millis() gebruiken om een getimede gebeurtenis te activeren
  • [08:29] Voorbeeld met een drukknop
  • [12:14] Geavanceerd drukknop-timingvoorbeeld
  • [17:20] Introductie tot de map()-functie
  • [19:47] Codevoorbeeld voor map() met een LED
  • [22:41] Een aangepaste map-functie maken

Afbeeldingen

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

Hulpmiddelen en referenties

Bestanden📁

Arduino-bibliotheken (zip)