একটি আরডুইনো প্রোগ্রামে সমান্তরাল কার্য (থ্রেডস) কীভাবে সম্পাদন করবেন

সুচিপত্র:

একটি আরডুইনো প্রোগ্রামে সমান্তরাল কার্য (থ্রেডস) কীভাবে সম্পাদন করবেন
একটি আরডুইনো প্রোগ্রামে সমান্তরাল কার্য (থ্রেডস) কীভাবে সম্পাদন করবেন

ভিডিও: একটি আরডুইনো প্রোগ্রামে সমান্তরাল কার্য (থ্রেডস) কীভাবে সম্পাদন করবেন

ভিডিও: একটি আরডুইনো প্রোগ্রামে সমান্তরাল কার্য (থ্রেডস) কীভাবে সম্পাদন করবেন
ভিডিও: Arduino practice আরডুইনো হাতে খড়ি-১ 2024, নভেম্বর
Anonim

মাইক্রোপ্রসেসর প্রযুক্তিতে, সমান্তরালভাবে চলমান কার্যগুলিকে থ্রেডস বলা হয়। এটি খুব সুবিধাজনক, কারণ একই সময়ে বেশ কয়েকটি অপারেশন করা প্রায়শই প্রয়োজন। সত্যই প্রসেসরের মতো আরডুইনো মাইক্রোকন্ট্রোলার একসাথে বেশ কয়েকটি কাজ সম্পাদন করা কি সম্ভব? দেখা যাক.

একটি আরডুইনো প্রোগ্রামে সমান্তরাল স্ট্রিম
একটি আরডুইনো প্রোগ্রামে সমান্তরাল স্ট্রিম

এটা জরুরি

  • - আরডুইনো;
  • - 1 এলইডি;
  • - 1 পাইজো বুজার

নির্দেশনা

ধাপ 1

সাধারণত বললে, আরডুইনো সত্যিকারের সমান্তরালতা বা মাল্টিথ্রেডিং সমর্থন করে না।

তবে আপনি "লুপ ()" চক্রের প্রতিটি পুনরাবৃত্তিতে কিছু অতিরিক্ত, ব্যাকগ্রাউন্ড টাস্ক কার্যকর করার সময় এসেছে কিনা তা পরীক্ষা করতে মাইক্রোকন্ট্রোলারকে বলতে পারেন। এক্ষেত্রে ব্যবহারকারীর কাছে মনে হবে যে এক সাথে বেশ কয়েকটি কাজ সম্পাদিত হচ্ছে।

উদাহরণস্বরূপ, আসুন একটি নির্দিষ্ট ফ্রিকোয়েন্সিতে একটি এলইডি ঝলকান এবং সমান্তরালভাবে, শব্দগুলি নির্গত হয় যা পাইজোলেক্ট্রিক ইমিটার থেকে সাইরেনের মতো উত্থিত হয় এবং পড়ে যায়।

আমরা আরডুইনোর সাথে এলইডি এবং পাইজো ইমিটার উভয়কে একাধিকবার সংযুক্ত করেছি। চিত্রটিতে প্রদর্শিত হিসাবে সার্কিট একত্রিত করা যাক। আপনি যদি "13" ব্যতীত কোনও এলইডি ডিজিটাল পিনের সাথে সংযুক্ত করছেন তবে মনে রাখবেন যে বর্তমানের 220 ওহমের সীমিত প্রতিরোধক রয়েছে।

বুজারের জন্য ওয়্যারিং ডায়াগ্রাম এবং আরডুইনো থেকে এলইডি
বুজারের জন্য ওয়্যারিং ডায়াগ্রাম এবং আরডুইনো থেকে এলইডি

ধাপ ২

আসুন এর মতো একটি স্কেচ লিখুন এবং এটি আরডিনোতে আপলোড করুন।

বোর্ডটি লোড করার পরে, আপনি দেখতে পাচ্ছেন যে স্কেচটি ঠিক যেমনটি আমাদের প্রয়োজন ঠিক তেমনভাবে সম্পাদিত হয় না: যতক্ষণ না সাইরেন পুরোপুরি চালু হয়, ততক্ষণ এলইডি জ্বলজ্বল করে না, এবং আমরা সাইরেন সাউন্ডিংয়ের সময় এলইডি জ্বলজ্বল করতে চাই। এখানে কি সমস্যা?

আসল বিষয়টি হ'ল এই সমস্যাটি সাধারণ উপায়ে সমাধান করা যায় না। কাজগুলি যথাযথভাবে মাইক্রোকন্ট্রোলার দ্বারা সম্পাদিত হয়। "বিলম্ব ()" অপারেটর একটি নির্দিষ্ট সময়ের জন্য প্রোগ্রামটির সঞ্চালনায় বিলম্ব করে এবং এই সময় শেষ না হওয়া অবধি নিম্নলিখিত প্রোগ্রামের আদেশগুলি কার্যকর করা হবে না। এর কারণে, আমরা প্রোগ্রামের "লুপ ()" এ প্রতিটি কাজের জন্য একটি পৃথক কার্যকর সময়কাল নির্ধারণ করতে পারি না।

অতএব, আপনাকে কোনওভাবে মাল্টিটাস্কিং অনুকরণ করতে হবে।

সিরিজে বিপার এবং এলইডি নিয়ন্ত্রণ
সিরিজে বিপার এবং এলইডি নিয়ন্ত্রণ

ধাপ 3

