সুচিপত্র:

OLED ডিসপ্লে এবং Arduino এর সাথে মজা: 12 টি ধাপ (ছবি সহ)
OLED ডিসপ্লে এবং Arduino এর সাথে মজা: 12 টি ধাপ (ছবি সহ)

ভিডিও: OLED ডিসপ্লে এবং Arduino এর সাথে মজা: 12 টি ধাপ (ছবি সহ)

ভিডিও: OLED ডিসপ্লে এবং Arduino এর সাথে মজা: 12 টি ধাপ (ছবি সহ)
ভিডিও: ELF/EMBARC Bronchiectasis conference 2023 with subtitles 2024, জুলাই
Anonim
OLED ডিসপ্লে এবং Arduino এর সাথে মজা
OLED ডিসপ্লে এবং Arduino এর সাথে মজা

আমি নিশ্চিত যে আপনি অবশ্যই OLED ডিসপ্লে প্রযুক্তি সম্পর্কে শুনেছেন। এটি অপেক্ষাকৃত নতুন এবং পুরানো এলসিডি প্রযুক্তির চেয়ে উন্নত মানের প্রস্তাব দেয়। এই টিউটোরিয়ালে আমরা বাজারে পাওয়া সবচেয়ে সাধারণ একক রঙের OLED ডিসপ্লে মডিউলগুলিতে ডেটা প্রদর্শনের জন্য প্রয়োজনীয় পদক্ষেপগুলি পর্যালোচনা করতে চাই। আমি এই মডিউলে ডেটা প্রদর্শনের জন্য সংশ্লিষ্ট অ্যাডাফ্রুট লাইব্রেরি দ্বারা প্রদত্ত কার্যকারিতা ব্যাখ্যা করার চেষ্টা করব।

ধাপ 1: আমরা কি OLED মডিউল ব্যবহার করতে যাচ্ছি?

আমরা কোন OLED মডিউল ব্যবহার করতে যাচ্ছি?
আমরা কোন OLED মডিউল ব্যবহার করতে যাচ্ছি?
আমরা কোন OLED মডিউল ব্যবহার করতে যাচ্ছি?
আমরা কোন OLED মডিউল ব্যবহার করতে যাচ্ছি?
আমরা কোন OLED মডিউল ব্যবহার করতে যাচ্ছি?
আমরা কোন OLED মডিউল ব্যবহার করতে যাচ্ছি?

OLED মডিউলগুলি বিভিন্ন আকার এবং বৈশিষ্ট্যগুলিতে উপলব্ধ। এই টিউটোরিয়ালে আমরা যেটি ব্যবহার করতে যাচ্ছি তা হল একটি মনো রঙ 128x64 OLED মডিউল। এই ধরণের মডিউল নিম্নলিখিত আকারে উপলব্ধ (যাতে আপনি ছবিতে দেখতে পান):

  • 128x64
  • 128x32
  • 96x16
  • 64x48
  • 64x32

যেহেতু এই সমস্ত মডিউলগুলি যোগাযোগের মাধ্যম হিসাবে I2C প্রোটোকল সমর্থন করে, তাদের সকলের কোড এবং ওয়্যারিং হুবহু একই। পার্থক্য শুধু এই যে, আপনাকে আপনার কোডের ডিসপ্লের আকার বিবেচনা করতে হবে যাতে আপনি যে বিষয়বস্তু প্রদর্শন করতে যাচ্ছেন, তাতে সঠিকভাবে ফিট হয়ে যায়।

ধাপ 2: সংক্ষেপে I2C

সংক্ষেপে I2C
সংক্ষেপে I2C

ইন্টার-ইন্টিগ্রেটেড সার্কিট (IIC) যাকে সাধারণত I2C (I Squared C) বলা হয় ফিলিপস 80 এর দশকে ডেটা এক্সচেঞ্জ বাস হিসেবে ব্যবহার করেন যা সেন্ট্রাল প্রসেসিং ইউনিট (CPU) বা মাইক্রোকন্ট্রোলার ইউনিট (MCU) এর মধ্যে ডেটা ট্রান্সফার করতে ব্যবহৃত হয় পেরিফেরাল চিপস এটি মূলত টিভি অ্যাপ্লিকেশনের জন্য লক্ষ্য করা হয়েছিল। এর সরলতার কারণে, এটি এত জনপ্রিয় হয়ে ওঠে যে কিছুক্ষণ পরে এটি CPUs এবং MCUs এবং পেরিফেরাল ডিভাইসের জন্য ডেটা ট্রান্সফারের প্রাথমিক প্রক্রিয়াগুলির মধ্যে একটি হয়ে ওঠে যা একই PCB বোর্ডের প্রয়োজনীয় অংশ নয় এবং তারের মাধ্যমে তার সাথে সংযুক্ত থাকে (যেমন সেন্সর, প্রদর্শন মডিউল, ইত্যাদি)।

