همیشه در همه پروژهها نمایشگر برای نشان دادن اطلاعات خروجی نیاز هست. با پیشرفت علم الکترونیک، امروزه نمایشگرها با هر ابعادی قابلیت تولید را دارند. در ادامه پروژه راه اندازی نمایشگرهای OLED ، در این اموزش راه اندازی OLED Full Color با ارتباط پروتکلی SPI و آردوینو فراهم شده است. این نمایشگر OLED می تواند هر رنگی را به خوبی تولید کند! همچنین این نمایشگر گرافیکی بوده و توانایی نمایش انواع اشکال و متون را دارد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
ماژول OLED Full Color با درایور SSD1331
نمایشگر OLED از جذابترین نمایشگرها برای بردهای میکروکنترلر است. ماژول OLED نوعی نمایشگر با خاصیت ارایه نور اورگانیک را دارند. کارکردن با ماژول OLED بسیار جذاب و پر مصرف میباشد. ماژول OLED فول کالر ۰٫۹۵ اینچ دارای ابعاد ۹۶*۶۴۰ است. ابعاد برد ۳۰mm x 27mm می باشد. این ماژول دارای ۷ پایه است. ولتاژ کاری آن ۳٫۳V تا ۵V بوده و همانند دیگر OLED ها بسیار کم مصرف است به صورتی که در زمان حداکثر استفاده ( تمام پیکسل ها روشن باشند!) فقط ۲۵mA جریان می کشد. پروتکل راه اندازی این ماژول SPI است. پروتکل SPI برای ارتباط بین دو یا چند دستگاه استفاده می شود. در این نوع ارتباط یک دستگاه به عنوان Master و دستگاه های دیگر به عنوان Slave شناخته می شوند. دستگاه های Master که عموما یک میکروکنترلر هستند وظیفه کنترل ارتباط و دیتای منتقل شده را دارد در حالی که Slave ها که معمولا انواع سنسورها، نمایشگرها هستند از Master دستور می گیرند. در ماژول OLED Full Color با درایور SSD1331 ، تولید کنند به اشتباه پایه ها را نام گذاری کرده است و از استاندارد پروتکل I2C استفاده کرده است. در واقع پایه SCL در ماژول همان CLK ، پایه SDA ماژول همان MOSI ، پایه RES همان RST می باشد ، در این ماژول خبری از پایه MISO نمی باشد زیرا این ماژول هیچ اطلاعاتی را به میکروکنترل (آردوینو) بر نمی گرداند بنابراین اصلا نیازی به پایه MISO نمی باشد و بقیه پایه ها به درستی نام گذاری شده اند.
اتصالات ماژول OLED Full Color با درایور SSD1331 به آردوینو
- پایه GND را به پایه GND آردوینو Arduino اتصال دهید.
- پایه VCC را به پایه ۵V یا ۳٫۳V آردوینو Arduino اتصال دهید.
- پایه SCL یا CLK را به پایه ۱۳ دیجیتال آردوینو Arduino اتصال دهید.
- پایه SDA یا MOSI را به پایه ۱۱ دیجیتال آردوینو Arduino اتصال دهید.
- پایه RES یا RST را به پایه ۹ دیجیتال آردوینو Arduino اتصال دهید.
- پایه DC را به پایه ۸ دیجیتال آردوینو Arduino اتصال دهید.
- پایه CS را به پایه ۱۰ دیجیتال آردوینو Arduino اتصال دهید.
کتابخانه آردوینو Arduino
قبل از آپلود کد راه انداز ماژول OLED Full Color ، بایستی کتابخانههای مورد نیاز ماژول OLED را در نرم افزار آردوینو نصب کنید. چنانچه روش نصب کتابخانه را نمیدانید به پست آموزش نصب کتابخانه در آردوینو مراجعه کنید. در ادامه لیست کتابخانههای مورد استفاده در این آموزش به همراه لینک دانلود آنها قرار داده شده است.
کتابخانه Adafruit GFX
از این کتابخانه جهت دسترسی به تابع های بیشتر برای ایجاد اشکال مختلف استفاده شده است . جهت دانلود کتابخانه، به Adafruit GFX مراجعه کنید.
کتابخانه Adafruit SSD1331 OLED
این کتابخانه برای راه اندازی و ارتباط با OLED هایی که دارای درایور SSD1331 ایجاد شده است. جهت دانلود کتابخانه ، به Adafruit SSD1331 OLED مراجعه کنید.
کتابخانه SPI
پروتکل ارتباطی در ماژول OLED Full Color با درایور SSD1331 ، پروتکل SPI است که این کتابخانه به صورت پیشفرض در لیست کتابخانه های نرم افزار آردوینو Arduino قرار دارد. پس از اضافه کردن کتابخانه ها در برنامه ادیتور آردوینو ، کد تست راه اندازی ماژول OLED ssd1331 Full Color را بر روی برد UNO پروگرام کنید.
/// IN GOD WE TRUST /* This is a example sketch demonstrating the graphics capabilities of the SSD1331 library for the 0.96" ۱۶-bit Color OLED with SSD1331 driver chip ->*Digispark web site * Copyright © ۲۰۲۰ Digispark website. All rights reserved. ----------> http://www.digispark.ir Market : https://daneshjookit.com/ Mr.s.sd -------------------------------------------------------- These displays use SPI to communicate, 4 or 5 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution */ #include <Adafruit_GFX.h> //اضافه کردن کتابخانه برای دسترسی به دستورات بیشتر #include <Adafruit_SSD1331.h>//اضافه کردن کتابخانه مخصوص ماژول OLED FULL COLOR ssd1331 #include <SPI.h>//اضافه کردن کتابخانه پروتکل SPI جهت بر قرار ارتباط با ماژول //معرفی پایه های نیاز برای راه اندازی ماژول و دسترسی راحت تر #define sclk 13 #define mosi 11 #define cs 10 #define rst 9 #define dc 8 //تعریف یک سری کد رنگ ها جهت استفاده در کد #define BLACK 0x0000 //تعریف رنگ سیاه #define BLUE 0x001F //تعریف رنگ آبی #define RED 0xF800 //تعریف رنگ قرمز #define GREEN 0x07E0 //تعریف رنگ سبز #define CYAN 0x07FF //تعریف رنگ آبی آسمانی #define MAGENTA 0xF81F //تعریف رنگ بنفش روشن #define YELLOW 0xFFE0 //تعریف رنگ زرد #define WHITE 0xFFFF//تعریف رنگ سفید #define dark_yellow 0x8484 //تعریف رنگ خردلی //آدرس دهی پایه ها متصل به ماژول به کتابخانه درایور و اسم گذاری ماژول متصل به این پایه ها Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, rst); //تعریف یک متغیر کارکتر جهت ذخیر bitMap آرم دیجی اسپارک static const unsigned char digispark []PROGMEM = { //creat bitmap by satyar in digispark //width = 89 px/in //height = 24 px/in ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x01, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xfe, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x01, 0x00, 0x00, 0x07, 0xc1, 0xbf, 0x1f, 0x84, 0x00, 0x06, 0x00, 0x00, 0x01, 0x80, 0x00, ۰x07, 0xce, 0x1f, 0x99, 0xe4, 0x01, 0x9f, 0x80, 0x00, 0x01, 0x80, 0x00, 0x07, 0xcc, 0x39, 0x98, ۰x60, 0x00, 0x18, 0x82, 0x0c, 0x01, 0x80, 0x00, 0x07, 0xc8, 0x31, 0x98, 0x34, 0x7d, 0xb0, 0x1f, ۰x1e, 0x3d, 0xb0, 0x00, 0x07, 0xc3, 0x01, 0x98, 0x34, 0xcd, 0x9c, 0x19, 0x83, 0x31, 0xa0, 0x00, ۰x07, 0xcf, 0x03, 0x98, 0x34, 0x8d, 0x9f, 0x10, 0x83, 0x21, 0xc0, 0x00, 0x07, 0x8f, 0x7f, 0x98, ۰x34, 0x8d, 0x83, 0x90, 0x9f, 0x21, 0xc0, 0x00, 0x07, 0xcf, 0x9f, 0x98, 0x24, 0x8d, 0x80, 0x91, ۰xb3, 0x21, 0xa0, 0x00, 0x03, 0xc0, 0x3f, 0x18, 0xe4, 0xfd, 0xb1, 0x99, 0xb3, 0x21, 0xb0, 0x00, ۰x03, 0xff, 0xff, 0x1f, 0x84, 0x3d, 0x9f, 0x9f, 0x1f, 0x21, 0x98, 0x00, 0x01, 0xff, 0xfe, 0x00, ۰x00, 0x0c, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0x78, 0x00, 0x10, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x70, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const unsigned char Emoji []PROGMEM = { //creat bitmap by satyar in digispark //width = 96 px/in //height = 64 px/in ۰xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, ۰xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, ۰xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, ۰xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, ۰xe0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, ۰xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, ۰xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, ۰x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, ۰x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, ۰xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, ۰xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, ۰xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, ۰xff, 0xfc, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf8, 0x00, 0x01, ۰xfc, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x7f, ۰xc0, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xff, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x0f, 0xff, ۰xff, 0xf0, 0x00, 0x07, 0xff, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x07, ۰xff, 0x80, 0x01, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x07, 0xff, 0x80, 0x01, 0xff, ۰xe0, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x07, 0xff, 0x80, 0x01, 0xff, 0xe0, 0x00, 0x07, 0xff, ۰xff, 0xe0, 0x00, 0x07, 0xff, 0x80, 0x01, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00, 0x07, ۰xff, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0x00, 0x00, 0xff, ۰xc0, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x03, 0xff, ۰xff, 0xc0, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, ۰x78, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, ۰xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, ۰xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x18, ۰x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, ۰x7c, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xff, ۰xfe, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x3f, ۰xc0, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x07, ۰xf8, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x7f, ۰xfe, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x07, ۰xff, 0x80, 0x01, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x03, 0xff, 0xfc, 0x1f, 0xff, ۰xc0, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x7f, ۰xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, ۰x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, ۰x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x7f, ۰xfe, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, ۰x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, ۰x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff }; //انجام تنظیمات اولیه و اجرای برخی دستور void setup() { display.begin(); // فعال سازی کتابخانه ماژول display.fillScreen(BLACK); // دستور تابعی برای تعیین رنگ پس زمینه | رنگ انتخابی سیاه //دستورات نمایش آرم دیجی اسپارک /* bitmap دستور تابعی نمایش به رنگ دلخواه و مشخص کردن مکان نمایش {توضیح نحوه کارکرد این دستور در ادامه مطلب در دیجی اسپارک} */ display.drawBitmap(0, 20, digispark, 89, 24, CYAN); delay(2000); display.fillScreen(GREEN); display.drawBitmap(0, 20, digispark, 89, 24, CYAN); delay(700); display.fillScreen(MAGENTA); display.drawBitmap(0, 20, digispark, 89, 24, CYAN); delay(700); display.fillScreen(YELLOW); display.drawBitmap(0, 20, digispark, 89, 24, CYAN); delay(700); display.fillScreen(WHITE); display.drawBitmap(0, 20, digispark, 89, 24, CYAN); delay(700); display.fillScreen(BLUE); display.drawBitmap(0, 20, digispark, 89, 24, CYAN); delay(700); display.fillScreen(RED); display.drawBitmap(0, 20, digispark, 89, 24, CYAN); display.fillScreen(BLACK); lcdTestPattern(); // تابع ساخته شده برای تست رنگ ها| دستورات تابع در اخر کد delay(3000); testlines(); //تابع ساخته شده برای تست دستورات کشیدن خط | دستورات تابع در اخر کد delay(1000); display.fillScreen(BLACK); display.drawLine(5, 0, 5,display.height()-1, GREEN); //دستور کشیدن خط (توضیحات کارکرد در ادامه مطلب در دیجی اسپارک) display.drawLine(6, 0, 6,display.height()-1, GREEN); display.drawLine(0, 6, display.width()-1,6, RED); display.drawLine(0, 5, display.width()-1,5, RED); display.setCursor(20,20); //تنظیم کردن نشانگر در موقعیت مورد نظر از صفحه display.setTextColor(RED); //دستور تنظیم رنگ نوشته display.setTextSize(2); //تنظیم کردن سایز نوشته display.print(display.width()); //دستور پریت(چاپ) (توضیحات کارکرد در ادامه مطلب در دیجی اسپارک) display.setCursor(45,20); display.setTextColor(WHITE); display.setTextSize(2); display.print("*"); display.setCursor(60,20); display.setTextColor(GREEN); display.setTextSize(2); display.print(display.height()); display.setCursor(30,45); display.setTextColor(BLUE); display.setTextSize(2); display.print("in/px"); delay(4000); display.fillScreen(BLACK); display.drawBitmap(0, 0, Emoji, 96, 64, YELLOW); delay(4000); display.fillScreen(BLACK); } void loop() { display.drawBitmap(0, 0, digispark, 89, 24, CYAN); display.setCursor(20,40); display.setTextColor(RED); display.setTextSize(3); display.print("R"); delay(100); display.setTextColor(GREEN); display.print("G"); delay(100); display.setTextColor(BLUE); display.print("B"); delay(1700); display.fillRect(20,40, 18,22, RED); //دستور کشیدن مستطیل تو پر (توضیحات کارکرد در ادامه مطلب دیجی اسپارک) delay(100); display.fillRect(38,40, 18,22, GREEN); delay(100); display.fillRect(55,40, 18,22, BLUE); delay(1000); display.fillRect(20,40, 18,22, BLACK); delay(100); display.fillRect(38,40, 18,22, BLACK); delay(100); display.fillRect(55,40, 18,22, BLACK); delay(1000); for(int8_t x = 0 ; x < 89 ; x++){ display.fillRect(x,0, 2, 24, BLACK); delay(20); } delay(1500); } void testlines(void) { display.fillScreen(BLACK); for (int16_t x=0; x < display.width()-1; x+=6) { display.drawLine(0, 0, x, display.height()-1, GREEN); delay(100); } for (int16_t y=0; y < display.height()-1; y+=6) { display.drawLine(0, 0, display.width()-1, y, RED); delay(100); } display.fillScreen(BLACK); for (int16_t x=0; x < display.width()-1; x+=6) { display.drawLine(0, 0, x, display.height()-1, BLUE); delay(100); } for (int16_t y=0; y < display.height()-1; y+=6) { display.drawLine(0, 0, display.width()-1, y, MAGENTA); delay(100); } } void lcdTestPattern(void) { uint8_t w,h; display.setAddrWindow(0, 0, 96, 64); for (h = 0; h < 64; h++) { for (w = 0; w < 96; w++) { if (w > 83) { display.writePixel(w, h, WHITE); //دستور برای روشن کردن پیکسل ها به اندازه و رنگ دلخواه } else if (w > 71) { display.writePixel(w, h, BLUE); } else if (w > 59) { display.writePixel(w, h, GREEN); } else if (w > 47) { display.writePixel(w, h, CYAN); } else if (w > 35) { display.writePixel(w, h, RED); } else if (w > 23) { display.writePixel(w, h, MAGENTA); } else if (w > 11) { display.writePixel(w, h, YELLOW); } else { display.writePixel(w, h, BLACK); } } } display.endWrite(); }
تحلیل دستورات OLED Full Color
اسم گذاری و معرفی پایهها به کتابخانه
از دستور زیر برای مشخص کردن پایه های ماژول متصل به برد و تعیین یک اسم یکتا برای ماژول استفاده می شود. در دستور زیر به جای کلمه display می توانید به زبان لاتین نام دیگری برای ماژول بگذارید در این صورت شما می توانید چند OLED را به برد متصل کنید و با نام گذاری انها به صورت جداگانه برای هرکدام دستور ارسال کنید . برای معرفی پایه ها نیز باید به جای cs , dc,res شمار پایه متصل را بگذارید.
Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, rst);
تعیین رنگ BlackGrand
از دستور زیر برای تعیین رنگ پس زمینه استفاده می شود به طوری که در پرانتز با گذاشتن کد رنگی با حالت Hex پس زمینه به رنگ دلخواه در می آید ، همچنین از این دستور با رنگ مشکی برای پاک کردن (Clear) صفحه نمایش نیز استفاده می شود.
display.fillScreen(کد رنگ);
کشیدن bitmap
دستورات زیادی برای نمایش bitmap هست . bitmap به یک دسته کد HEX گفته می شود که زمانی آنها را در OLED رسم می کنیم شکل مورد نظر صورت می گیرد. برای تبدیل تصویر به Bitmap و نمایش ان ابتدا باید مراحل زیر را انجام دهید :
۱- تبدیل لوگو به اندازه OLED
ماژول oled Full Color ssd1331 ابعاد ۹۶*۶۴ دارد بنابراین باید قبل از تبدیل به bitmap ، به اندازه مساوی یا کمتر از ابعاد OLED تبدیل شود . برای تبدیل لوگو به ابعاد مورد نظر ، می توانید از نرم افزار فتوشاپ استفاده کنید:
۲- تبدیل به BitMap
برای تبدیل لوگو مورد نظر به BitMap ، راه های مختلفی وجود دارد ولی بهترین روش این کار استفاده از سایت های تبدیل کننده است . بنابراین ابتدا سایت رو به رو را باز کنید : BitMap Converter و مراحل زیر را طی کنید :
۳- نمایش BitMap
بعد از تبدیل عکس به Bitmap از دستور زیر اقدام به نمایش ان کنید . در دستور زیر ، به جای X و Y باید مختصاتی که قرار است رسم از ان شروع شود بگذارید ، به جای Val نام متغیری که Bitmap را در ان ذخیره کردید قرار دهید ، به جای W و H ، عرض و طول عکس را قرار دهید همچنین در اخر به جای Color کد رنگی که می خواهید BitMap با ان رسم شود قرار دهید.
display.drawBitmap(x, y, Val , W, H, Color);
نمایش متن در OLED Full Color
برای نمایش متن دلخواه ، ابتدا باید مکان چاپ ، سایز متن و رنگ ان مشخص شود سپس ان را چاپ کنید.
۱- تنظیم مکان اسکرول
برای تنظیم مکان اسکرول از دستور زیر می توانید استفاده کنید . X و Y با توجه به مختصات مورد نظر تنظیم کنید.
display.setCursor(X,Y);
۲- تنظیم اندازه فونت
برای تنظیم اندازه فونت از دستور زیر استفاده کنید . به جای S عددی بین ۱ تا ۵ را قرار دهید. (توجه کنید این اندازه فونت ، متناسب با فونت پیش فرض کتابخانه است .)
display.setTextSize(S);
۳- تنظیم رنگ متن
برای تنظیم رنگ متن به جای Color کد رنگی با فرمت HeX بگذارید.
display.setTextColor(Color);
۴- چاپ متن
برای چاپ متن از دستور زیر استفاده کنید
display.print("Text");
کشیدن خط
برای کشیدن خط از دستور زیر می توان استفاده کرد به طوری که این دستور خطی با توجه به دو نقطه داده شده از ان خط ، رسم می کنم . در دستور زیر به جای X1 و Y1 مختصات نقطه شروع خط (یعنی مختصاتی که خط از ان رسم شود . ) ؛ به جای X2 و Y2 مختصات نقطه دوم از ان خط را قرار دهید همچنین در قسمت Color کد رنگی به فرمت Hex قرار دهید یا اسم کد رنگ های از پیش تعریف شده در اول کد راه انداز ماژول استفاده کنید.
display.drawLine(X1, Y1, X2,Y2, Color);
کشیدن مستطیل
برای کشیدن مستطیل از دستور زیر استفاده کنید . در دستور زیر به جای x و y مختصات مکانی که مستطیل از ان رسم شود وارد کنید و طول مستطیل را در w و عرض مورد نظر را در H وارد کنید همچنین به جای Color کد رنگی به فرمت Hex قرار دهید یا اسم کد رنگ های از پیش تعریف شده در اول کد راه انداز ماژول استفاده کنید.
display.fillRect(x,y, W,H,Color);
وسایل مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
خیلی آموزش کامل و خوبی بود من خیلی دنبال نمایش bitmap بودم
خوشحالم که مفید بوده براتون
سلام و خسته نباشید
تفاوت کتابخانه ssd1331 با ssd1306 در چیست؟
درود
OLED ها برای راه اندازی با درایور های مختلفی ساخته می شوند از این رو دستورات راه اندازی ان ها متفاوت هست لذا برای هر درایور موجود در بازار ، کتابخانه ای ساخته شده که برای ان درایور بهینه شده است .
در هنگام خرید OLED حتما به نوع درایور ان توجه کنید .
مثال ssd1331 و ssd1306 دو درایور مختلف برای OLED ها هستند لذا در هنگام راه اندازی این دو OLED باید برای هر کدام کتابخانه مخصوص ان را استفاده کرد.
موفق باشید !