کوډ ولټوئ

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

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

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

د سن فاونډر موټر راټول شوی

دلته ستاسو په خپلو پروژو کې د دې نمونې کارولو څو عملي مثالونه دي:

  • ځنډیدلی فعالول: یو پنکه یا پمپ یوازې وروسته له هغه چې سیسټم د ټاکلي وخت لپاره روان وي، چالان کړئ.
  • د خوندیتوب مداخله: د خطرناک عمل ترسره کولو دمخه، لکه د موټرو پیل کول، اړتیا لرئ چې تڼۍ د یوې مودې لپاره فشارول شوې وي.
  • د وخت پر بنسټ خبرتیاوې: که د سینسر لوستل په یوه ټاکلي وخت کې بدل شوي نه وي، یو الارم یا خبرتیا پیل کړئ.
  • غیر بندیدونکي ټایمرونه: یو "واچ ډاګ" ټایمر جوړ کړئ چې که وسیله بې ځوابه شي، هغه بیا تنظیم کړي.

اصلي ستونزه چې دا حل کوي د delay() فنکشن محدودیت دی. کله چې تاسو delay(5000) وکاروئ، Arduino د دې پنځو ثانیو لپاره د نورو کوډ اجرا کول بندوي. دا د ساده سکیچونو لپاره ښه دی، مګر په ډیرو پیچلو پروژو کې دا یوه لویه ستونزه کیږي چیرې چې تاسو اړتیا لرئ د انتظار پرمهال سینسرونه ولولئ، ښودونکي تازه کړئ، یا د تڼۍ فشارونو ته غوږ ونیسئ. د millis() فنکشن، چې د بورډ د چالانیدو راهیسې ملی ثانیې شماري، تاسو ته اجازه درکوي چې د پروګرام له بندولو پرته وخت وګورئ.

اړین هارډویر

  • د Arduino بورډ (Uno، Nano، Mega، او نور)
  • یو فشارونکی تڼۍ
  • جمپر تارونه

د تارونو لارښود

د دې مثال لپاره تارونه خورا ساده دي. دا یو داخلي پل-اپ ریزسټر کاروي، نو د تڼۍ لپاره بهرني ریزسټر ته اړتیا نشته.

  • د فشارونکي تڼۍ یوه پښه د Arduino په GND پن سره وصل کړئ.
  • د فشارونکي تڼۍ بله پښه د Arduino په ډیجیټل پن 2 سره وصل کړئ.

ځکه چې موږ په کوډ کې INPUT_PULLUP کاروو، پن به HIGH ولولي کله چې تڼۍ فشارول شوې نه وي او LOW کله چې فشارول شوې وي، پن ځمکې سره نښلوي. (په ویډیو کې په 08:29)

د کوډ پوهیدل

دا کوډ یو ساده د پیښې پر بنسټ ټایمر ښیې. پروګرام په دوامداره توګه اوسنی millis() ارزښت سیریل مانیټر ته چاپوي. کله چې فشارونکي تڼۍ فشارول شوې او ونیول شي، او Arduino لږترلږه 5 ثانیې روان وي، دا به "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 وخت څخه لوی یا مساوي دی. که دواړه شرایط ریښتیا وي، دا د عمل پیغام چاپوي. د لوپ پاتې برخه، چې وخت چاپوي، پرته له خنډه روانه ده، چې د delay() په پرتله د millis() ځواک ښیې.

دا مثال د هغه وخت څخه وخت ګوري چې Arduino پیل کیږي. د ویډیو لړۍ دریم مثال په دې باندې جوړیږي چې د لومړي تڼۍ فشار وخت ثبتوي او یو عمل یوازې هغه وخت پیل کوي که چیرې دوهم فشار لږترلږه 5 ثانیې وروسته پیښ شي. دا منطق په درس 14/31-3: د Arduino کوډینګ millis() مثال 3 د فشارونکي تڼۍ سره کې پوښل شوی.

د ژوندۍ پروژې نندارې

یوځل چې تاسو کوډ اپلوډ کړئ او سیریل مانیټر خلاص کړئ (په 9600 باد کې)، تاسو به د شمیرو دوامداره جریان وګورئ، چې د بورډ د چالانیدو راهیسې ملی ثانیې استازیتوب کوي. که تاسو د 5 ثانیو تیریدو دمخه فشارونکي تڼۍ فشار کړئ او ونیسئ، هیڅ به پیښ نشي. په هرصورت، که تاسو د 5 ثانیو نښه وروسته تڼۍ فشار کړئ او ونیسئ، تاسو به په سیریل مانیټر کې "Take action" پیغام وګورئ. عمل به تر هغه وخته چاپیدو ته دوام ورکړي چې تڼۍ ونیول شي. دا یو غیر بندیدونکی ټایمر ښیې چې نورو کوډونو (چاپ کولو) ته اجازه ورکوي چې په بې سارۍ سره روان وي. (په ویډیو کې په 10:52)

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

دا ویډیو د Arduino وخت او نقشه کولو دندو په اړه د څو برخو لړۍ برخه ده. د دې ورته سرچینې موادو څخه جوړ شوي نور درسونه وپلټئ:

فصلونه

  • [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() دندې کوډ کول او مظاهره

انځورونه

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
917-Lesson 14/31-2: Arduino coding millis() example 2 with event
ژبه: C++
/*
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

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

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

فایلونه📁

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