I2C দুটি তারের তৈরি একটি যোগাযোগ বাস নিয়ে গঠিত যা একটি মাস্টার এবং বেশ কয়েকটি স্লেভ ডিভাইসের মধ্যে দ্বিমুখী ডেটা স্থানান্তরকে সমর্থন করে। সাধারণত মাস্টার নোড বাস নিয়ন্ত্রণের দায়িত্বে থাকে - যা আসলে সিরিয়াল ক্লক লাইনে (এসসিএল) একটি সিঙ্ক্রোনাইজেশন সিগন্যাল তৈরি করে করা হয়। এটি একটি সংকেত যা স্থানান্তরের সময় মাস্টার দ্বারা ক্রমাগত পাঠানো হবে এবং বাসের সাথে সংযুক্ত অন্যান্য সমস্ত নোড তাদের যোগাযোগকে সিঙ্ক করতে এবং বাসের গতি সনাক্ত করতে এটি ব্যবহার করবে। সিরিয়াল ডেটা (এসডিএ) লাইনের মাধ্যমে মাস্টার এবং স্লেভের মধ্যে ডেটা স্থানান্তরিত হয়। ট্রান্সমিশন স্পিড 3.4 Mbps পর্যন্ত হতে পারে। I2C এর মাধ্যমে ডেটা স্থানান্তর করতে চায় এমন সমস্ত ডিভাইসগুলির একটি অনন্য ঠিকানা থাকা উচিত এবং ডিভাইসের কার্যকারিতার উপর নির্ভর করে ট্রান্সমিটার বা রিসিভার হিসাবে কাজ করতে পারে। উদাহরণস্বরূপ একটি OLED ডিসপ্লে মডিউল হল একটি রিসিভার যা কিছু ডেটা গ্রহণ করে এবং তাদের প্রদর্শন করে, যখন একটি তাপমাত্রা সেন্সর একটি ট্রান্সসিভার যা I2C বাসের মাধ্যমে ক্যাপচার করা তাপমাত্রা পাঠায়। সাধারণত একটি মাস্টার ডিভাইস হল সেই যন্ত্র যা বাসে ডাটা ট্রান্সফার শুরু করে এবং ট্রান্সফারের অনুমতি দেওয়ার জন্য ঘড়ি সংকেত তৈরি করে। সেই স্থানান্তরের সময়, এই মাস্টার দ্বারা সম্বোধন করা যে কোনও ডিভাইসকে দাস হিসাবে বিবেচনা করা হয় এবং সেই ডেটা পড়ে।

যখন একটি নোড কিছু ডেটা পাঠাতে চায়, তখন ডেটার প্রথম বাইটটি রিসিভারের ঠিকানা হওয়া উচিত এবং তারপরে প্রকৃত ডেটা পরে আসে। এর মানে হল যে I2C (যেমন I2C OLED ডিসপ্লে মডিউল) ব্যবহার করে একটি আউটপুট ডিভাইসে ডেটা পাঠানোর জন্য আমাদের প্রথমে তার I2C ঠিকানা খুঁজে বের করতে হবে এবং পরবর্তী ধাপে আমরা এটিই করব।

আপনি যদি I2C বাস সম্পর্কে বিস্তারিত এবং তত্ত্ব সম্পর্কে আরও জানতে আগ্রহী হন, তাহলে আপনি নিম্নলিখিত রেফারেন্স ব্যবহার করতে পারেন:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

ধাপ 3: প্রয়োজনীয় মডিউল এবং উপাদান

প্রয়োজনীয় মডিউল এবং উপাদান
প্রয়োজনীয় মডিউল এবং উপাদান
প্রয়োজনীয় মডিউল এবং উপাদান
প্রয়োজনীয় মডিউল এবং উপাদান
প্রয়োজনীয় মডিউল এবং উপাদান
প্রয়োজনীয় মডিউল এবং উপাদান

এই টিউটোরিয়ালটি সম্পূর্ণ করতে আপনার প্রয়োজনীয় উপাদানগুলির তালিকা এখানে পাবেন:

ইবে লিঙ্ক:

  • 1 x Arduino Uno:
  • 1 x OLED মডিউল 128x64:
  • 4 x ডুপন্ট কেবল:
  • 1 x মিনি সোল্ডারলেস ব্রেডবোর্ড:

Amazon.com লিঙ্ক:

  • 1 x Arduino Uno:
  • 1 x OLED মডিউল 128x64:
  • 4 x ডুপন্ট কেবল:
  • 1 x মিনি সোল্ডারলেস ব্রেডবোর্ড:

ধাপ 4: আরডুইনোতে তারের OLED ডিসপ্লে মডিউল

আরডুইনোতে তারের OLED ডিসপ্লে মডিউল
আরডুইনোতে তারের OLED ডিসপ্লে মডিউল
আরডুইনোতে তারের OLED ডিসপ্লে মডিউল
আরডুইনোতে তারের OLED ডিসপ্লে মডিউল
আরডুইনোতে তারের OLED ডিসপ্লে মডিউল
আরডুইনোতে তারের OLED ডিসপ্লে মডিউল
আরডুইনোতে তারের OLED ডিসপ্লে মডিউল
আরডুইনোতে তারের OLED ডিসপ্লে মডিউল

