کوڈ تلاش کریں

سبق 14/31-2: Arduino کوڈنگ millis() مثال 2 ایونٹ کے ساتھ

سبق 14/31-2: Arduino کوڈنگ millis() مثال 2 ایونٹ کے ساتھ

اس ٹیوٹوریل میں، آپ سیکھیں گے کہ Arduino کے millis() فنکشن کو کیسے استعمال کریں تاکہ ایک مخصوص مدت گزرنے کے بعد ہی کوئی عمل شروع کیا جا سکے، بغیر اپنے پروگرام کے باقی حصے کو روکے۔ یہ ایک بنیادی تکنیک ہے جو ردعمل دینے والے Arduino پروجیکٹس بنانے کے لیے ہے جہاں متعدد کام بیک وقت چلانے ہوتے ہیں، جیسے LEDs کو جھپکانا جبکہ سینسرز پڑھنا یا بٹن دبانے کی نگرانی کرنا۔ یہ خاص مثال پانچ سیکنڈ کے بعد ایک واقعہ شروع کرنے پر مرکوز ہے، لیکن یہ منطق بے شمار حقیقی دنیا کے منظرناموں پر لاگو کی جا سکتی ہے۔

سن فاؤنڈر کار اسمبل شدہ

یہاں کچھ عملی مثالیں ہیں کہ آپ اپنے پروجیکٹس میں اس پیٹرن کو کیسے استعمال کر سکتے ہیں:

  • تاخیر سے ایکٹیویشن: پنکھا یا پمپ صرف اس وقت آن کریں جب سسٹم ایک مقررہ وقت سے چل رہا ہو۔
  • حفاظتی انٹرلاکس: خطرناک عمل کرنے سے پہلے، جیسے موٹر شروع کرنا، بٹن کو ایک مدت تک دبائے رکھنے کی ضرورت ہو۔
  • وقت پر مبنی الرٹس: اگر سینسر کی ریڈنگ ایک مخصوص مدت میں تبدیل نہ ہوئی ہو تو الارم یا اطلاع شروع کریں۔
  • نان بلاکنگ ٹائمرز: ایک "واچ ڈاگ" ٹائمر بنائیں جو ڈیوائس کو ری سیٹ کرے اگر وہ غیر جوابدہ ہو جائے۔

بنیادی مسئلہ جو یہ حل کرتا ہے وہ 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 coding 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

آپ کو جن چیزوں کی ضرورت ہو سکتی ہے

وسائل اور حوالہ جات

فائلیں📁

صارف کا دستی کتاب