Email : info@brosk.ir

Tel : 08736233889 - 09016741124

U8g2 کتابخانه ای برای هر نوع نمایشگر

آموزش کتابخانه U8g2

کتابخانه U8g2 به طور کامل یعنی شامل هردو حالت C و C++ آن در این لینک قرار دارند که می توانید آن را دانلود کیند . در برخی از IDE ها نیازی به دانلود مستقیم از گیت هاب نیست و می توانید از طریق IDE هم دانلود و نصب کتابخانه را انجام دهید . در برخی مواقع لازم است شما فایل های کتابخانه را مستقیم دانلود و آن را به برنامه خود اضافه کنید .

برای نصب U8g2 در آردوینو IDE به صورت زیر باید عمل کنید :

ابتدا به مسیرSketch->Include Library->Manage Libraries رفته و بعد از باز شدن پنجره کتابخانه ها ، U8g2 را جستوجو و در نهایت دکمه نصب را بزنید .

مراحل دانلود U8g2 در آردوینو IDE
مرحله اول رفتن به Manage Libraries
مرحله دوم دانلود U8g2 در آردوینو IDE
مرحله دوم دانلود U8g2 در آردوینو IDE

پس از انجام مراحل فوق کتابخانه دانلود و به لیست کتابخانه های آردوینو IDE شما افزوده شده خواهد شد .

برای نصب در PlatformIO نیز به همان صورت است . اما در IDE هایی که امکان نصب و دانلود از گیت هاب را ندارند شما باید مستقیما کتابخانه را از لینک گیت هاب دانلود و در کنار پروژ خود قرار دهید .

هدر های لازم

برای استفاده از U8g2 باید قبل از هر کاری فایل U8g2lib.h را به برنامه خود وارد کنید . در این فایل کلیه هدر های لازم برای استفاده از U8g2 فراخوانی شده اند . این فایل را با دستور زیر در ابتدای برنامه خود وارد کنید :

#include "U8g2lib.h" // Include U8g2
void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

پیکربندی اولیه

در کتابخانه U8g2 برای هر مدل نمایشگر و در هر حالتی از راه اندازی ، یک کلاس تعریف شده است . شما می توانید لیست این کلاس ها را در لینک زیر مشاهده کنید . پس از پیدا کردن کلاس مربوط به نمایشگر و نیز نوع راه اندازی آن ، ابتدا باید یک شی از کلاس مورد نظر بسازید . بسته به کلاسی که مورد استفاده قرار می دهید ممکن است لازم باشد پارامتر هایی همچون پین های ارتباطی را به سازنده شی ارسال کنید . به طور مثال ما می خواهیم یک نمایشگر OLED سایز 128X64 با درایور SSD1306 را از طریق I2C راه اندازی کنیم ، پس در لیست مورد نظر به دنبال کلاس مناسب می گردیم . در نهایت برای نمایشگر ما کلاس زیر تعریف شده است :

u8g2-SSD1306
u8g2-SSD1306

چون نمایشگر مورد استفاده ما یک OLED SSD1306 128X64 بدون برند خاص با ارتباط I2C است پس کلاس راه اندازی آن به صورت تصویر فوق شد . در کلاس های درج شده در لینک قبلی هر کلاس بسته به نوع راه اندازی و… ممکن است که چند پارامتر را به صورت اجباری یا اختیاری لازم داشته باشد. مثلا در کلاس مورد استفاده ما اگر به داخل پرانتز نگاه کنید متوجه می شوید که این کلاس باید یک پارامتر با عنوان rotation جهت انتخاب جهت تصویر بگیرد . پارامتر های دیگری که در داخل “[]” نشان داده شده اند یعنی اجباری نیستند و می توان آن ها را وارد نکرد . پس بعد از فرا خوانی کتابخانه باید یک شی از کلاس انتخاب شده بسازیم :

#include "U8g2lib.h" // Include U8g2


U8G2_SSD1306_128X64_NONAME_F_HW_I2C my_oled(U8G2_R0, U8X8_PIN_NONE); //My class


void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

قبل از تابع اصلی ( تابع main یا تابع setup در آردوینو ) باید شی خود را بسازیم . اسم این شی اختیاری است که ما در اینجا از my_oled استفاده کرده ایم . در نهایت برای اجرای تمامی متد های کتابخانه U8g2 از این شی استفاده می کنیم .

متد .begin()

این متد کار پیکر بندی را انجام می دهد و باید قبل از هر متد دیگری این متد را در تابع اصلی فراخوانی کنیم . اگر این متد فرا خوانی نشود نمایشگر راه اندازی نخواهد شد :

#include "U8g2lib.h" // Include U8g2


U8G2_SSD1306_128X64_NONAME_F_HW_I2C my_oled(U8G2_R0, U8X8_PIN_NONE); //My class


void setup() {
 my_oled.begin(); //Begin

}

void loop() {
  // put your main code here, to run repeatedly:

}

متد sendBuffer() :