I2C সক্ষম ডিভাইসগুলি সম্পর্কে একটি গুরুত্বপূর্ণ নোট হল যে আপনি যেভাবে তাদের Arduino এর সাথে সংযুক্ত করবেন সেগুলি একই রকম। এর কারণ হল Arduino তার I2C যোগাযোগ শুধুমাত্র নির্দিষ্ট পিনগুলিতে চালায়। এই টিউটোরিয়ালে আমি Arduino Uno ব্যবহার করছি। Arduino Uno পিন A5 SCK হিসাবে এবং A4 SDA হিসাবে ব্যবহার করে। সুতরাং আমরা OLED ডিসপ্লে মডিউলটিকে Arduino Uno এর সাথে সংযুক্ত করতে পারি যেমনটি স্কিম্যাটিক ভিউতে দেখানো হয়েছে। আপনি আমার OLED ডিসপ্লে মডিউল থেকে তোলা ছবিতে লক্ষ্য করতে পারেন, VCC এবং GND এর সংযোগকারীগুলি পরিকল্পিত দৃশ্যের চেয়ে আলাদা। আপনার মডিউলগুলিতে পিনের লেবেলগুলি চেক করতে ভুলবেন না যাতে আপনি এটি সঠিক উপায়ে সংযুক্ত করছেন।

আমাদের কেবল 4 টি পিনের প্রয়োজন যা নীচের মতো সংযুক্ত হওয়া উচিত:

Arduino VCC -> OLED মডিউল VCC

Arduino GND -> OLED মডিউল GND

Arduino 4 -> OLED মডিউল SDA

Arduino 5 -> OLED মডিউল SCK

ধাপ 5: ডিসপ্লে মডিউলের ঠিকানা খোঁজা

ডিসপ্লে মডিউলের ঠিকানা খোঁজা
ডিসপ্লে মডিউলের ঠিকানা খোঁজা

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

আপনি ছবিতে দেখতে পাচ্ছেন, আমার মডিউলটি 0x3C ঠিকানাতে আবদ্ধ। সাধারণত একটি নির্দিষ্ট প্রোডাক্ট লাইনের সকল ডিভাইসের (উদাহরণস্বরূপ সব 128x64 OLED মডিউল) একই ঠিকানা থাকে।

I2C ডিভাইসের অ্যাড্রেস 1 থেকে 126 পর্যন্ত সীমাবদ্ধ। এই কোডটি কেবল প্রতিটি ডিভাইসে ক্রম অনুসারে সংযোগ করার চেষ্টা করে (কোন তথ্য প্রেরণ না করে) এবং তারপর প্রদত্ত ঠিকানায় সংযোগ করার সময় অন্তর্নিহিত লাইব্রেরি দ্বারা কোন ত্রুটি আছে কিনা তা পরীক্ষা করে দেখুন। যদি কোন ত্রুটি না থাকে, তাহলে সংযোগের জন্য একটি উপলব্ধ মডিউল হিসাবে ঠিকানাটি মুদ্রণ করুন। এছাড়াও এটি লক্ষ করা উচিত যে প্রথম 15 টি ঠিকানা সংরক্ষিত, তাই এটি তাদের উপর ঝাঁপিয়ে পড়ে এবং কেবলমাত্র এই পরিসরের উপরে প্রিন্ট করে। মনে রাখবেন যে এই I2C মডিউলগুলির ঠিকানা ডিভাইসে হার্ড-কোডেড এবং এটি পরিবর্তন করা যাবে না। সুতরাং এটি কোথাও লিখা বা মডিউলে একটি লেবেল লাগানো একটি ভাল ধারণা হবে যখন আপনি এটি আপনার ল্যাব শেলফে রাখবেন যাতে পরের বার স্ক্যানার কোড চালানোর প্রয়োজন না হয়। তবে এটি একটি জটিল পদ্ধতি নয়;)

ধাপ 6: OLED মডিউলে ডেটা প্রদর্শনের জন্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করা

OLED মডিউলে ডেটা প্রদর্শনের জন্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
OLED মডিউলে ডেটা প্রদর্শনের জন্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
OLED মডিউলে ডেটা প্রদর্শনের জন্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
OLED মডিউলে ডেটা প্রদর্শনের জন্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করা

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

অ্যাডাফ্রুট, যে কোম্পানি এই ধরনের ডিসপ্লে মডিউলগুলির মূল সংস্করণ তৈরি করে, এই একরঙা ডিসপ্লেগুলিতে ডেটা প্রদর্শনের জন্য অ্যাডাফ্রুট এসএসডি 1306 নামে একটি লাইব্রেরি সরবরাহ করে। সুতরাং কোডিং শুরু করার আগে, আমাদের এই লাইব্রেরিটি লাইব্রেরি ম্যানেজারের মাধ্যমে ইনস্টল করতে হবে (স্কেচের মাধ্যমে অ্যাক্সেসযোগ্য> লাইব্রেরি অন্তর্ভুক্ত করুন> লাইব্রেরি পরিচালনা করুন… মেনু) Arduino IDE তে। অ্যাডাফ্রুট জিএফএক্স লাইব্রেরি নামে আরেকটি লাইব্রেরি রয়েছে যা আরও নিম্ন স্তরের গ্রাফিকাল সামগ্রী পরিচালনা করে এবং অ্যাডাফ্রুট এসএসডি 1306 দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত হয়। আপনি তাদের Arduino IDE তে উভয়ই ইনস্টল করা প্রয়োজন যেমন আপনি ছবিতে দেখতে পারেন।

ধাপ 7: ডিসপ্লে মডিউল শুরু করা

ডিসপ্লে মডিউল শুরু করা
ডিসপ্লে মডিউল শুরু করা

