পাঠ ১৪/৩১-৩: আরডুইনো কোডিং millis() উদাহরণ ৩ পুশ বাটন সহ
আপনার কি কখনো প্রয়োজন হয়েছে যে আপনার Arduino মনে রাখুক কখন কিছু ঘটেছে—যেমন একটি বাটন চাপা—এবং তারপর একটি নির্দিষ্ট সময় পরে কাজ করুক, সবকিছু আপনার প্রোগ্রামের বাকি অংশ মসৃণভাবে চলতে থাকা অবস্থায়? এটি Arduino প্রোগ্রামিংয়ের একটি ক্লাসিক চ্যালেঞ্জ, এবং সমাধান হলো millis() ফাংশন। এই টিউটোরিয়ালটি, যা Robojax Arduino কোর্সের অংশ, একটি ব্যবহারিক উদাহরণ প্রদর্শন করে: প্রথম চাপের ৫ সেকেন্ড পরে একটি পুশ বাটন দ্বিতীয়বার চাপা হয়েছে কিনা তা সনাক্ত করা। এই কৌশলটি প্রতিক্রিয়াশীল, নন-ব্লকিং প্রকল্প তৈরির জন্য মৌলিক যেখানে সময় গুরুত্বপূর্ণ।
প্রোগ্রাম থামানো ছাড়া সময় ট্র্যাক করতে millis() ব্যবহারের এই প্যাটার্নটি বিস্তৃত বাস্তব-বিশ্বের অ্যাপ্লিকেশনের জন্য অপরিহার্য। আপনার নিজের প্রকল্পগুলিকে অনুপ্রাণিত করার জন্য এখানে কয়েকটি ধারণা দেওয়া হলো:
- ডিবাউন্সড বাটন ইন্টারফেস: এমন একটি সিস্টেম বাস্তবায়ন করুন যেখানে একটি ডিভাইস চালু করতে একটি বাটনকে নির্দিষ্ট সময় ধরে (যেমন ৩ সেকেন্ড) চেপে রাখতে হবে, যা দুর্ঘটনাজনিত চাপ প্রতিরোধ করে।
- ক্রমিক ক্রিয়া: এমন একটি সিস্টেম তৈরি করুন যেখানে একটি ঘটনা, যেমন একটি মোশন সেন্সর ট্রিগার, একটি গৌণ ক্রিয়া সক্রিয় করে যা কেবল তখনই ঘটে যদি নির্দিষ্ট সময়ের মধ্যে অন্য একটি ঘটনা ঘটে।
- ব্যবহারকারী ইন্টারঅ্যাকশন টাইমার: এমন একটি প্রকল্প তৈরি করুন যেখানে একটি গুরুত্বপূর্ণ ফাংশন সম্পাদনের জন্য নির্দিষ্ট সময়ের মধ্যে একটি "নিশ্চিতকরণ" ইনপুট (যেমন দ্বিতীয় বাটন চাপ) প্রয়োজন, যেমন একটি কমান্ড পাঠানো বা মোটর চালু করা।
- সেন্সর গেটিং: একটি সেন্সর থেকে প্রথম সংকেত ব্যবহার করে একটি সময় উইন্ডো শুরু করুন, যার সময় একটি দ্বিতীয়, ভিন্ন সেন্সরের পড়া বৈধ বলে বিবেচিত হয় বা উপেক্ষা করা হয়।
প্রয়োজনীয় হার্ডওয়্যার
এই প্রকল্পটি 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সেট করা হয়েছে, যা ৫ সেকেন্ডের সমান। আপনি আপনার প্রকল্পের প্রয়োজন অনুসারে এই মানটি অন্য যেকোনো সময়কালে পরিবর্তন করতে পারেন।buttonPushed: এই ভেরিয়েবলটি একটি ফ্ল্যাগ এবং একটি টাইমস্ট্যাম্প হিসাবে ব্যবহৃত হয়। এটি0থেকে শুরু হয় এবং প্রথমবার বাটন চাপলেmillis()-এর মানে আপডেট হয়। এই সংরক্ষিত সময়টি তখন দ্বিতীয় চাপ পরীক্ষার জন্য পার্থক্য গণনা করতে ব্যবহৃত হয়।
loop() ফাংশনের লজিক দুটি পর্যায়ে কাজ করে। প্রথমে, এটি বাটনের অবস্থা পড়ে এবং যদি এটি প্রথমবার চাপা হয় (pb == LOW && buttonPushed == 0), এটি millis()-এর মাধ্যমে বর্তমান সময় buttonPushed ভেরিয়েবলে রেকর্ড করে। দ্বিতীয় পর্যায়টি পরীক্ষা করে যে বাটনটি এখনও চাপা আছে কিনা এবং একটি প্রথম চাপ রেকর্ড করা হয়েছে কিনা। যদি তাই হয়, এটি বর্তমান সময় এবং প্রথম চাপের সময়ের মধ্যে সময় পার্থক্য গণনা করে। যদি এই পার্থক্যটি আপনার event সময়ের চেয়ে বড় বা সমান হয়, এটি ক্রিয়াটি সম্পাদন করে—এই ক্ষেত্রে, সিরিয়াল মনিটরে একটি বার্তা প্রিন্ট করে।
লাইভ প্রকল্প প্রদর্শন
ভিডিওতে, কোডটি Arduino-তে আপলোড করা হয় এবং আচরণ পর্যবেক্ষণের জন্য সিরিয়াল মনিটর খোলা হয়। (ভিডিওতে 16:03 এ) আপনি দেখতে পাবেন millis() মান ক্রমাগত প্রিন্ট হচ্ছে, প্রোগ্রাম শুরু হওয়ার পর থেকে সময় দেখাচ্ছে। যখন আপনি প্রথমবার বাটন চাপবেন, তখন First push at:5019-এর মতো একটি বার্তা প্রিন্ট হবে। যদি আপনি আবার বাটন চাপেন এবং প্রথম চাপ থেকে ৫ সেকেন্ডের বেশি ধরে রাখেন, তাহলে Action after 5 seconds of first push বার্তাটি প্রিন্ট হবে। এটি প্রদর্শন করে যে ক্রিয়াটি কেবল তখনই ট্রিগার হয় যখন নির্দিষ্ট বিলম্ব অতিক্রান্ত হওয়ার পরে দ্বিতীয় চাপ ঘটে।
এই পদ্ধতির শক্তি হলো লুপের শীর্ষে থাকা Serial.println(millis()) লাইনটি বাধা ছাড়াই চলতে থাকে, প্রমাণ করে যে সময় লজিক অন্যান্য কোডের সম্পাদন ব্লক করে না। এটি delay() ফাংশনের উপর millis() ব্যবহারের মৌলিক সুবিধা।
এই ভিডিও থেকে সম্পর্কিত প্রকল্প
- পাঠ ১৪/৩১-১: আরডুইনো মিলিস (নো ডিলে) এবং ম্যাপ ফাংশন | সানফাউন্ডার রোবোজ্যাক্স
- পাঠ ১৪/৩১-২: আরডুইনো কোডিং মিলিস() উদাহরণ ২ ইভেন্ট সহ
- পাঠ ১৪/৩১-৪: আরডুইনো কোডিং ম্যাপ() উদাহরণ ১
- পাঠ ১৪/৩১-৫: আরডুইনো কোডিং ম্যাপ() উদাহরণ ২
অধ্যায়সমূহ
- [০০:০০] মিলিস() এবং কোর্সের পরিচিতি
- [০১:১৯] মিলিস() কী এবং কেন এটি ব্যবহার করবেন?
- [০৩:০৬] প্রথম ব্যবহারিক উদাহরণ: মিলিস() প্রিন্ট করা
- [০৫:৪৬] ৫ সেকেন্ড পরে একটি ইভেন্ট ট্রিগার করতে মিলিস() ব্যবহার
- [০৮:২৯] উদাহরণ ২: ৫ সেকেন্ড বিলম্বসহ পুশ বাটন অ্যাকশন
- [১২:১৪] উদাহরণ ৩: বিলম্বের পরে দ্বিতীয় বাটন প্রেস শনাক্ত করা
- [১৭:২০] ম্যাপ() ফাংশনের পরিচিতি
- [১৯:৪৭] এলইডি উজ্জ্বলতার শতাংশ ম্যাপিংয়ের ব্যবহারিক উদাহরণ
/*
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