Сабақ 14/31-3: Arduino кодтау millis() мысалы 3 түйме батырмасымен
Сізге Arduino-дың қашан бір нәрсе болғанын есте сақтауы қажет болды ма—мысалы, түймені басу—содан кейін дәл белгілі бір уақыт өткеннен кейін әрекет жасауы керек пе, әрі бағдарламаңыздың қалған бөлігі үздіксіз жұмыс істеуі керек пе? Бұл Arduino бағдарламалаудағы классикалық мәселе, және шешімі millis() функциясы болып табылады. Бұл оқу құралы, Robojax Arduino курсының бөлігі, практикалық мысалды көрсетеді: бірінші басудан кейін 5 секунд өткен соң, түйменің екінші рет басылғанын анықтау. Бұл әдіс уақыт маңызды болатын, жауап беретін, блоктамайтын жобаларды құрудың негізі болып табылады.
millis() функциясын бағдарламаны тоқтатпай уақытты бақылау үшін қолданудың бұл үлгісі нақты әлемдегі көптеген қосымшалар үшін өте маңызды. Міне, өз жобаларыңызға шабыт беретін бірнеше идея:
- Дебаунс түйме интерфейстері: Құрылғыны қосу үшін түймені белгілі бір уақыт (мысалы, 3 секунд) басып тұру қажет жүйені енгізіңіз, бұл кездейсоқ басуларды болдырмайды.
- Тізбекті әрекеттер: Бір оқиға, мысалы, қозғалыс сенсорының триггері, белгілі бір уақыт терезесінде басқа оқиға болған жағдайда ғана орындалатын қосымша әрекетті іске қосатын жүйе құрыңыз.
- Пайдаланушымен өзара әрекеттесу таймерлері: Маңызды функцияны орындау үшін, мысалы, команда жіберу немесе моторды іске қосу, белгіленген уақыт ішінде "растау" кірісін (екінші түйме басу сияқты) талап ететін жоба құрыңыз.
- Сенсорлық қақпалау: Бірінші сенсордан келетін сигналды уақыт терезесін бастау үшін қолданыңыз, осы кезеңде екінші, басқа сенсордың көрсеткіші жарамды деп есептеледі немесе еленбейді.
Қажетті аппараттық құралдар
Бұл жоба SunFounder 3-в-1 Arduino жинағының компоненттерін пайдаланады, бұл оқу үшін тамаша ресурс. Сізге қажет:
- Arduino тақтасы (Uno, Nano және т.б.)
- Импульстік түйме
- Жалғау сымдары
Қосылу нұсқаулығы
Бұл мысалдағы қосылу өте қарапайым, Arduino-ның ішкі pull-up резисторларының арқасында, бұл сыртқы резистор қажеттілігін жояды. (Бейнеде 08:29)
- Түйменің бір аяғын Arduino-дағы GND пиніне қосыңыз.
- Түйменің екінші аяғын Arduino-дағы цифрлық пин 2-ге қосыңыз.
INPUT_PULLUP қолдану арқылы пин ішкі түрде 5V-қа қосылған, сондықтан ол қалыпты жағдайда HIGH мәнін оқиды. Түйме басылғанда, ол пинді GND-ге қосады, бұл оның LOW мәнін оқуына әкеледі. Бұл кодта қолданатын логика.
Кодты түсіндіру
Бұл жобаның негізі - бірінші түйме басуды бақылайтын, содан кейін белгілі бір уақыт аралығынан кейін екінші басуды тексеретін логика. Код блоктамайтын етіп жасалған, яғни ол loop() функциясындағы басқа тапсырмалардың орындалуын тоқтатпайды.
Скетчтің жоғарғы жағында уақыт әрекетін бақылайтын негізгі пайдаланушы конфигурациялайтын айнымалыларды табасыз:
unsigned long event = 5000;// 5 секунд
unsigned long buttonPushed =0;
event: Бұл маңызды уақыт айнымалысы. Ол кідіріс ұзақтығын миллисекундпен белгілейді. Бұл мысалда ол5000мәніне орнатылған, бұл 5 секундқа тең. Бұл мәнді жобаңыздың қажеттіліктеріне сәйкес кез келген басқа ұзақтыққа өзгерте аласыз.buttonPushed: Бұл айнымалы жалауша және уақыт белгісі ретінде қолданылады. Ол0мәнінен басталады және түйме бірінші рет басылғандаmillis()мәніне жаңартылады. Бұл сақталған уақыт екінші басуды тексеру үшін айырмашылықты есептеуде қолданылады.
loop() функциясындағы логика екі кезеңде жұмыс істейді. Біріншіден, ол түйменің күйін оқиды және егер ол бірінші рет басылса (pb == LOW && buttonPushed == 0), ағымдағы уақытты millis() арқылы buttonPushed айнымалысына жазады. Екінші кезең түйменің әлі басылғанын және бірінші басудың тіркелгенін тексереді. Егер солай болса, ол ағымдағы уақыт пен бірінші басу уақыты арасындағы уақыт айырмашылығын есептейді. Егер бұл айырмашылық event уақытынан үлкен немесе тең болса, ол әрекетті орындайды—бұл жағдайда Serial Monitor-ге хабарлама басып шығарады.
Тірі жоба демонстрациясы
Бейнеде код Arduino-ға жүктеледі және Serial Monitor мінез-құлықты бақылау үшін ашылады. (Бейнеде 16:03) Сіз millis() мәнінің үздіксіз басылып жатқанын көресіз, бұл бағдарлама басталғаннан бері өткен уақытты көрсетеді. Түймені бірінші рет басқанда, First push at:5019 сияқты хабарлама басылады. Егер түймені қайта басып, бірінші басудан бастап 5 секундтан артық ұстасаңыз, Action after 5 seconds of first push хабарламасы басылады. Бұл әрекет тек белгіленген кідіріс өткеннен кейін екінші басу болғанда ғана іске қосылатынын көрсетеді.
Бұл тәсілдің күші - loop() функциясының жоғарғы жағындағы Serial.println(millis()) жолының үзіліссіз жұмыс істеуінде, бұл уақыт логикасының басқа кодтың орындалуын блоктамайтынын дәлелдейді. Бұл millis() функциясын delay() функциясынан артық қолданудың негізгі артықшылығы.
Осы бейнеге қатысты жобалар
- 14/31-1 сабақ: Arduino Millis (delay жоқ) және map функциялары | SunFounder Robojax
- 14/31-2 сабақ: Arduino millis() кодтау мысалы 2 оқиғамен
- 14/31-4 сабақ: Arduino map() кодтау мысалы 1
- 14/31-5 сабақ: Arduino map() кодтау мысалы 2
Тараулар
- [00:00] millis() және курсқа кіріспе
- [01:19] millis() дегеніміз не және неге оны қолдану керек?
- [03:06] Бірінші практикалық мысал: millis() басып шығару
- [05:46] 5 секундтан кейін оқиғаны іске қосу үшін millis() қолдану
- [08:29] 2-мысал: 5 секунд кідіріспен түймені басу әрекеті
- [12:14] 3-мысал: Кідірістен кейін екінші түймені басуды анықтау
- [17:20] map() функциясына кіріспе
- [19:47] LED жарықтық пайыздарын карталаудың практикалық мысалы
/*
Lesson 14/31: Arduino coding millis() example 3 with push button
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
unsigned long buttonPushed =0;
void setup() {
Serial.begin(9600);//initialize serial monitor
Serial.println("Introduction to millis");
pinMode(2,INPUT_PULLUP);
}
void loop() {
// ilmoFan.com example-2 millis()
Serial.println(millis());
int pb = digitalRead(2);// read pin 2
if(pb ==LOW && buttonPushed ==0)
{
buttonPushed =millis();
Serial.print("First push at:");
Serial.println(buttonPushed);
}
if( pb ==LOW && buttonPushed >0 )
{
unsigned long difference = millis()- buttonPushed;
if( difference >= event)
{
Serial.println("Action after 5 seconds of first push");
}
}
}
Сізге қажет болуы мүмкін нәрселер
-
АмазонкаSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Амазонка
-
Амазонка
-
Амазонка
-
Амазонка
Ресурстар мен сілтемелер
-
ҚұжаттамаDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.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