আরডুইনো সিউডো সমান্তরালে যে অপশনটিতে কার্য সম্পাদন করবে সেটির জন্য আরডুইনো বিকাশকারীরা https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay নিবন্ধে পরামর্শ দিয়েছেন।

পদ্ধতির সারমর্মটি হ'ল "লুপ ()" লুপের প্রতিটি পুনরাবৃত্তির সাথে, আমরা পরীক্ষা করে দেখি যে এলইডি জ্বলানোর সময় (ব্যাকগ্রাউন্ড টাস্ক সম্পাদন করার) সময় এসেছে কি না। এবং যদি এটি হয়, তবে আমরা এলইডিটির রাজ্যটি উল্টে দেব। এটি "বিলম্ব ()" অপারেটরকে বাইপাস করার এক ধরণের।

এই পদ্ধতির একটি উল্লেখযোগ্য অসুবিধা হ'ল এলইডি কন্ট্রোল ইউনিটের সামনের কোড বিভাগটি "নেতৃত্বাধীন আন্তর্জাতিক" এলইডি এর জ্বলজ্বলে সময়ের ব্যবধানের চেয়ে দ্রুত সম্পাদন করতে হবে। অন্যথায়, ঝলকানি প্রয়োজনের তুলনায় কম ঘন ঘন ঘটবে এবং আমরা কার্যগুলি সমান্তরাল সম্পাদনের প্রভাব পাব না। বিশেষত, আমাদের স্কেচে সাইরেন শব্দ পরিবর্তনের সময়কাল 200 + 200 + 200 + 200 = 800 এমসিসি, এবং আমরা LED জ্বলজ্বল ব্যবধান 200 এমসিতে সেট করেছিলাম। তবে এলইডি 800 ম্যাস্কের সময়ের সাথে ফ্ল্যাশ করবে, যা আমরা যা সেট করি তার থেকে 4 গুণ আলাদা। সাধারণভাবে, যদি "বিলম্ব ()" অপারেটর কোডটিতে ব্যবহৃত হয়, তবে সিউডো-প্যারালালিজম অনুকরণ করা কঠিন, সুতরাং এটি এড়াতে পরামর্শ দেওয়া হবে।

এই ক্ষেত্রে, সাইরেন সাউন্ড কন্ট্রোল ইউনিটের জন্য সময় এসে গেছে কিনা এবং "বিলম্ব ()" ব্যবহার না করাও তা পরীক্ষা করা প্রয়োজন। তবে এতে কোডের পরিমাণ বাড়বে এবং প্রোগ্রামের পঠনযোগ্যতা খারাপ হবে।

বিলম্ব না করে LED জ্বলজ্বলে () অপারেটর
বিলম্ব না করে LED জ্বলজ্বলে () অপারেটর

পদক্ষেপ 4

এই সমস্যাটি সমাধান করার জন্য, আমরা দুর্দান্ত আর্দুইনো ট্র্যাড লাইব্রেরি ব্যবহার করব, যা আপনাকে সহজেই সিউডো-সমান্তরাল প্রক্রিয়া তৈরি করতে দেয়। এটি একইভাবে কাজ করে, তবে সময়টি যাচাই করার জন্য আপনাকে কোডটি লেখার অনুমতি দেয় না - আপনাকে এই লুপে টাস্কটি কার্যকর করতে হবে কিনা তাও। এটি কোডের পরিমাণ হ্রাস করে এবং স্কেচের পাঠ্যতা উন্নত করে। কর্মক্ষেত্রে গ্রন্থাগারটি চেক আউট করা যাক।

প্রথমত, অফিসিয়াল সাইট https://github.com/ivanseidel/ArdinoThread/archive/master.zip থেকে লাইব্রেরির সংরক্ষণাগারটি ডাউনলোড করুন এবং এটি আরডিনো আইডিইর "লাইব্রেরি" ডিরেক্টরিতে আনজিপ করুন। তারপরে "আরডুইনো ট্র্যাড-মাস্টার" ফোল্ডারের নাম পরিবর্তন করে "আরডিনোথ্রেড" করুন।

আরডুইনো ট্র্যাড লাইব্রেরি ইনস্টল করা হচ্ছে
আরডুইনো ট্র্যাড লাইব্রেরি ইনস্টল করা হচ্ছে

পদক্ষেপ 5

সংযোগ চিত্রটি একই থাকবে। কেবলমাত্র প্রোগ্রামের কোডটি পরিবর্তন হবে। এখন এটি সাইডবারের মতোই হবে।

প্রোগ্রামে, আমরা দুটি স্ট্রিম তৈরি করি, প্রত্যেকে নিজস্ব ক্রিয়াকলাপ সম্পাদন করে: একটি এলইডি দিয়ে ঝলকায়, দ্বিতীয়টি সাইরেনের শব্দ নিয়ন্ত্রণ করে। লুপের প্রতিটি পুনরাবৃত্তিতে প্রতিটি থ্রেডের জন্য, আমরা পরীক্ষা করে দেখি যে এটি কার্যকর হওয়ার সময় এসেছে কিনা। যদি এটি আসে, এটি "রান ()" পদ্ধতিটি ব্যবহার করে মৃত্যুদন্ড কার্যকর করার জন্য চালু করা হয়। মূল জিনিসটি "বিলম্ব ()" অপারেটরটি ব্যবহার না করা।

কোডে আরও বিস্তারিত ব্যাখ্যা দেওয়া আছে।

কোডটি আরডিনো মেমোরিতে লোড করা যাক, এটি চালান। এখন সবকিছু ঠিক যেমন করা উচিত ঠিক তেমন কাজ করে!

প্রস্তাবিত: