Сабақ 14/31-2: Arduino кодтау millis() мысалы 2 оқиғамен
Бұл оқулықта сіз Arduino millis() функциясын қалай пайдалану керектігін үйренесіз, ол бағдарламаның қалған бөлігін блоктамай, белгілі бір уақыт өткеннен кейін ғана әрекетті іске қосуға мүмкіндік береді. Бұл бірнеше тапсырманы бір уақытта орындау қажет болатын, мысалы, сенсорларды оқу немесе түймелерді басу кезінде жарықдиодтарды жыпылықтату сияқты, жауап беретін Arduino жобаларын құрудың негізгі әдісі. Бұл нақты мысал бес секундтан кейін оқиғаны іске қосуға бағытталған, бірақ логиканы сансыз нақты әлем сценарийлерінде қолдануға болады.
Міне, осы үлгіні өз жобаларыңызда қалай қолдануға болатынының бірнеше практикалық мысалдары:
- Кешіктірілген іске қосу: Жүйе белгілі бір уақыт жұмыс істегеннен кейін ғана желдеткішті немесе сорғыны қосыңыз.
- Қауіпсіздік блоктаулары: Қауіпті әрекетті, мысалы, қозғалтқышты іске қосу алдында түймені белгілі бір уақыт басып тұруды талап етіңіз.
- Уақытқа негізделген ескертулер: Сенсор көрсеткіші белгілі бір уақыт аралығында өзгермесе, дабыл немесе хабарландыру іске қосыңыз.
- Блоктамайтын таймерлер: Құрылғы жауап бермесе, оны қалпына келтіретін "күзетші" таймерін жасаңыз.
Бұл шешетін негізгі мәселе - delay() функциясының шектеуі. delay(5000) қолданғанда, Arduino осы бес секунд ішінде басқа кодты орындауды тоқтатады. Бұл қарапайым эскиздер үшін жақсы, бірақ күту кезінде сенсорларды оқу, дисплейлерді жаңарту немесе түймелерді басуды тыңдау қажет болатын күрделі жобаларда үлкен мәселеге айналады. millis() функциясы, тақта қосылғаннан бері миллисекундтарды санайды, бағдарламаны тоқтатпай уақытты тексеруге мүмкіндік береді.
Қажетті аппараттық құралдар
- Arduino тақтасы (Uno, Nano, Mega, т.б.)
- Түйме
- Жалғау сымдары
Қосылу нұсқаулығы
Бұл мысалдағы қосылу өте қарапайым. Ол ішкі тарту резисторын пайдаланады, сондықтан түйме үшін сыртқы резистор қажет емес.
- Түйменің бір аяғын Arduino-дағы GND пиніне қосыңыз.
- Түйменің екінші аяғын Arduino-дағы 2 цифрлық пиніне қосыңыз.
Кодта INPUT_PULLUP қолданатындықтан, түйме басылмаған кезде пин HIGH, ал басылған кезде LOW мәнін оқиды, пинді жерге қосады. (бейнеде 08:29)
Кодты түсіну
Бұл код қарапайым оқиғаға негізделген таймерді көрсетеді. Бағдарлама ағымдағы millis() мәнін Serial Monitor-ге үздіксіз басып шығарады. Түйме басылып тұрғанда және Arduino кемінде 5 секунд жұмыс істеп тұрғанда, ол Serial Monitor-ге "Take action" деп басып шығарады. Негізгісі - millis() тексеруі уақытты үздіксіз басып шығаруды тоқтатпайды.
Кодтың пайдаланушы конфигурациялайтын бөліктерін қарастырайық:
unsigned long event = 5000;// 5 секунд
Бұл конфигурациялауға болатын ең маңызды айнымалы. Ол "оқиғаның" ұзақтығын миллисекундтарда анықтайды. Бұл мысалда ол 5000 мәніне орнатылған, бұл 5 секундқа тең. Кешіктіруді өзгерту үшін осы санды өзгертіңіз. Мысалы, оны 10000 мәніне орнату әрекетті 10 секундтан кейін іске қосады. unsigned long деректер түрін қолдану өте маңызды, өйткені millis() мәні өте үлкен болуы мүмкін және стандартты int айнымалысының максималды мәнінен асып кетеді, бұл салыстыруда қателерге әкеледі. (бейнеде 05:46)
pinMode(2,INPUT_PULLUP);
Бұл жол 2 цифрлық пинін кіріс ретінде конфигурациялайды және оның ішкі тарту резисторын іске қосады. Бұл сыртқы резисторсыз түймені қосуға мүмкіндік беретін негізгі конфигурация қадамы. Пин әдепкі бойынша HIGH мәнін оқиды және түйме басылғанда, оны жерге қосқанда, LOW мәніне өтеді. Басқа пинді қолданғыңыз келсе, 2 санын осы жерде және цикл ішіндегі digitalRead(2) жолында өзгертіңіз. (бейнеде 08:46)
loop() ішіндегі логика қарапайым. Ол түйменің күйін оқиды. Егер түйме басылған болса (pb == LOW), онда ағымдағы уақыт (millis()) сіздің анықтаған event уақытынан үлкен немесе тең екенін тексереді. Екі шарт та орындалса, ол әрекет хабарламасын басып шығарады. Циклдің қалған бөлігі, уақытты басып шығаратын, үздіксіз жұмыс істейді, бұл millis() функциясының delay() функциясынан артықшылығын көрсетеді.
Бұл мысал Arduino іске қосылған сәттен бастап уақытты тексереді. Бейне сериясындағы үшінші мысал осыған негізделіп, бірінші түйме басудың уақытын жазып, екінші басу кемінде 5 секундтан кейін болғанда ғана әрекетті іске қосады. Бұл логика 14/31-3 сабағында қамтылған: Arduino coding millis() мысал 3 түймемен.
Тірі жоба демонстрациясы
Кодты жүктеп, Serial Monitor-ді ашқаннан кейін (9600 бод жылдамдықта), сіз тақта қосылғаннан бері өткен миллисекундтарды білдіретін үздіксіз сандар ағынын көресіз. Егер 5 секунд өтпей тұрып түймені басып тұрсаңыз, ештеңе болмайды. Алайда, 5 секундтан кейін түймені басып тұрсаңыз, Serial Monitor-де "Take action" хабарының басылғанын көресіз. Түйме басылып тұрған кезде әрекет басып шығарыла береді. Бұл басқа кодтың (басып шығарудың) үздіксіз жұмыс істеуіне мүмкіндік беретін блоктамайтын таймерді көрсетеді. (бейнеде 10:52)
Осы бейнеден алынған байланысты жобалар
Бұл бейне Arduino уақыт және карталау функциялары бойынша көп бөлімді серияның бөлігі болып табылады. Осы бірдей бастапқы материалдан жасалған басқа оқулықтарды зерттеңіз:
- 14/31-1 сабақ: Arduino Millis (кешіктірусіз) және map функциялары | SunFounder Robojax
- 14/31-3 сабақ: Arduino coding millis() мысал 3 түйме батырмасымен
- 14/31-4 сабақ: Arduino coding map() мысал 1
- 14/31-5 сабақ: Arduino coding 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] LED көмегімен map() функциясын кодтау және көрсету
/*
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
Сізге қажет болуы мүмкін нәрселер
-
АмазонкаSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Амазонка
-
Амазонка
-
Амазонка
-
Амазонка
-
Басқа
Ресурстар мен сілтемелер
-
Сыртқы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