ডিসপ্লে মডিউলে অঙ্কন Adafruit_SSD1306 নামে একটি ক্লাসে আবৃত। এই শ্রেণীর সংজ্ঞা অ্যাডাফ্রুট লাইব্রেরিতে, তাই আমাদের প্রথমে সেই লাইব্রেরি অন্তর্ভুক্ত করতে হবে। তারপরে আমাদের প্রথমে এই শ্রেণীর একটি উদাহরণ ইনস্ট্যান্ট করতে হবে। এই শ্রেণীর কনস্ট্রাক্টর পোর্ট নম্বর নেয় যেখানে ডিসপ্লে রিসেট করা যায় যা পিন 4 (SCK এর সাথে সংযুক্ত)। কোডের এই অংশটি ফাইলের শুরুতে (সেটআপ () এবং লুপ () ফাংশনের বাইরে) থাকা উচিত।

#অন্তর্ভুক্ত

Adafruit_SSD1306 ডিসপ্লে (4);

এখন Setup () ফাংশনের ভিতরে আমাদের নিচের মত আমাদের I2C ঠিকানা দিয়ে ডিসপ্লে অবজেক্টের শুরুর ফাংশনটি কল করা উচিত

অকার্যকর সেটআপ() {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // loop আপাতত খালি থাকতে পারে

এখন ডিসপ্লে অবজেক্ট প্রস্তুত এবং আমরা এর ফাংশনগুলিকে কল করতে পারি (যেমন display.write (), display.drawLine, ইত্যাদি)। গুরুত্বপূর্ণ নোট হল যে যখনই আমরা আমাদের ডিসপ্লে অবজেক্টে কল করে কিছু আঁকতে থাকি, তখন হার্ডওয়্যার লেভেলে প্রকৃত অঙ্কন ঘটানোর জন্য আমাদের display.display () ফাংশনকে কল করতে হবে। এটি মূলত এই কারণে যে আমরা যে অঙ্কন ফাংশনগুলিকে কল করি, কেবলমাত্র পারফরম্যান্সের কারণে ডিসপ্লেটির "ইন মেমরি" প্রতিনিধিত্ব আপডেট করুন। এটি আসলে মেমরির পরিবর্তনগুলি ক্যাশে করে। তাই স্ক্রিনে কিছু আঁকা শেষ করার সময় আমাদের সবসময় ডিসপ্লে () ফাংশনটি কল করা মনে রাখা উচিত।

display.write (…); // মেমরিতে আপডেট করতে থাকে

display.drawLine (…); // মেমরিতে আপডেট করতে থাকে। display.display (); // ডিসপ্লে হার্ডওয়্যারে সমস্ত পরিবর্তন ফ্লাশ করে

আপনি যদি এই ধাপে আপনার কোড আপলোড করার চেষ্টা করেন, আপনি লক্ষ্য করবেন যে Adafruit Industries এর লোগো প্রদর্শিত হবে। আপনি ভাবতে পারেন কে এটিকে আঁকতে বলেছে! আসলে এডাফ্রুট লাইব্রেরি এটাই করে। এটি এই কোম্পানির লোগো দিয়ে মডিউলের স্মৃতি (ডিসপ্লে হার্ডওয়্যারের মেমরি উপস্থাপনা) শুরু করে। যদি আপনি আরম্ভ করার সময় এটি দেখতে না চান, তাহলে আপনি আপনার সেটআপ ফাংশনে display.display () কল করার ঠিক আগে display.clearDisplay () ফাংশন কল করার চেষ্টা করতে পারেন। এই ফাংশন, যেমন তার নাম প্রস্তাব করে, ডিসপ্লেটি সম্পূর্ণরূপে পরিষ্কার করে।

#অন্তর্ভুক্ত

Adafruit_SSD1306 ডিসপ্লে (4); অকার্যকর সেটআপ () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } অকার্যকর লুপ () {}

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

ধাপ 8: একটি সহজ পাঠ প্রদর্শন করুন

একটি সহজ পাঠ প্রদর্শন করুন
একটি সহজ পাঠ প্রদর্শন করুন
একটি সহজ পাঠ প্রদর্শন করুন
একটি সহজ পাঠ প্রদর্শন করুন
একটি সহজ পাঠ প্রদর্শন করুন
একটি সহজ পাঠ প্রদর্শন করুন

একটি পাঠ্য প্রদর্শন করতে, আমরা লাইব্রেরির সাধারণ display.println () ফাংশন ব্যবহার করতে পারি। এটি একটি স্ট্রিং হিসাবে পাঠ্য গ্রহণ করে এবং এটি প্রদর্শন করার চেষ্টা করে। এটা জানা গুরুত্বপূর্ণ যে আমাদের লাইব্রেরি বলতে হবে যেখানে ডিসপ্লেতে আমরা লেখা উপস্থাপন করতে যাচ্ছি। ডিসপ্লের প্রতিটি পিক্সেলের একটি সমন্বয় আছে যা একটি X এবং Y দিয়ে নির্দিষ্ট করা আছে। X বাম থেকে ডানে বৃদ্ধি পায় এবং Y উপরে থেকে নীচে বৃদ্ধি পায়। পর্দার উপরের বাম কোণটি (X = 0, Y = 0) এবং নিচের ডান কোণটি (X = 127, Y = 63)। আমি প্রথম ছবিতে কোণগুলির স্থানাঙ্ক লক্ষ করেছি। ডিসপ্লেতে আমরা কোথায় টেক্সট প্রদর্শন করতে যাচ্ছি তা নির্দিষ্ট করতে আমরা display.setCursor () ফাংশন ব্যবহার করতে পারি।

