کوڈ تلاش کریں

سبق 14/31-3: آرڈوینو کوڈنگ millis() مثال 3 پش بٹن کے ساتھ

سبق 14/31-3: آرڈوینو کوڈنگ millis() مثال 3 پش بٹن کے ساتھ

کیا آپ نے کبھی ضرورت محسوس کی ہے کہ آپ کا آرڈوینو یاد رکھے کہ کب کچھ ہوا تھا—جیسے بٹن دبانا—اور پھر عین اس کے بعد ایک مخصوص وقت پر کارروائی کرے، جبکہ آپ کے پروگرام کا باقی حصہ آسانی سے چلتا رہے؟ یہ آرڈوینو پروگرامنگ میں ایک کلاسک چیلنج ہے، اور اس کا حل millis() فنکشن ہے۔ یہ ٹیوٹوریل، جو Robojax آرڈوینو کورس کا حصہ ہے، ایک عملی مثال پیش کرتا ہے: یہ پتہ لگانا کہ آیا پش بٹن پہلی بار دبانے کے 5 سیکنڈ کی تاخیر گزر جانے کے بعد دوسری بار دبایا گیا ہے۔ یہ تکنیک ایسے ردعمل والے، غیر مسدود کرنے والے پروجیکٹس بنانے کے لیے بنیادی ہے جہاں وقت اہم ہوتا ہے۔

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

millis() استعمال کرکے وقت کو ٹریک کرنے کا یہ طریقہ، بغیر پروگرام کو روکے، حقیقی دنیا کی وسیع ایپلیکیشنز کے لیے ضروری ہے۔ یہاں کچھ خیالات ہیں جو آپ کے اپنے پروجیکٹس کو متاثر کر سکتے ہیں:

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

مطلوبہ ہارڈویئر

اس پروجیکٹ میں SunFounder 3-in-1 آرڈوینو کٹ کے اجزاء استعمال ہوتے ہیں، جو سیکھنے کے لیے ایک بہترین وسیلہ ہے۔ آپ کو درج ذیل چیزوں کی ضرورت ہوگی:

  • آرڈوینو بورڈ (Uno، Nano، وغیرہ)
  • ایک لمحاتی پش بٹن
  • جمپر تار

وائرنگ گائیڈ

اس مثال کی وائرنگ بہت آسان ہے، آرڈوینو کے اندرونی پل-اپ ریزسٹرس کی بدولت، جس سے بیرونی ریزسٹر کی ضرورت ختم ہو جاتی ہے۔ (ویڈیو میں 08:29 پر)

  • پش بٹن کی ایک ٹانگ کو آرڈوینو کے GND پن سے جوڑیں۔
  • پش بٹن کی دوسری ٹانگ کو آرڈوینو کے ڈیجیٹل پن 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 وقت کے برابر یا اس سے زیادہ ہے، تو یہ کارروائی انجام دیتا ہے—اس معاملے میں، سیریل مانیٹر پر ایک پیغام پرنٹ کرتا ہے۔

لائیو پروجیکٹ ڈیموسٹریشن

ویڈیو میں، کوڈ آرڈوینو پر اپ لوڈ کیا جاتا ہے، اور سیریل مانیٹر کھولا جاتا ہے تاکہ رویے کا مشاہدہ کیا جا سکے۔ (ویڈیو میں 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() استعمال کرکے 5 سیکنڈ کے بعد ایونٹ متحرک کرنا
  • [08:29] مثال 2: 5 سیکنڈ کی تاخیر کے ساتھ پش بٹن ایکشن
  • [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");
      }
  }
  
}

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

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

فائلیں📁

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