Пребарување код

Лекција 14/31-1: Arduino Millis (без delay) и map функции | SunFounder Robojax

Лекција 14/31-1: Arduino Millis (без delay) и map функции | SunFounder Robojax

Овој водич ја воведува функцијата millis() на Arduino, основна алатка за проекти базирани на време кои бараат извршување на код без блокирање. За разлика од delay(), кој го запира целиот програм, millis() го следи изминатото време од стартувањето на плочката, овозможувајќи му на вашиот Arduino ефикасно да извршува повеќе задачи истовремено. Можете да ја користите оваа техника за да изградите:

  • LED трепкачи без блокирање кои работат додека друг код се извршува.
  • Временски настани активирани од сензори или копчиња, како светло што се гаси 5 секунди по притискање на копче.
  • Едноставни системи за логирање податоци кои ги запишуваат вредностите на сензорите во редовни интервали.
  • Системи за кориснички интерфејс кои реагираат на влезови без замрзнување.
Составено возило Sunfounder

Разбирање на функцијата millis()

Функцијата millis() е вградена команда на Arduino која враќа број на милисекунди од моментот кога плочката Arduino почнала да го извршува тековниот програм. Таа започнува од нула при вклучување и се зголемува секоја милисекунда. Можете да ја повикате оваа функција во било кој дел од вашиот код за да ја добиете тековната вредност на „времето на работа“. На пример, по 1 секунда, враќа 1000; по 5 секунди, враќа 5000. Клучната предност е што не го паузира вашиот код, па можете да го проверувате времето додека другите задачи продолжуваат да работат.

Зошто да избегнувате delay()?

Функцијата delay() е едноставен начин за паузирање на програм, но таа е блокирачка функција. Кога ќе повикате delay(5000), Arduino престанува да го извршува целиот друг код 5 секунди, замрзнувајќи ги сите поврзани компоненти. Ова е проблематично за проекти кои треба да реагираат на влезови или континуирано да ги ажурираат излезите. Користењето на millis() ви овозможува да проверите дали поминало одредено време без да го запрете остатокот од вашиот програм, што го прави идеален за повеќезадачно работење.

Потребен хардвер

  • Arduino плочка (Uno, Mega, итн.)
  • USB кабел за програмирање и напојување

Водич за поврзување

Овој пример не бара надворешно поврзување. Arduino треба само да биде поврзан со вашиот компјутер преку USB за да го испратите кодот и да го видите излезот на серискиот монитор.

Објаснување на кодот

Овој прв пример е едноставна демонстрација на тоа како работи millis(). Кодот го иницијализира серискиот монитор и ја печати вредноста на millis() во бесконечна јамка.

void setup() {
  Serial.begin(9600);//иницијализирај сериски монитор
  Serial.println("Вовед во millis");
  delay(2000);
}

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

Функцијата setup() ја започнува сериската комуникација на 9600 бауди и печати порака за добредојде. delay(2000) овде е само за демонстрација за да покаже дека millis() почнува да брои од моментот кога програмот ќе започне. Функцијата loop() континуирано ја печати тековната вредност на millis(). Кога ќе го отворите Серискиот монитор, ќе видите дека времето во милисекунди брзо се зголемува. Ова илустрира дека millis() е бројач кој никогаш не запира, обезбедувајќи континуирана временска референца за вашиот програм.

Ова е основен градежен блок. Во видеото, инструкторот демонстрира како да ја користите оваа вредност за да активирате дејства по одреден период, како проверка дали поминале 5000 милисекунди (5 секунди) пред да се изврши специфичен блок код. Ова се прави со чување на тековната вредност на millis() во променлива и потоа споредување во главната јамка.

Управувањето со LED преку процентна вредност со користење на функцијата map() е покриено во Лекција 14/31-4: Arduino кодирање map() пример 1.

Демонстрација на жив проект

Во видеото, инструкторот го испраќа овој код и го отвора Серискиот монитор. Можете да видите дека излезот започнува по почетното доцнење од 2 секунди, покажувајќи вредност близу 1999. Потоа броевите брзо се зголемуваат, демонстрирајќи го континуираното броење на милисекунди. Овој жив приказ потврдува дека функцијата работи и обезбедува јасно визуелно разбирање за тоа како се следи времето.

Поврзани проекти од ова видео

Поглавја

  • [00:00] Вовед во millis()
  • [01:19] Што е millis() и зошто да се користи
  • [03:06] Практична демонстрација на millis()
  • [05:46] Користење на millis() за активирање временски настан
  • [08:29] Пример со копче
  • [12:14] Напреден пример за тајминг со копче
  • [17:20] Вовед во функцијата map()
  • [19:47] Пример за код за map() со LED
  • [22:41] Креирање прилагодена map функција

Слики

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

Ресурси и референци

Датотеки📁

Arduino библиотеки (zip)