পাঠ্যের আরেকটি বৈশিষ্ট্য হল এর রঙ। আমরা নিম্নলিখিত নমুনায় প্রদর্শিত display.setTextColor () ব্যবহার করে রঙ নির্দিষ্ট করতে পারি।

display.clearDisplay ();

display.setTextColor (সাদা); display.setCursor (35, 30); display.println ("হ্যালো ওয়ার্ল্ড!"); display.display ();

আমরা একক অক্ষর প্রদর্শন করতে display.write () ফাংশন ব্যবহার করতে পারি। এটি একটি uint8_t টাইপ হিসাবে একটি অক্ষর কোড গ্রহণ করে এবং স্ট্রিংয়ে সেই কোডের সাথে সম্পর্কিত অক্ষর প্রদর্শন করে। উদাহরণস্বরূপ, যদি আমরা এই ফাংশনটি ব্যবহার করে একই স্ট্রিং প্রদর্শন করতে চাই, তাহলে আমরা নিম্নলিখিত স্নিপেট ব্যবহার করতে পারি:

display.clearDisplay ();

display.setTextColor (সাদা); display.setCursor (35, 30); display.write (72); display.write (101); display.write (108); display.write (108); display.write (111); display.write (32); display.write (87); display.write (111); display.write (114); display.write (108); display.write (100); display.write (33); display.display ();

সাদা পটভূমি সহ কালো রঙে লেখা আঁকাও সম্ভব। এটি করার জন্য, আপনাকে নিচের মত display.setTextColor ফাংশনে কল করতে হবে:

display.clearDisplay ();

// একটি সাদা পটভূমি display.setTextColor (কালো, সাদা) সঙ্গে রঙ কালো সেট করে; display.setCursor (25, 30); display.println ("উল্টানো টেক্সট!"); display.display ();

আপনি display.setTextSize () ফাংশন ব্যবহার করে পাঠ্যের আকার নির্ধারণের বিকল্পও পাবেন। এটি একটি আকার হিসাবে একটি পূর্ণসংখ্যা সংখ্যা গ্রহণ করে। সংখ্যা যত বড় হবে, পাঠ্য তত বড় হবে। ক্ষুদ্রতম আকার হল 1 যা পাঠ্যগুলির ডিফল্ট আকার। নিম্নলিখিত কোডটি 6 টি ভিন্ন আকারে "A" অক্ষর লেখার চেষ্টা করে:

display.clearDisplay ();

display.setTextColor (সাদা); display.setCursor (0, 0); display.setTextSize (1); display.print ("A"); display.setTextSize (2); display.print ("A"); display.setTextSize (3); display.print ("A"); display.setTextSize (4); display.print ("A"); display.setTextSize (5); display.print ("A"); display.setTextSize (6); display.print ("A"); display.display ();

ধাপ 9: মৌলিক আকার আঁকা

মৌলিক আকার অঙ্কন
মৌলিক আকার অঙ্কন
মৌলিক আকার অঙ্কন
মৌলিক আকার অঙ্কন
মৌলিক আকার অঙ্কন
মৌলিক আকার অঙ্কন

আয়তক্ষেত্র, বৃত্ত, ত্রিভুজ, রেখা বা বিন্দুর মতো মৌলিক আকার আঁকা খুব সহজ এবং প্রত্যেকটির জন্য একটি নিবেদিত ফাংশন রয়েছে।

রেখা অঙ্কন

একটি লাইন আঁকতে আপনি display.drawLine (startX, startY, endX, endY, color) কল করতে পারেন। উদাহরণস্বরূপ নিম্নলিখিত কোডটি স্ক্রিনে একটি তির্যক রেখা আঁকে যাতে তারা একটি বড় X আকৃতি দেয়:

display.clearDisplay ();

display.drawLine (0, 0, display.width () - 1, display.height () - 1, WHITE); display.drawLine (display.width () - 1, 0, 0, display.height () - 1, WHITE); display.display ();

আপনি display.width () এবং display.height () ফাংশন ব্যবহার করে ডিসপ্লের প্রস্থ এবং উচ্চতা অ্যাক্সেস করতে পারেন। এতে করে আপনার কোডটি পর্দার আকার থেকে স্বাধীন হবে।

আয়তক্ষেত্র আঁকা

একটি আয়তক্ষেত্র আঁকার কাজ হল display.drawRect (upperLeftX, upperLeftY, প্রস্থ, উচ্চতা, রঙ)। এখানে কোডটি কিছু এলোমেলো জায়গায় তিনটি আয়তক্ষেত্র আঁকে:

display.clearDisplay ();

display.drawRect (100, 10, 20, 20, WHITE); display.fillRect (10, 10, 45, 15, সাদা); display.drawRoundRect (60, 20, 35, 35, 8, সাদা); display.display ();

