Лекција 14/31-2: Arduino кодирање millis() пример 2 со настан
Во ова упатство, ќе научите како да ја користите функцијата millis() на Arduino за да активирате акција само откако ќе помине одреден временски период, без да го блокирате остатокот од вашата програма. Ова е основна техника за создавање одговорни Arduino проекти каде што повеќе задачи треба да работат истовремено, како што се трепкање на LED диоди додека читате сензори или следите притискања на копчиња. Овој конкретен пример се фокусира на активирање на настан по пет секунди, но логиката може да се примени на безброј реални сценарија.
Еве неколку практични примери за тоа како можете да ја користите оваа шема во вашите сопствени проекти:
- Одложена активација: Вклучете вентилатор или пумпа само откако системот работи одредено време.
- Сигурносни брави: Побарајте копчето да биде притиснато и задржано одредено време пред да извршите опасна акција, како што е стартување на мотор.
- Временски предупредувања: Активирајте аларм или известување ако читањето на сензорот не се променило во одреден временски прозорец.
- Таймери без блокирање: Креирајте „стражарски“ тајмер кој го ресетира уредот ако стане неодговорен.
Основниот проблем што ова го решава е ограничувањето на функцијата 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 функциите за време и мапирање. Истражете ги другите упатства создадени од истиот изворен материјал:
- Лекција 14/31-1: Arduino Millis (без delay) и map функции | SunFounder Robojax
- Лекција 14/31-3: Arduino кодирање millis() пример 3 со копче
- Лекција 14/31-4: Arduino кодирање map() пример 1
- Лекција 14/31-5: Arduino кодирање map() пример 2
Поглавја
- [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
/*
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
Работи што можеби ќе ви требаат
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
Друго
Ресурси и референци
-
НадворешноPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Датотеки📁
Упатство за корисникот
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB