کوډ ولټوئ

لومړی ۱۴/۳۱-۳: د آردوینو کوډینګ millis() بېلګه ۳ د پش بټن سره

لومړی ۱۴/۳۱-۳: د آردوینو کوډینګ millis() بېلګه ۳ د پش بټن سره

ایا تاسو کله هم اړتیا لرئ چې خپل Arduino دې ته یاد وساتي چې کله یو څه پیښ شول—لکه د تڼۍ فشار—او بیا د دقیقې مودې وروسته عمل وکړي، پداسې حال کې چې ستاسو د پروګرام پاتې برخه په اسانۍ سره روانه وي؟ دا د Arduino پروګرام کولو کې یوه کلاسیکه ننګونه ده، او حل یې د millis() فنکشن دی. دا ټیوټوریل، چې د Robojax Arduino کورس برخه ده، یو عملي مثال وړاندې کوي: د دې کشف کول چې ایا د فشار تڼۍ د لومړي فشار څخه د 5 ثانیو ځنډ تیریدو وروسته دوهم ځل فشار شوې ده. دا تخنیک د ځواب ویونکو، غیر بلاک کونکو پروژو جوړولو لپاره بنسټیز دی چیرې چې وخت مهم وي.

د Sunfounder موټر راټول شوی

د 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() کارولو بنسټیزه ګټه ده.

د دې ویډیو اړوند پروژې

فصلونه

  • [00:00] د millis() او کورس پیژندنه
  • [01:19] millis() څه شی دی او ولې یې وکاروو؟
  • [03:06] لومړۍ عملي بېلګه: د millis() چاپول
  • [05:46] د millis() کارول د ۵ ثانیو وروسته د یوې پیښې د پیل لپاره
  • [08:29] بېلګه 2: د ۵ ثانیو ځنډ سره د تڼۍ عمل
  • [12:14] بېلګه 3: د ځنډ وروسته د دویمې تڼۍ فشار کشف کول
  • [17:20] د map() فنکشن پیژندنه
  • [19:47] د LED روښانتیا سلنو د نقشه کولو عملي بېلګه

انځورونه

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
918-Lesson 14/31-3: Arduino coding millis() example 3 with push button
ژبه: C++
/*
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");
      }
  }
  
}

هغه شیان چې تاسو ورته اړتیا لرئ

سرچینې او حوالې

فایلونه📁

د کارونکي لارښود