Display.fillRect (upperLeftX, upperLeftY, প্রস্থ, উচ্চতা, WHITE) কল করে আপনি নির্দিষ্ট রঙ দ্বারা ভরা একটি আয়তক্ষেত্র আঁকতে পারেন। এছাড়াও এই উদাহরণে তৃতীয় ফাংশন হল display.drawRoundRect (upperLeftX, upperLeftY, width, height, cornerRadius, color) যেটা আপনি ছবিতে দেখতে পাচ্ছেন গোলাকার কোণ দিয়ে আয়তক্ষেত্র আঁকার জন্য। এটি রঙের আগে একটি অতিরিক্ত প্যারামিটার গ্রহণ করে যা একটি পূর্ণসংখ্যা সংখ্যা যা কোণার ব্যাসার্ধ নির্দেশ করে। কোণার গোলাকার রাউন্ডার যত বড় হবে। এটিতে display.drawFillRoundRect নামে একটি সংশ্লিষ্ট ফিল ফাংশন রয়েছে যা আমি মনে করি আপনি অনুমান করতে পারেন এটি কি করে।

অঙ্কন বৃত্ত

ফাংশন display.drawCircle (centerX, centerY, radius, color)। এখানে একটি উদাহরণ যা একটি স্মাইলির মতো আকৃতি আঁকছে:

display.drawCircle (60, 30, 30, সাদা);

display.fillCircle (50, 20, 5, WHITE); display.fillCircle (70, 20, 5, WHITE);

আয়তক্ষেত্রের মতো, আপনি প্রদত্ত রঙে ভরা বৃত্ত আঁকতে display.fillCircle ফাংশন ব্যবহার করতে পারেন।

ত্রিভুজ আঁকা

আহ, আবার একটি ফাংশন যার নাম display.drawTriangle (point1X, point1Y, point2X, point2Y, point3X, point3Y, color) এবং সংশ্লিষ্ট display.fillTriangle যা একটি ভরাট ত্রিভুজ আঁকে।

display.drawTriangle (24, 1, 3, 55, 45, 55, সাদা);

display.fillTriangle (104, 62, 125, 9, 83, 9, WHITE);

একটি বিন্দু আঁকুন

আপনি display.drawPixel (pixelX, pixelY, color) ফাংশনের মাধ্যমে স্ক্রিনে একটি নির্দিষ্ট বিন্দু (যাকে পিক্সেল বলা হয়) রঙ করতে পারেন।

display.drawPixel (20, 35, সাদা);

display.drawPixel (45, 12, সাদা); display.drawPixel (120, 59, সাদা); display.drawPixel (97, 20, সাদা); display.drawPixel (35, 36, সাদা); display.drawPixel (72, 19, সাদা); display.drawPixel (90, 7, সাদা); display.drawPixel (11, 29, সাদা); display.drawPixel (57, 42, সাদা); display.drawPixel (69, 34, সাদা); display.drawPixel (108, 12, সাদা);

ধাপ 10: ছবি আঁকা

ছবি আঁকা
ছবি আঁকা
ছবি আঁকা
ছবি আঁকা

একটি ছবি আঁকা ভিন্ন এবং একটু জটিল। যেহেতু ডিসপ্লে মডিউলটি মনোকোলার, তাই প্রথমে আমাদের ইমেজটিকে মনো কালার বিটম্যাপ (কালো এবং সাদা নামেও পরিচিত) ফরম্যাটে রূপান্তর করতে হবে। এই ধরনের বিন্যাসে, ছবির প্রতিটি পিক্সেল 0 অথবা 1 দিয়ে উপস্থাপন করা হয়। আপনি এই বিভাগের উপরে এই বিন্যাসে Arduino লোগোর একটি উদাহরণ দেখতে পারেন। একটি বিটম্যাপ ইমেজ আঁকার কাজ হল display.drawBitmap (topLeftX, topLeftY, imageData, প্রস্থ, উচ্চতা, রঙ)। ImageData প্যারামিটার হল বাইটে সংখ্যার একটি অ্যারে। প্রতিটি বাইটে 8 টি বিট থাকে, তাই প্রতিটি বাইটে ছবির pixels পিক্সেলের ডেটা থাকে। চিত্রের প্রস্থ এবং উচ্চতা উল্লেখ করে, ড্র বিটম্যাপ ফাংশনটি জানবে যে পিক্সেলের পরবর্তী সারি কোন বিট থেকে শুরু হয়।

