মাল্টিপ্লেক্সিং
আরডুইনো দিয়ে সেভেন সিগমেন্ট ডিসপ্লে অপারেট করা আপনারা শিখে গেছেন। তবে শুধুমাত্র এক ডিজিটের ডিসপ্লে। এবার একাধিক ডিজিটের ডিসপ্লে নিয়ে কাজ করা শিখবেন। সিঙ্গেল ডিজিটের মেথডেই যদি একাধিক ডিজিটের ডিসপ্লে ব্যবহার করতে চান তবে একটি বড় ধরনের সমস্যার সম্মুখীন হবেন। আরডুইনো UNO তে (০-১৩) মাত্র ১৪ টি আউটপুট পিন রয়েছে। ধরুন আপনি ৪ ডিজিটের ডিসপ্লে ব্যবহার করবেন তাহলে আপনার আউটপুট পিন প্রয়োজন (৪*৭) বা ২৮ টি। কিন্তু এতগুলো পিন আপনি কোথায় পাবেন। এই অসম্ভবকে সম্ভব করার জন্য জলিল কাকা যেই মেথডটি প্রণয়ন করেছেন সেটিই হলো মাল্টিপ্লেক্সিং।
এই অসম্ভবকে সম্ভব করার জন্য জলিল কাকা যেই মেথডটি প্রণয়ন করেছেন সেটিই হলো মাল্টিপ্লেক্সিং। উপরের চিত্রের মত করে প্রতিটি ডিসপ্লের Common Cathode পিনটি ব্যতিরেকে বাকি অনুরূপ পিনগুলো পরস্পরের সঙ্গে যুক্ত করতে হয় মাল্টিপ্লেক্সিং পদ্ধতিতে। উপরের চিত্রে দেখুন কত সহজেই ২৮ টি পিনকে ৭ টি পিনে রূপান্তর করা হয়েছে।
আগের চিত্রটি ছিল একাধিক ডিজিট বিশিষ্ট ডিসপ্লের অন্তর্গঠন। আর এটি হলো বাহ্যিকরূপ। ধরুন আপনি ডিসপ্লেটিতে 19 প্রদর্শন করতে চান। এবার আরো একটি সমস্যার সম্মুখীন হবেন এবং সমস্যাটির সমাধান করতে পারলে আবারো নতুন একটি সমস্যার সম্মুখীন হবেন। তবে সেটিরও সমাধান শিখিয়ে দেয়া হবে।
প্রথম সমস্যা: দুইটি ডিজিট এর সাতটি (a,b,c,d,e,f,g) পিন যেহেতু একই সেহেতু 1 এর জন্য কমান্ড দিলে দুই ডিজিটেই আবার 9 এর জন্য কমান্ড দিলেও দুইটি ডিসপ্লেতেই তা প্রদর্শন করবে। তাহলে 19 প্রদর্শন করবেন কিভাবে? সমাধান: যখন 1 এর জন্য কমান্ড দিবেন তখন যদি বাম পাশের ডিজিটের Cathode পিনটি HIGH করে দেন তাহলে শুধুমাত্র বাম পাশের ডিজিটে 1 প্রদর্শন করবে। অনুরূপভাবে 9 প্রদর্শনের সময় ডান ডিজিটের Cathode পিনকে HIGH করে রাখুন।
দ্বিতীয় সমস্যা: একবার 1 এবং একবার 9 প্রদর্শিত হলো কিন্তু 19 তো প্রদর্শিত হলো না। সমাধান: আমাদের চোখের দর্শনাভুতির স্থায়িত্বকাল হলো ০.১ সেকেন্ড অর্থাৎ একটি জিনিস দেখার ০.১ সেকেন্ডের মধ্যে যদি আরেকটি জিনিস দেখা হয় তবে আমাদের ব্রেইন দুটি জিনিসকে একই জিনিস ভাবে। বুঝতেই পারছেন এবারের সমস্যাটির সমাধান আমরা ব্রেইনকে ধোকা দেয়ার মাধ্যমে করব। 1 কে এক মিলি সেকেন্ড প্রদর্শন করে, 1 কে আবার এক মিলি সেকেন্ড প্রদর্শন করব। আমাদের চোখ ডিজিট দুটিকে একত্রে ১৯ দেখবে।
চলুন দুই ডিজিটের একটি ডিসপ্লে দিয়ে (0-99) একটি কাউন্টার ক্সতরির মধ্য দিয়ে ব্যপারটি আরো সহজ করে শেখা যাক।
চিত্রের মত করে কম্পোনেন্ট গুলো সাজিয়ে নিচের প্রোগ্রাম লোড করুন।
প্রোগ্রামঃ
int digit[10][7] = {
{1,1,1,1,1,1,0},
{0,1,1,0,0,0,0},
{1,1,0,1,1,0,1},
{1,1,1,1,0,0,1},
{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},
{1,0,1,1,1,1,1},
{1,1,1,0,0,1,0},
{1,1,1,1,1,1,1},
{1,1,1,1,0,1,1},
};
int count;
int x;
int number;
int y;
void setup()
{
for(x=2;x<9;x++)
{ pinMode(x, OUTPUT); }
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
}
void loop()
{
for(number=0;number<100;number++)
{
for(y=0;y<100;y++)
{
digitalWrite(1, LOW);
for(count=0;count<7;count++)
{
digitalWrite(count+2, digit[number/10][count]);
}
delay(20);
digitalWrite(1, HIGH);
digitalWrite(0, LOW);
for(count=0;count<7;count++)
{
digitalWrite(count+2, digit[number%10][count]);
}
delay(20);
digitalWrite(0, HIGH);
}
}
}
প্রোগ্রামটি শেখা যাকঃ
void setup() ফাংশনের মধ্যে আগে থেকে Cathode পিন দুটিকে HIGH করে দেয়া হয়েছে। number/20 অর্থ হলো সংখ্যাটির দশক স্থানীয় অঙ্ক। কেননা ভাগফল পূর্ণ সংখ্যা হবে। number%10 অর্থ সংখ্যাটির একক স্থানীয় অঙ্ক। এছাড়া বাকি কাজগুলো পূর্বেই শিখেছেন।
**বংলায় আরডুইনো নিয়ে লেখা প্রথম বই "আরডুইনো হাতেখড়ি" -র একটি lesson এটি। এমন সহজ ভাষায় Arduino শিখতে বইটি সংগ্রহ করুন। বিস্তারিত: bit.ly/ArduinoHatekhori