ساختار کتابخانه U8g2 به گونه ای است که بخشی از حافظه میکروکنترلر را به عنوان بافر در نظر می گیرد . هر متد نمایشی را که اجرا کنیم در واقع در داخل این بافر نوشته ایم و برای نمایش آن بر روی نمایشگر باید دیتای این بافر را به نمایشگر ارسال کنیم . متد sendBuffer() این کار را انجام می دهد . در ادامه کاربرد این متد را خواهید دید :

my_oled.sendBuffer();

متد clearBuffer() :

my_oled.clearBuffer();

این متد بافر را به کلی پاک می کند . قبل از نوشتن هر چیزی در بافر باید آن را با استفاده از این متد پاک سازی کرد :

متد های رسم شکل

به طور کلی برای رسم هر شکل و تصویری می توان دیتای مربوط به آن را به صورت bitmap بر روی نمایشگر نمایش داد . این راه کار با اینکه ساده است اما می تواند حجم زیادی از حافظه و منابع را درگیر کند . در کتابخانه U8g2 متد هایی برای رسم اشکال هندسی وجود دارند که به راحتی با استفاده از ورودی هایی همچون موقعیت و اندازه می توانید اشکال هندسی مختلف را رسم کنید . این کار سرعت اجرای برنامه و نمایش تصویر را بسیار بالا می برد . در اینجا به تعداد از این متد ها خواهیم پرداخت .

متد drowBox() :

این متد در ابتدا مقادیر مربوط به موقعیت و سپس ابعاد را به آن می گیرد تا در موقعیت مشخص شده یک مستطیل با ابعاد وارد شده رسم کند .

void U8G2::drawBox(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h)

x موقعیت نقطه x بر روی نمایشگر است

y موقعیت نقطه y بر روی نمایشگر است

w عرض مستطیل

h ارتفاع مستطیل

مثال :

#include "U8g2lib.h" // Include U8g2


U8G2_SSD1306_128X64_NONAME_F_HW_I2C my_oled(U8G2_R0, U8X8_PIN_NONE); //My class


void setup() {
 my_oled.begin(); //Begin
my_oled.clearBuffer();
my_oled.drawBox(3,7,25,15);
my_oled.sendBuffer;
}

void loop() {


}

در کد فوق در تابع setup از متد رسم استفاده شده است ، این برای یک بار رسم شدن شکل بر روی نمایشگر است .

نتیجه کد فوق به صورت زیر است :

متد drawCircle() :

این متد نیز همانند متد قبل یک موقعیت و یک مقدار میگرد و در نهایت بر اساس آن یک دایره را رسم می کند . فرم آن به صورت زیر است :

void U8G2::drawCircle(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt = U8G2_DRAW_ALL)

x0 نقطه x مرکز دایره است

y0 نقطه y مرکز دایره می باشد

rad شعاع دایره می باشد

opt شکل دایره رسم شده را مشخص می کند که دارای پنج حالت زیر است :

  • U8G2_DRAW_UPPER_RIGHT ربع بالا راست دایره را رسم می کند
  • U8G2_DRAW_UPPER_LEFT ربع بالا چپ را رسم می کند
  • U8G2_DRAW_LOWER_LEFT ربع پایین چپ دایره را رسم می کند
  • U8G2_DRAW_LOWER_RIGHT ربع پایین راست را رسم می کند
  • U8G2_DRAW_ALL دایره را به صورت کامل رسم می کند

مثال :

include "U8g2lib.h" // Include U8g2
U8G2_SSD1306_128X64_NONAME_F_HW_I2C my_oled(U8G2_R0, U8X8_PIN_NONE); //My class

void setup() {
my_oled.begin(); //Begin
my_oled.clearBuffer();
u8g2.drawCircle(20, 25, 10, U8G2_DRAW_ALL);
my_oled.sendBuffer;
}

void loop() {

}

خروجی کد های فوق به صورت زیر است

متد drawCircle() :

از این متد برای رسم خط استفاده می شود . این متد دو موقعیت می گیرد ، موقعیت اول نقطه شروع خط و موقعیت دوم مربوط به نقطه انتهای خط است .

void U8G2::drawLine(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t x1, u8g2_uint_t y1)

x0 همان x نقطه شروع خط است

y0 همان y نقطه شروع خط است

x1 همان x نقطه پایان خط است

y1 همان y نقطه پایان خط است

مثال :

include "U8g2lib.h" // Include U8g2
U8G2_SSD1306_128X64_NONAME_F_HW_I2C my_oled(U8G2_R0, U8X8_PIN_NONE); //My class

void setup() {
my_oled.begin(); //Begin
my_oled.clearBuffer();
u8g2.drawLine(20, 5, 5, 32);
my_oled.sendBuffer;
}

void loop() {

}

خروجی کد های بالا به صورت زیر است :

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Set your categories menu in Header builder -> Mobile -> Mobile menu element -> Show/Hide -> Choose menu
سبد خرید فروشگاه
شروع به تایپ کنید برای نوشته‌های که به‌دنبال آن هستید.
0
    0
    سبد خرید شما
    سبد خرید شما خالی می باشدبرگشت به فروشگاه
    صفحه اصلی
    حساب کاربری من
    وبلاگ