পাঠ ১৪/৩১-২: আরডুইনো কোডিং 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() মান Serial Monitor-এ প্রিন্ট করে। যখন পুশ বাটনটি চেপে ধরা হয়, এবং Arduino কমপক্ষে 5 সেকেন্ড ধরে চলছে, তখন এটি Serial Monitor-এ "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-এ covered করা হয়েছে।
লাইভ প্রজেক্ট প্রদর্শন
একবার আপনি কোড আপলোড করে Serial Monitor খুললে (9600 বাউডে), আপনি সংখ্যার একটি ক্রমাগত ধারা দেখতে পাবেন, যা বোর্ড চালু হওয়ার পর থেকে মিলিসেকেন্ড প্রতিনিধিত্ব করে। যদি আপনি 5 সেকেন্ড পার হওয়ার আগে পুশ বাটনটি চেপে ধরেন, কিছুই ঘটবে না। তবে, যদি আপনি 5-সেকেন্ড চিহ্নের পরে বাটনটি চেপে ধরেন, আপনি Serial Monitor-এ "Take action" বার্তাটি প্রিন্ট হতে দেখবেন। বাটনটি চেপে রাখা পর্যন্ত অ্যাকশনটি প্রিন্ট হতে থাকবে। এটি একটি নন-ব্লকিং টাইমার প্রদর্শন করে যা অন্যান্য কোডকে (প্রিন্টিং) নির্বিঘ্নে চলতে দেয়। (ভিডিওতে 10:52 এ)
এই ভিডিও থেকে সম্পর্কিত প্রকল্প
এই ভিডিওটি আরডুইনো টাইমিং এবং ম্যাপিং ফাংশনের উপর একটি বহু-পর্বের সিরিজের অংশ। একই উৎস উপাদান থেকে তৈরি অন্যান্য টিউটোরিয়ালগুলি অন্বেষণ করুন:
- পাঠ 14/31-1: আরডুইনো মিলিস (কোনো বিলম্ব নেই) এবং ম্যাপ ফাংশন | সানফাউন্ডার রোবোজ্যাক্স
- পাঠ 14/31-3: আরডুইনো কোডিং মিলিস() উদাহরণ ৩ পুশ বাটন সহ
- পাঠ 14/31-4: আরডুইনো কোডিং ম্যাপ() উদাহরণ ১
- পাঠ 14/31-5: আরডুইনো কোডিং ম্যাপ() উদাহরণ ২
অধ্যায়
- [00:00] মিলিস() এবং সানফাউন্ডার কিটের পরিচিতি
- [01:19] মিলিস() কী এবং কেন ডেল() এর পরিবর্তে এটি ব্যবহার করবেন?
- [03:06] ব্যবহারিক প্রদর্শন: মিলিস() মান প্রিন্ট করা
- [05:46] মিলিস() এবং আনসাইনড লং দিয়ে একটি ইভেন্ট তৈরি করা
- [08:29] ইনপুট_পুলআপ সহ একটি পুশ বাটন ওয়্যারিং এবং কোডিং
- [10:52] পুশ বাটন দিয়ে ইভেন্ট উদাহরণ চালানো
- [12:14] উদাহরণ ৩ এর পূর্বাভাস: দ্বিতীয় বাটন চাপ সনাক্ত করা
- [17:20] ম্যাপ() ফাংশনের পরিচিতি
- [19:47] এলইডি সহ ম্যাপ() ফাংশন কোডিং এবং প্রদর্শন
/*
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
আপনাকে যা প্রয়োজন হতে পারে
-
অ্যামাজনSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.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