لومړی ۱۴/۳۱-۳: د آردوینو کوډینګ millis() بېلګه ۳ د پش بټن سره
ایا تاسو کله هم اړتیا لرئ چې خپل Arduino دې ته یاد وساتي چې کله یو څه پیښ شول—لکه د تڼۍ فشار—او بیا د دقیقې مودې وروسته عمل وکړي، پداسې حال کې چې ستاسو د پروګرام پاتې برخه په اسانۍ سره روانه وي؟ دا د Arduino پروګرام کولو کې یوه کلاسیکه ننګونه ده، او حل یې د millis() فنکشن دی. دا ټیوټوریل، چې د Robojax Arduino کورس برخه ده، یو عملي مثال وړاندې کوي: د دې کشف کول چې ایا د فشار تڼۍ د لومړي فشار څخه د 5 ثانیو ځنډ تیریدو وروسته دوهم ځل فشار شوې ده. دا تخنیک د ځواب ویونکو، غیر بلاک کونکو پروژو جوړولو لپاره بنسټیز دی چیرې چې وخت مهم وي.
د millis() کارولو دا طریقه د وخت تعقیب لپاره پرته له دې چې پروګرام ودروي، د پراخو ریښتیني نړۍ غوښتنلیکونو لپاره اړینه ده. دلته ځینې نظرونه دي چې ستاسو د خپلو پروژو لپاره الهام ورکړي:
- د تڼۍ ډیبونس شوي انٹرفیسونه: یو سیستم پلي کړئ چیرې چې یوه تڼۍ باید د ځانګړې مودې لپاره ونیول شي (د مثال په توګه، 3 ثانیې) ترڅو یو وسیله فعاله شي، د ناڅاپي فشارونو مخه ونیسي.
- پرله پسې کړنې: یو سیستم جوړ کړئ چیرې چې یوه پیښه، لکه د حرکت سینسر محرک، یو ثانوي عمل چمتو کوي چې یوازې هغه وخت پیښیږي که بله پیښه د یوې ټاکلې وخت کړکۍ دننه واقع شي.
- د کارونکي تعامل ټایمرونه: یوه پروژه جوړه کړئ چې د "تایید" انپټ ته اړتیا لري (لکه د تڼۍ دوهم فشار) د ټاکلي وخت دننه ترڅو یو مهم فنکشن اجرا کړي، لکه د کمانډ لیږل یا د موټور پیل کول.
- د سینسر ګیټینګ: د سینسر څخه لومړی سیګنال وکاروئ ترڅو د وخت کړکۍ پیل کړئ، د کوم په جریان کې چې د دوهم، مختلف سینسر لوستل معتبر ګڼل کیږي یا له پامه غورځول کیږي.
اړین هارډویر
دا پروژه د SunFounder 3-in-1 Arduino کټ اجزاوې کاروي، کوم چې د زده کړې لپاره یوه ښه سرچینه ده. تاسو به اړتیا ولرئ:
- Arduino بورډ (Uno، Nano، او داسې نور)
- یوه لنډمهاله فشار تڼۍ
- جمپر تارونه
د تارونو لارښود
د دې مثال لپاره تارونه خورا ساده دي، د Arduino د داخلي پل-اپ ریزسټرونو څخه مننه، کوم چې د بهرني ریزسټر اړتیا له منځه وړي. (په ویډیو کې په 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 چاپ کیږي. دا ښیې چې عمل یوازې هغه وخت رامینځته کیږي کله چې دوهم فشار د ټاکل شوي ځنډ له تیریدو وروسته واقع شي.
د دې طریقې ځواک دا دی چې د Serial.println(millis()) کرښه د لوپ په پورتنۍ برخه کې پرته له خنډه روانه ده، دا ثابتوي چې د وخت منطق د نورو کوډ اجرا بند نه کوي. دا د delay() فنکشن په پرتله د millis() کارولو بنسټیزه ګټه ده.
د دې ویډیو اړوند پروژې
- درس 14/31-1: د آردوینو Millis (پرته له ځنډ) او map فنکشنونه | SunFounder Robojax
- درس 14/31-2: د آردوینو کوډینګ millis() بېلګه 2 د پیښې سره
- درس 14/31-4: د آردوینو کوډینګ map() بېلګه 1
- درس 14/31-5: د آردوینو کوډینګ map() بېلګه 2
فصلونه
- [00:00] د millis() او کورس پیژندنه
- [01:19] millis() څه شی دی او ولې یې وکاروو؟
- [03:06] لومړۍ عملي بېلګه: د millis() چاپول
- [05:46] د millis() کارول د ۵ ثانیو وروسته د یوې پیښې د پیل لپاره
- [08:29] بېلګه 2: د ۵ ثانیو ځنډ سره د تڼۍ عمل
- [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