আমার ছবিটিকে এই ফরম্যাটে রূপান্তর করার জন্য আমি যে সমাধানটি বেছে নিয়েছিলাম তা হল প্রথমে আমার ছবিটিকে ASCII অক্ষরের একটি সেটে রূপান্তর করার জন্য অনলাইন "ইমেজ থেকে ASCII কনভার্টার" (যেমন https://my.asciiart.club) ব্যবহার করা। খালি জায়গার জন্য ব্যবহৃত অক্ষর 0 এবং অন্যান্য 1 দ্বারা। আপনি ডিসপ্লেতে প্রতিটি 0 এবং 1 কে পিক্সেল হিসাবে ভাবতে পারেন। তাই ছবির আকার আমাদের ডিসপ্লে সাইজের চেয়ে বেশি হওয়া উচিত নয় যা 128x64।

দ্রষ্টব্য: এই ASCII কৌশলটি ব্যবহার করা একটি প্রস্তাবিত পদ্ধতি নয় কারণ অক্ষরগুলির অনুপাতের কারণে আপনার চিত্র বিকৃত হবে (অক্ষরগুলি একটি বর্গ নয়)। আমি এই কৌশলটি চেষ্টা করেছি কারণ এটি ছবিটিকে প্রয়োজনীয় বিন্যাসে রূপান্তর করা সহজ করে তোলে। অন্যথায় কিছু প্রোগ্রামিং বা কিছু ইউটিলিটি অ্যাপ্লিকেশন ব্যবহার করে সেরা ফলাফল অর্জন করা সম্ভব হবে যা এই পাঠ্যের আওতার বাইরে।

00000000000000000000011111111111111111111110000000000000000000000000000000000000011111111111111111111111111111100000000000000000 0000000000000111111111111111111111111111111111111110000000000000 0000000000011111111111111111111111111111111111111111100000000000 0000000001111111111111111111111111111111111111111111111000000000 0000000111111111111111111111111111111111111111111111111110000000 0000011111111111111111111111111111111111111111111111111111100000 0000111111111111111111111111111111111111111111111111111111110000 0001111111111111111111111111111111111111111111111111111111111000 0011111111111111111111111111111111111111111111111111111111111100 0111111111111111000000011111111111111111100000001111111111111110 0111111111110000000000000001111111111000000000000000111111111110 1111111111000000001111000000001111000000001111000000001111111111 1111111110000011111111111100000110000011111111111100000111111111 1111111100000111111111111111000000001111111001111110000011111111 1111111100001111100000011111100000011111100000011111000011111111 1111111100001111100000011111100000011111100000011111000011111111 1111111100000111111111111111000000001111111001111110000011111111 1111111110000011111111111100000110000011111111111100000111111111 1111111111000000001111000000001111000000001111100000001111111111 0111111111110000000000000000111111110000000000000000111111111110 0111111111111111000000001111111111111111000000001111111111111110 0011111111111111111111111111111111111111111111111111111111111100 0001111111111111111111111111111111111111111111111111111111111000 0000111111111111111111111111111111111111111111111111111111110000 0000011111111111111111111111111111111111111111111111111111100000 0000000111111111111111111111111111111111111111111111111110000000 0000000011111111111111111111111111111111111111111111111100000000 0000000000011111111111111111111111111111111111111111100000000000 0000000000000111111111111111111111111111111111111110000000000000 0000000000000000111111111111111111111111111111110000000000000000 0000000000000000000001111111111111111111111000000000000000000000

এখন আমাদের প্রতিটি লাইনকে 8 দ্বারা ভাগ করা উচিত, একটি বাইটের প্রতিনিধিত্ব করে এবং সেগুলি নীচে একটি অ্যারেতে সংরক্ষণ করা উচিত:

স্ট্যাটিক const স্বাক্ষরবিহীন চর প্রোগ্রাম arduino_logo = {

B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B11111111, B11111111, B11111110, B00000000, B000000, তারপর আমরা drawBitmap ফাংশন কল করে এটি প্রদর্শন করতে পারি।

display.drawBitmap (32, 16, arduino_logo, 64, 32, WHITE);

ধাপ 11: সমস্যা সমাধান

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

কিছুই মোটেও প্রদর্শিত হচ্ছে না

এটি অনেক কারণের জন্য ঘটতে পারে তাই আমি নিম্নলিখিত তালিকাটি পরীক্ষা করার পরামর্শ দিচ্ছি যা আপনার প্রকল্পে ঘটতে পারে:

I2C ঠিকানা সম্ভবত ভুল

আপনার ডিসপ্লে অবজেক্ট সেট করার সময় নিশ্চিত করুন যে আপনি আইডিসি-স্ক্যানার কোডটিতে যে ঠিকানা পেয়েছেন তা display.begin () ফাংশনে সেট করেছেন।

এসসিএল এবং এসডিএ ভুল উপায়ে সংযুক্ত

এটা আসলে আমার জন্য ঘটেছে। আপনি যদি Arduino Uno ব্যবহার করেন তাহলে আপনাকে আবার আপনার সংযোগগুলি পরীক্ষা করতে হবে তা নিশ্চিত করতে যে তারা আমার সাথে একইভাবে সংযুক্ত। আপনি যদি অন্য Arduino সংস্করণ (যেমন মেগা, লিওনার্দো, ইত্যাদি) ব্যবহার করছেন, তাহলে আপনাকে জানতে হবে যে তাদের I2C অন্যান্য পিনগুলিতে সেট করা থাকতে পারে। আপনি ওয়্যার লাইব্রেরির ডকুমেন্টেশনে এটি পরীক্ষা করতে পারেন।

আপনি দৃশ্যমান এলাকা থেকে কিছু আঁকছেন

এটি একটি সফটওয়্যার সমস্যা। কিছু সমন্বয়কে ভুল গণনা করার জন্য একটি অঙ্কন ফাংশন ব্যবহার করার সময় এটি খুব সাধারণ এবং তাই আপনার অঙ্কন বিকৃত হবে বা সবচেয়ে খারাপ পরিস্থিতিতে এটি দৃশ্যের বাইরে হতে পারে। আপনার গণনা পর্যালোচনা করুন এবং কি ঘটছে তা দেখতে ধাপে ধাপে অঙ্কন করার চেষ্টা করুন।

লেখা আদৌ প্রদর্শিত হচ্ছে না

আপনি পাঠ্যের রঙ সেট করতে ভুলে গেছেন অথবা আপনি এটি একটি ভুল মান নির্ধারণ করেছেন

টেক্সট আঁকার আগে আপনাকে setTextColor এ কল করতে হবে। অন্যথায় আপনার কোন ত্রুটি নেই, কিন্তু আপনি প্রদর্শনে কিছুই দেখতে পাবেন না। এছাড়াও আপনি হয়তো টেক্সট কালারকে ব্যাকগ্রাউন্ড কালারের মতো সেট করেছেন।

আপনি খুব বড় ফন্ট ব্যবহার করছেন

আপনি যদি টেক্সটের আকারকে খুব বড় মান নির্ধারণ করেন, তাহলে এটা সম্ভব যে অক্ষরগুলি দৃশ্যমান এলাকা থেকে সম্পূর্ণরূপে বেরিয়ে যাবে।

ডিসপ্লে সাইজ সম্পর্কে একটি কম্পাইল ত্রুটি আছে

এটি আমার জন্যও ঘটেছে এবং আমি মনে করি এটি আপনার বেশিরভাগের জন্যই হবে। এটি প্রদর্শন আকারের ধ্রুবক মানগুলির কারণে যা হেডার ফাইলের ভিতরে সংজ্ঞায়িত করা হয় Adafruit_SSD1306.h যা আমরা আমাদের স্ক্রিপ্টের উপরে অন্তর্ভুক্ত করি। এই ফাইলটি {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h এ অবস্থিত। আপনি যদি এই ফাইলটি খুলেন তবে আপনি লক্ষ্য করবেন যে নীচের মত একটি মন্তব্য বিভাগ রয়েছে যেখানে এটি বর্ণনা করে যে আপনাকে কেবলমাত্র ধ্রুবককে অস্বীকার করতে হবে যা আপনার OLED ডিসপ্লে মডিউল আকারের প্রতিনিধিত্ব করে। 128x64 ডিসপ্লে মডিউলের জন্য, লাইন #define SSD1306_128_64 অসম্পূর্ণ হওয়া উচিত।

/*=====================================================================

SSD1306 প্রদর্শন ------------------------------------------------ ---------------------- ড্রাইভার একাধিক ডিসপ্লেতে ব্যবহার করা হয় (128x64, 128x32, ইত্যাদি)। যথাযথ আকারের ফ্রেমবফার ইত্যাদি তৈরি করতে নিচের উপযুক্ত ডিসপ্লে নির্বাচন করুন। --------------------------------------------* / #SSD1306_128_64 / / #সংজ্ঞায়িত SSD1306_128_32 // #SSD1306_96_16 /*= সংজ্ঞায়িত করুন ===================================**

ধাপ 12: এরপর কি করতে হবে?

আউটপুট মডিউল হিসেবে OLED ডিসপ্লে আপনাকে আপনার শখের প্রজেক্টগুলোতে প্রফেশনাল লুকিং ইন্টারফেস প্রদান করার দারুণ সুযোগ দিতে পারে। আপনি এর উপর একটি অর্থপূর্ণ ডেটা প্রদর্শনের জন্য একটি সূচনা বিন্দু হিসাবে ধারনাগুলি অনুসরণ করার চেষ্টা করতে পারেন অথবা ব্যবহারকারীকে জানতে সাহায্য করতে পারেন যে কি ঘটছে বা যদি তার কিছু করার প্রয়োজন হয়। একটি ব্যবহারকারীর জন্য কিছু LEDs এর মাধ্যমে একটি প্রকল্প/ডিভাইসের অবস্থা ব্যাখ্যা করার চেয়ে একটি ডিসপ্লেতে একটি বার্তা পড়া অনেক স্পষ্ট হবে।

প্রারম্ভিক বিন্দু হিসাবে আপনি যা করতে পারেন তা হতে পারে:

  • একটি তাপমাত্রা সেন্সর মান পড়ুন এবং এটি OLED মডিউলে প্রদর্শন করুন। আপনি এটিতে চাপ বা আর্দ্রতা সেন্সর যুক্ত করতে পারেন এবং একটি সম্পূর্ণ কার্যকরী আবহাওয়া স্টেশন প্রকল্প তৈরি করতে পারেন।
  • ইনপুট ডিভাইস হিসেবে জয়স্টিক মডিউল ব্যবহার করে ডিসপ্লে মডিউলে কিছু আঁকার চেষ্টা করুন।
  • অঙ্কন/বিলম্বিত ফাংশন কল বা Arduino বিঘ্ন একটি ক্রম দ্বারা প্রদর্শন উপর একটি অ্যানিমেশন আঁকা চেষ্টা করুন
  • আপনার সিস্টেম স্টার্টআপে আপনার কাস্টম লোগো প্রদর্শন করুন (অ্যাডাফ্রুট লোগোর পরিবর্তে)

OLED ডিসপ্লে মডিউল ব্যবহার করে আপনি কি করবেন (অথবা আপনি ইতিমধ্যে সম্পন্ন করেছেন) মন্তব্যগুলিতে আমাকে বলতে ভুলবেন না।

প্রস্তাবিত: