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

Лекција 14/31-2: Arduino кодирање millis() пример 2 со настан

Лекција 14/31-2: Arduino кодирање millis() пример 2 со настан

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

Составено Sunfounder возило

Еве неколку практични примери за тоа како можете да ја користите оваа шема во вашите сопствени проекти:

  • Одложена активација: Вклучете вентилатор или пумпа само откако системот работи одредено време.
  • Сигурносни брави: Побарајте копчето да биде притиснато и задржано одредено време пред да извршите опасна акција, како што е стартување на мотор.
  • Временски предупредувања: Активирајте аларм или известување ако читањето на сензорот не се променило во одреден временски прозорец.
  • Таймери без блокирање: Креирајте „стражарски“ тајмер кој го ресетира уредот ако стане неодговорен.

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

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

  • Arduino плоча (Uno, Nano, Mega, итн.)
  • Притисно копче
  • Поврзувачки жици

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

Поврзувањето за овој пример е многу едноставно. Користи внатрешен pull-up отпорник, па затоа не е потребен надворешен отпорник за копчето.

  • Поврзете една нога од притисното копче на GND пинот на Arduino.
  • Поврзете ја другата нога од притисното копче на дигиталниот пин 2 на Arduino.

Бидејќи користиме INPUT_PULLUP во кодот, пинот ќе чита HIGH кога копчето не е притиснато и LOW кога е притиснато, поврзувајќи го пинот со земја. (во видео на 08:29)

Разбирање на кодот

Овој код демонстрира едноставен тајмер базиран на настани. Програмата континуирано ја печати моменталната вредност на millis() на Serial Monitor. Кога притисното копче е притиснато и задржано, и Arduino работи најмалку 5 секунди, ќе испечати „Take action“ на Serial Monitor. Клучот е дека проверката на millis() не го запира континуираното печатење на времето.

Ајде да ги разложиме деловите од кодот што може да ги конфигурира корисникот:

unsigned long event = 5000;// 5 секунди

Ова е најважната променлива за конфигурирање. Таа го дефинира времетраењето на вашиот „настан“ во милисекунди. Во овој пример, поставена е на 5000, што е еднакво на 5 секунди. За да го промените доцнењето, едноставно изменете го овој број. На пример, поставувањето на 10000 би направило акцијата да се активира по 10 секунди. Клучно е да се користи типот на податоци unsigned long, бидејќи вредноста на millis() може да порасне многу голема и на крајот ќе ја надмине максималната вредност на стандардната променлива int, што ќе предизвика грешки во споредбата. (во видео на 05:46)

pinMode(2,INPUT_PULLUP);

Оваа линија го конфигурира дигиталниот пин 2 како влез и го активира неговиот внатрешен pull-up отпорник. Ова е клучен чекор за конфигурација што ви овозможува да поврзете копче без надворешен отпорник. Пинот ќе чита HIGH по дифолт и ќе отиде на LOW кога копчето е притиснато, поврзувајќи го со земја. Ако сакате да користите друг пин, променете го бројот 2 овде и во линијата digitalRead(2) во рамките на циклусот. (во видео на 08:46)

Логиката во loop() е јасна. Ја чита состојбата на копчето. Ако копчето е притиснато (pb == LOW), тогаш проверува дали моменталното време (millis()) е поголемо или еднакво на вашето дефинирано време event. Ако двата услови се точни, ја печати пораката за акција. Остатокот од циклусот, кој го печати времето, продолжува да работи непречено, демонстрирајќи ја моќта на millis() над delay().

Овој пример го проверува времето од моментот кога Arduino стартува. Третиот пример во видео серијата се надоврзува на ова со запишување на времето на првото притискање на копчето и активирање на акција само ако второто притискање се случи најмалку 5 секунди подоцна. Таа логика е покриена во Лекција 14/31-3: Arduino кодирање millis() пример 3 со притисно копче.

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

Откако ќе го поставите кодот и ќе го отворите Serial Monitor (на 9600 бауди), ќе видите континуиран тек на броеви, што ги претставува милисекундите од вклучувањето на плочата. Ако го притиснете и задржите притисното копче пред да поминат 5 секунди, ништо нема да се случи. Меѓутоа, ако го притиснете и задржите копчето по ознаката од 5 секунди, ќе ја видите пораката „Take action“ испечатена на Serial Monitor. Акцијата ќе продолжи да се печати се додека копчето е задржано. Ова демонстрира тајмер без блокирање што овозможува друг код (печатењето) да работи беспрекорно. (во видео на 10:52)

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

Ова видео е дел од повеќеделна серија за Arduino функциите за време и мапирање. Истражете ги другите упатства создадени од истиот изворен материјал:

Поглавја

  • [00:00] Вовед во millis() и SunFounder комплетот
  • [01:19] Што е millis() и зошто да се користи наместо delay()?
  • [03:06] Практична демонстрација: печатење на вредноста на millis()
  • [05:46] Креирање настан со millis() и unsigned long
  • [08:29] Поврзување и кодирање на копче со INPUT_PULLUP
  • [10:52] Извршување на примерот со настан со копче
  • [12:14] Преглед на пример 3: детектирање на второ притискање на копчето
  • [17:20] Вовед во map() функцијата
  • [19:47] Кодирање и демонстрација на map() функцијата со LED

Слики

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
917-Lesson 14/31-2: Arduino coding millis() example 2 with event
Јазик: C++
/*
Lesson 14/31: Arduino coding millis() example 2 with event
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/>.
 */


unsigned long event = 5000;// 5 seconds
void setup() {
  Serial.begin(9600);//initialize serial monitor
  Serial.println("Introduction to millis");
  pinMode(2,INPUT_PULLUP);
  


}

void loop() {
  // Robojax.com millis() example 1
  Serial.println(millis());
  int pb = digitalRead(2);// read pin 2
  if(pb ==LOW)
  {
      if(millis() >= event)
      {
        Serial.println("Take action");
      }// if end
  }// if end
  
}// loop end

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

Датотеки📁

Упатство за корисникот