آردوینو, پروژه آردوینو

آموزش راه اندازی نمایشگر Nokia 5110 با آردوینو

آموزش راه اندازی نمایشگر Nokia 5110 با آردوینو

به دوران پیش از آیفون‌ها فکر کنید که در آن زمان فقط می‌توانستیم صفحه نمایش LCD را لمس و آن را تمیز کنیم. در آن موقع، گوشی‌های نوکیا 3310 و نوکیا 5110 از این نمایشگرها بهره می‌بردند. حالا و پس از پیشرفت تکنولوژی، این صفحه نمایش‌ها وارد پروژه‌های دانشجویی مانند پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو شده‌اند. این LCDها خیلی سریع مورد استقبال دانشجویان قرار گرفتند زیرا هم کوچک و ارزان هستند، هم کاربری آسانی دارند و هم انرژی کمی مصرف می‌کنند و می‌توانند متن‌های دلخواه ما را نشان دهند.

فهرست مطالب

لوازم مورد نیاز برای پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

نگاهی به سخت‌افزارهای موجود در پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

درایور LCD PCD8544

در دل این ماژول، یک کنترلر درایور قدرتمند و کم مصرف از نوع LCD CMOS وجود دارد که تنها به یک چیپ مجهز است.

PCD8544 از پروتکل ارتباطی سریال شبیه SPI بهره می‌برد تا بتواند با میکروکنترلرها ارتباط برقرار نماید و به شکلی طراحی شده تا یک نمایشگر 48×84 پیکسلی راه‌اندازی کند.

LCD دارای چیپ و ارائه‌دهنده ولتاژ معکوس که در درایور نامبرده وجود دارند، آن را برای استفاده در پروژه‌های حساس به انرژی ایده‌آل می‌کنند. این صفحه نمایش معمولاً 6 تا 7 میلی‌آمپر جریان مصرف خواهد کرد.

آن‌طور که در دیتاشیت آمده، چیپ این درایور با ولتاژ 2.7 تا 3.3 ولت سازگار است و دارای سطح ارتباطی 3 ولتی می‌باشد. بر این اساس، به منظور وصل کردن آن به یک میکروکنترلر 5 ولتی منطقی مانند آردوینو، می‌بایست برخی از فرآیندهای خاص صورت پذیرند.

بک‌لایت LCD

این LCD یک بک‌لایت دارد که در چهار رنگ قرمز، سبز، آبی و سفید در دسترس قرار گرفته است.

بک‌لایت از چهار LED جای گرفته در دورتادور لبه‌های نمایشگر تشکیل شده است. برای تغییر بک‌لایت، LCD را با فشار دادن گیره های فلزی موجود در پشت جدا کنید. با این کار متوجه چهار LED لحیم شده در لبه‌های نمایشگر خواهید شد. شما می‌توانید به جای این LEDها، LEDهای دلخواه خود را قرار دهید.

نقشه حافظه نمایشگر LCD نوکیا 5110

درایور PCD8544 یک رم 504 بایتی Graphic Display Data RAM یا GDDRAM دارد که هر آنچه که باید در نمایشگر پخش شود را ذخیره می‌کند. این قسمتِ حافظه‌ای به 6 بخش (از 0 تا 5) تقسیم می‌شود که هر کدام از آنها 84 ستون یا قسمت (از 0 تا 83) دارند. هر کدام از ستون‌ها هم می‌توانند 8 بیت داده (از 0 تا 7) را ذخیره کنند. این عملیات نشان‌دهنده وجود فرمول زیر است:

6 ذخیره‌کننده × 84 قسمت × 8 بیت داده = 4032 بیت = 504 بایت

تمامی قسمت‌های حافظه‌ای این نمایشگر که شامل ذخیره‌کننده، قسمت‌ها و داده‌ها می‌شوند، در تصویر زیر قابل مشاهده هستند.

نقشه حافظه نمایشگر LCD نوکیا 5110
نقشه حافظه نمایشگر LCD نوکیا 5110

هر بیت نشان‌دهنده یک پیکسل OLED در نمایشگری است که می‌تواند طبق فرمول‌های برنامه‌نویسی، خاموش و روشن شود.

مشخصات فنی نمایشگر Nokia 5110

تکنولوژی صفحه نمایش

LCD دات ماتریکس

پروتکل ارتباطی MCU

SPI

سایز صفحه نمایش

1.5 اینچ

رزولوشن

48×84 پیکسل

ولتاژ کاری

2.7 تا 3.3 ولت

جریان کاری

حداکثر 50 میلی‌آمپر

زاویه دید

180 درجه

آشنایی با پین‌ها پیش از شروع پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

پین‌های نمایشگر LCD نوکیا 5110 مانند تصویر زیر است:

پین‌ها نمایشگر نوکیا 5110
پین‌ها نمایشگر نوکیا 5110
  • RST: برای ریست کردن صفحه نمایش. چنان‌چه آن را به وضعیت LOW درآورید، نمایشگر ریست می‌شود. در صورتی که به پین ریست آردوینو وصل گردد، به طور خودکار ریست خواهد شد.
  • CE (Chip Enabled): برای انتخاب یکی از چندین ماژول متصل که پروتکل ارتباطی SPI دارند.
  • D/C (Data/Command): برای جداسازی دستورات از داده‌ها که توسط کتابخانه استفاده می‌شود.
  • DIN: پین سریال دیتا.
  • CLK: پین سریال کلاک.
  • VCC: برای تأمین انرژی نمایشگر که باید 3.3 ولت باشد.
  • BL (Backlight): برای کنترل بک‌لایت نمایشگر. با وصل کردن این پین به هر پین مخصوص PWM در آردوینو و با استفاده از یک پتانسیومتر، می‌توان مقدار روشنایی را کم یا زیاد کرد.
  • GND: اتصال به زمین

سیم‌کشی مدار پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

حال بیایید نمایشگر LCD را به آردوینو وصل کنیم.

اتصالات و سیم‌کشی مدار پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو بسیار آسان است. پین‌های سریال کلاک (CLK)، سریال داده (DIN)، داده یا دستور (D/C)، چیپ فعال (CE) و ریست (RST) به پین‌های 7 تا 3 آردوینو وصل می‌شوند.

متأسفانه خودِ نمایشگر LCD حداکثر ولتاژ 3.6 ولت دارد بنابراین نمی‌توانیم آن را مستقیماً به آردوینو بزنیم پس باید از قابلیت شیفت سطح استفاده کنیم.

یکی از آسان‌ترین روش‌های انجام این کار، اضافه کردن مقاومت در امتداد پین‌های داده‌ها است. فقط کافی است تا یک مقاومت 10 کیلو اهم را همسو با پین‌های CLK، DIN، D/C و RST و یک مقاومت 1000 اهم را هم‌سو با پین CE بگذارید.

در نهایت، پین بک‌لایت (BL) نیز از طریق یک مقاومت محدودکننده 330 اهم، به پین 3.3 ولت وصل می‌شود. چنان‌چه می‌خواهید میزان روشنایی نمایشگر LCD را تنظیم کنید، یک پتانسیومتر بیفزایید و یا این پین را به هر پین PWM آردوینو بزنید.

مداری که در پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو طراحی می‌کنید، باید چیزی شبیه تصویر زیر باشد.

سیم‌کشی مدار پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو
سیم‌کشی مدار پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

نصب کتابخانه پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

کنترلر نمایشگر PCD8544 درایورهای انعطاف‌پذیر ولی پیچیده‌ای دارد که برای دستور دادن به آن به دانش تخصصی نیاز خواهد بود. با این حال، خوشبختانه با کتابخانه Adafruit PCD8544 Nokia 5110 LCD پیچیدگی‌های نامبرده به چشم نخواهند آمد و به ما اجازه خواهند داد با چند دستور ساده، صفحه نمایش را کنترل کنیم.

برای نصب کتابخانه پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو، به آدرس Sketch> Include Library> Manage Libraries … بروید و منتظر بمانید تا لیست کتابخانه‌های دانلود شده بروز شود.

نصب کتابخانه پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو
نصب کتابخانه پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

با نوشتن کلمه nokia جستجوهای خود را فیلتر کنید. از میان نتایج، به دنبال Adafruit PCD8544 Nokia 5110 LCD بگردید. روی آن کلیک و گزینه Install را انتخاب کنید.

نصب کتابخانه نمایشگر نوکیا 5110
نصب کتابخانه نمایشگر نوکیا 5110

این یک کتابخانه مخصوص سخت‌افزار است که توابع سطح پایین را کنترل می‌کند. برای نمایش موارد گرافیکی نظیر نقاط، خطوط، دایره‌ها و مستطیل‌ها، باید کتابخانه Adafruit GFX نیز نصب شود تا دو کتابخانه با همدیگر جفت گردند.

نصب کتابخانه Adafruit GFX Graphic Core
نصب کتابخانه Adafruit GFX Graphic Core

نکته دیگر اینکه، کتابخانه Adafruit PCD8544 از کتابخانه Adafruit Bus IO نیز بهره می‌برد بنابراین آن کتابخانه را هم نصب کنید.

نصب کتابخانه Adafruit Bus IO
نصب کتابخانه Adafruit Bus IO

مرحله اول کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو؛ نمایش متن

حالا به قسمت جذاب ماجرا می‌رسیم! کدهایی که در ادامه می‌دهیم، فعالیت‌های زیر را انجام خواهند داد:

  • نمایش متن ساده
  • نمایش متن وارونه
  • نمایش اعداد
  • نمایش اعداد با پایه
  • نمایش نمادهای مختلف
  • چرخاندن متن

این چند خط کد به شما می‌فهمانند که چگونه نمایشگر LCD نوکیا 5110 کار می‌کند و می‌تواند در پروژه‌های آزمایشی مورد استفاده واقع شود. از این کد چند خط کد بهره ببرید تا در ادامه آن را با جزئیات کامل شرح دهیم.

				
					#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Declare LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

int rotatetext = 1;

void setup()   {
	Serial.begin(9600);

	//Initialize Display
	display.begin();

	// you can change the contrast around to adapt the display for the best viewing!
	display.setContrast(57);

	// Clear the buffer.
	display.clearDisplay();

	// Display Text
	display.setTextSize(1);
	display.setTextColor(BLACK);
	display.setCursor(0,0);
	display.println("Hello world!");
	display.display();
	delay(2000);
	display.clearDisplay();


	// Display Inverted Text
	display.setTextColor(WHITE, BLACK); // 'inverted' text
	display.setCursor(0,0);
	display.println("Hello world!");
	display.display();
	delay(2000);
	display.clearDisplay();

	// Scaling Font Size
	display.setTextColor(BLACK);
	display.setCursor(0,0);
	display.setTextSize(2);
	display.println("Hello!");
	display.display();
	delay(2000);
	display.clearDisplay();

	// Display Numbers
	display.setTextSize(1);
	display.setCursor(0,0);
	display.println(123456789);
	display.display();
	delay(2000);
	display.clearDisplay();

	// Specifying Base For Numbers
	display.setCursor(0,0);
	display.print("0x"); display.print(0xFF, HEX); 
	display.print("(HEX) = ");
	display.print(0xFF, DEC);
	display.println("(DEC)"); 
	display.display();
	delay(2000);
	display.clearDisplay();

	// Display ASCII Characters
	display.setCursor(0,0);
	display.setTextSize(2);
	display.write(3);
	display.display();
	delay(2000);
	display.clearDisplay();

	// Text Rotation
	while(1)
	{
	display.clearDisplay();
	display.setRotation(rotatetext);  // rotate 90 degrees counter clockwise, can also use values of 2 and 3 to go further.
	display.setTextSize(1);
	display.setTextColor(BLACK);
	display.setCursor(0,0);
	display.println("Text Rotation");
	display.display();
	delay(1000);
	display.clearDisplay();
	rotatetext++;
	}
}

void loop() {
}
				
			

گیف زیر خروجی کدهایی که ارائه دادیم می‌باشد.

نمایش متن Hello World در نمایشگر نوکیا 5110
نمایش متن Hello World در نمایشگر نوکیا 5110

توضیحات کدهای مرحله اول پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

کدهای داده شده با سه کتابخانه SPI.h، Adafruit_GFX.h و Adafruit_PCD8544.h آغاز می‌شوند.

				
					#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
				
			

مرحله بعد، ایجاد یک هدف از کتابخانه Adafruit_PCD8544.h می‌باشد. ساختار این کتابخانه قابلیت تأیید پنج پین عددی آردوینو که به پین‌های CLK، DIN، D/C، CE و RST نمایشگر وصل می‌شوند را داراست. به علاوه، متغیر rotatetext نیز وجود دارد که دلیل اهمیت آن را در ادامه توضیح می‌دهیم.

				
					// Initialize LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

int rotatetext = 1;
				
			

در قسمت Setup، هدف نمایشگر LCD را با تابع begin() شروع می‌کنیم. به علاوه، کنتراست صفحه نمایش را با استفاده از تابع setContrast(value) تنظیم خواهیم کرد و به جای value عددی بین 0 تا 100 را قرار خواهیم داد. معمولاً مقادیر 50 تا 60 نتیجه فوق‌العاده‌ای در اختیار ما قرار می‌دهند.

سپس، قبل از نمایش اولین متن مدنظر روی نمایشگر، بافر را پاک می‌کنیم.

				
					//Initialize Display
display.begin();

// you can change the contrast around to adapt the display for the best viewing!
display.setContrast(57);

// Clear the buffer.
display.clearDisplay();
				
			

نمایش متن Hello World در مرحله اول کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

				
					// Display Text
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,0);
display.println("Hello world!");
display.display();
delay(2000);
display.clearDisplay();
				
			
نمایش متن Hello World
نمایش متن Hello World

برای نمایش متن روی نمایشگر، ابتدا باید سایز فونت را مشخص کنیم. انجام این کار با استفاده از تابع setTextSize() و نوشتن یک عدد غیر منفی بزرگتر از 1 امکان‌پذیر خواهد بود.

اینک رنگ متن را با تابع setTextColor() تنظیم خواهیم کرد. برای رنگ تیره از BLACK و برای رنگ روشن از WHITE استفاده کنید.

پیش از نمایش متن، باید محل قرارگیری نشانگر را با تابع setCursur(X,Y) تعیین نماییم. می‌توان پیکسل‌های صفحه نمایش را با X به صورت افقی و با Y به صورت عمودی مشخص نمود. مقدار اولیه (0,0) سبب قرارگیری متن در گوشه بالا سمت چپ می‌شود. لازم به ذکر است که افزودن مقدار به X متن را به سمت راست و افزودن مقدار به Y متن را به سمت پایین هدایت می‌کند.

برای نمایش متن، می‌توانیم از یکی از دو تابع print(“ “) یا printIn(“ “) بهره ببریم؛ یعنی دقیقاً شبیه روشی که از طریق آن روی سریال مانیتور متن پرینت می‌کنیم. به خاطر بسپارید که تابع printIn() نشانگر را به خط بعد منتقل می‌کند.

مرحله نهایی، استفاده از دستور display() برای انتقال گسترده بافر نمایشگر به مقدار حافظه داخلی کنترلر PCD8544 و نمایش محتواها روی LCD توسط کتابخانه می‌باشد.

نمایش متن وارونه در مرحله اول کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

				
					// Display Inverted Text
display.setTextColor(WHITE, BLACK);
display.setCursor(0,0);
display.println("Hello world!");
display.display();
delay(2000);
display.clearDisplay();
				
			
نمایش متن Hello World بصورت وارونه
نمایش متن Hello World بصورت وارونه

برای نمایش متن وارونه، از تابع setTextColor (FontColor, BackgroundColor) استفاده می‌کنیم. اگر توجه کرده باشید، دیده‌اید که پیش‌تر یک پارامتر به این تابع دادیم ولی حالا دو پارامتر به آن داده‌ایم.

در این حالت، نوشتن تابع به شکل setTextColor(Black, White) سبب می‌شود تا متن سفید روی پس‌زمینه مشکی نمایش داده شود.

تنظیم سایز فونت در مرحله اول کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

تنظیم سایز فونت
تنظیم سایز فونت
				
					// Scaling Font Size
display.setTextColor(BLACK);
display.setCursor(0,0);
display.setTextSize(2);
display.println("Hello!");
display.display();
delay(2000);
display.clearDisplay();
				
			
تنظیم سایز فونت
تنظیم سایز فونت

پیش‌تر در این مطلب آموزشی از تابع setTextSize() برای تنظیم اندازه فونت استفاده کرده بودیم. شما می‌توانید سایز متون نوشته شده را با وارد کردن یک عدد غیر منفی به این تابع، تغییر دهید.

کاراکترها با نسبت 5:7 نمایش داده می‌شوند. به عبارت دیگر، انتخاب عدد 1 به عنوان سایز فونت، هر کاراکتر را با ابعاد 7×5 پیکسل نمایش خواهد داد و تبدیل این عدد به 2، ابعاد هر پیکسل به 14×10 خواهد رسید و به همین ترتیب ادامه خواهد یافت.

نمایش اعداد در مرحله اول کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

				
					// Display Numbers
display.setTextSize(1);
display.setCursor(0,0);
display.println(123456789);
display.display();
delay(2000);
display.clearDisplay();
				
			
نمایش اعداد
نمایش اعداد

توابع print() یا printIn() را می‌توان برای نمایش اعداد در نمایشگر LCD به کار برد. از آن جایی که اضافه کردن توابع این‌چنینی مقادیر 32 بیتی نامشخصی را اعمال خواهد کرد و سایز نمایشگر زیاد بزرگ نیست، شما تنها می‌توانید اعدادی را نمایش دهید که بین 0 تا 4294967295 هستند.

مشخص کردن پایه برای اعداد در مرحله اول کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

				
					// Specifying Base For Numbers
display.setCursor(0,0);
display.print("0x"); display.print(0xFF, HEX); 
display.print("(HEX) = ");
display.print(0xFF, DEC);
display.println("(DEC)"); 
display.display();
delay(2000);
display.clearDisplay();
				
			
مشخص کردن پایه برای اعداد
مشخص کردن پایه برای اعداد

توابع print() یا printIn() یک پارامتر ثانویه و انتخابی دارند که پایه یا فرمت اعداد را مشخص می‌کند. برای اعداد اعشاری، این توابع تا چند رقم بعد از اعشار را تعیین خواهند کرد.

BIN

باینری یا پایه 2

OCT

هشتی یا پایه 8

DEC

اعشاری یا پایه 10

HEX

هگزادسیمال یا پایه 16

  • تابع print(78, BIN) عدد 1001110 را نمایش می‌دهد
  • تابع print(78, OCT) عدد 116 را نمایش می‌دهد
  • تابع print(78, DEC) عدد 78 را نمایش می‌دهد
  • تابع print(78, HEX) عدد 4E را نمایش می‌دهد
  • تابع printIn(1.23456, 0) عدد 1 را نمایش می‌دهد
  • تابع printIn(1.23456, 2) عدد 1.23 را نمایش می‌دهد

تابع printIn(1.23456, 4) عدد 1.2346 را نمایش می‌دهد

نمایش نمادهای ASCII در مرحله اول کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

				
					// Display ASCII Characters
display.setCursor(0,0);
display.setTextSize(2);
display.write(3);
display.display();
delay(2000);
display.clearDisplay();
				
			
نمایش نمادهای ASCII
نمایش نمادهای ASCII

توابع print() و printIn() داده‌هایی را به نمایشگر می‌فرستند که توسط انسان‌ها قابل خواندن هستند حال آنکه تابع write() داده‌های باینری به نمایشگر ارسال می‌کند. از این تابع می‌توان برای نوشتن نمادهای ASCII استفاده کرد. مثلاً ارسال عدد 3، نماد قلب را نشان خواهد داد.

چرخش متون در مرحله اول کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

				
					// Text Rotation
while(1)
{
	display.clearDisplay();
	display.setRotation(rotatetext);
	display.setTextSize(1);
	display.setTextColor(BLACK);
	display.setCursor(0,0);
	display.println("Text Rotation");
	display.display();
	delay(1000);
	display.clearDisplay();
	rotatetext++;
}
				
			
چرخش متون
چرخش متون

مرحله دوم کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو؛ نقاشی ابتدایی

کدهایی که در ادامه می‌بینید، نشان می‌دهند که چگونه اشکال هندسی مبتدی مانند دایره، مستطیل یا مثلث را در نمایشگر LCD نوکیا 5110 بکشید. از این چند خط کد استفاده کنید تا در ادامه در مورد آنها توضیح دهیم.

				
					#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Declare LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

void setup()   {
	Serial.begin(9600);

	//Initialize Display
	display.begin();

	// you can change the contrast around to adapt the display for the best viewing!
	display.setContrast(57);

	// Clear the buffer.
	display.clearDisplay();

	// Draw Rectangle
	display.drawRect(0, 0, 60, 40, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Filled Rectangle
	display.fillRect(0, 0, 60, 40, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Round Rectangle
	display.drawRoundRect(0, 0, 60, 40, 8, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Filled Round Rectangle
	display.fillRoundRect(0, 0, 60, 40, 8, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Circle
	display.drawCircle(20, 20, 20, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Filled Circle
	display.fillCircle(20, 20, 20, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Triangle
	display.drawTriangle(20, 0, 0, 40, 40, 40, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();

	//Draw Filled Triangle
	display.fillTriangle(20, 0, 0, 40, 40, 40, BLACK);
	display.display();
	delay(2000);
	display.clearDisplay();
}

void loop() {
}
				
			

در گیف زیر خروجی کدهای داده شده را می‌بینید.

نمایش اشکال هندسی در نمایشگر نوکیا 5110
نمایش اشکال هندسی در نمایشگر نوکیا 5110

اکثر کدها، شبیه همان‌هایی هستند که در بالا توضیح دادیم اما آن‌هایی که برای طراحی اشکال ساده به کار می‌روند، تفاوت دارند.

توضیحات کدهای مرحله دوم پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

طراحی مستطیل در مرحله دوم کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

				
					// Draw Rectangle
display.drawRect(0, 0, 60, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();


//Draw Filled Rectangle
display.fillRect(0, 0, 60, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();
				
			
نمایش مستطیل

تابع drawRect() برای کشیدن مستطیل روی صفحه نمایش به کار می‌رود. این تابع پنج پارامتر X، Y، عرض ارتفاع و رنگ را قبول می‌کند. با این تابع مستطیلی خواهید کشید که حاشیه 1 پیکسلی دارد. البته تابع fillRect() یک مستطیل تو پر طراحی خواهد کرد.

طراحی مستطیل با گوشه‌های گرد در مرحله دوم کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

				
					console.log( 'Code is Poetry' );
				
			
طراحی مستطیل با گوشه‌های گرد
طراحی مستطیل با گوشه‌های گرد

تابع drawRoundRect() برای طراحی مستطیل با گوشه‌های گرد استفاده می‌شود. برای بهره‌گیری از آن، به همان پارامترهای مشخص نیاز خواهیم داشت به اضافه پارامتر تعیین گوشه‌های گرد. این تابع در واقع مستطیل با گوشه‌های گرد تو خالی را طراحی می‌کند اما با fillRoundRect() می‌توان مستطیل تو پر با گوشه های گرد کشید.

طراحی دایره در مرحله دوم کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

				
					//Draw Circle
display.drawCircle(20, 20, 20, BLACK);
display.display();
delay(2000);
display.clearDisplay();

//Draw Filled Circle
display.fillCircle(20, 20, 20, BLACK);
display.display();
delay(2000);
display.clearDisplay();
				
			
طراحی دایره
طراحی دایره

برای طراحی دایره در پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو، باید از تابع drawCircle() استفاده کنید. این تابع چهار پارامتر X برای مرکز، Y برای مرکز، رادیوس و رنگ دارد. با این تابع دایره تو خالی خواهید کشید که حاشیه 1 پیکسلی خواهد داشت اما برای کشیدن دایره تو پر، می‌بایست از تابع fillCircle() بهره ببرید.

طراحی مثلث در مرحله دوم کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

				
					//Draw Triangle
display.drawTriangle(20, 0, 0, 40, 40, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();


//Draw Filled Triangle
display.fillTriangle(20, 0, 0, 40, 40, 40, BLACK);
display.display();
delay(2000);
display.clearDisplay();
				
			
طراحی مثلث
طراحی مثلث

تابع drawTriangle() برای کشیدن مثلث استفاده می‌شود. این تابع دارای هفت پارامتر است؛ سه عدد X و Y (شامل x0، y0، x1، y1، x2 و y2) برای گوشه‌های مثلث و یک پارامتر برای رنگ. x0 و y0 برای گوشه بالایی، x1 و y1 برای گوشه سمت چپ و x2 و y2 برای گوشه سمت راست.

تابع نامبرده مثلث تو خالی طراحی می‌کند. برای طراحی یک مثلث تو پر باید از تابع fillTriangle() استفاده کنید.

مرحله سوم کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو؛ نمایش تصویر

آخرین مرحله از کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو، نشان دادن تصویر روی نمایشگر LCD نوکیا 5110 است. در مواقعی که می‌خواهید آیکون، لوگو، اینفوگرافیک و . . . را در این صفحه نمایش نشان دهید، کدهای زیر به کار خواهند آمد:

				
					#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Declare LCD object for software SPI
// Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

// 'Marilyn Monroe 84x48', 84x48px
const unsigned char MarilynMonroe [] PROGMEM = {
	0x00, 0x00, 0x00, 0x7f, 0x00, 0x02, 0xfe, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x00, 
	0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x1f, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 
	0x00, 0x00, 0x0f, 0xf1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xd8, 0xe0, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x07, 0xe0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x03, 
	0x3f, 0xe0, 0x00, 0x07, 0xf0, 0x78, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x70, 0x00, 0x0f, 0xee, 
	0x7c, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x0f, 0xf7, 0x1c, 0x00, 0x00, 0x00, 0x00, 
	0x07, 0x80, 0x00, 0x0f, 0xc7, 0xf3, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x0f, 0xf3, 
	0xdf, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x08, 0x7d, 0xef, 0xff, 0xc0, 0x00, 0x00, 
	0x00, 0x7f, 0xff, 0x80, 0x30, 0x0f, 0xfc, 0xe0, 0xc0, 0x00, 0x00, 0x01, 0x9e, 0x73, 0xc0, 0xe0, 
	0x07, 0xf8, 0xc1, 0xc0, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x01, 0xc0, 0x0f, 0xfd, 0xe1, 0x80, 0x00, 
	0x00, 0x03, 0xf8, 0x00, 0x01, 0x9c, 0x0f, 0xff, 0xc1, 0xc0, 0x00, 0x00, 0x02, 0xc0, 0x00, 0x01, 
	0x9f, 0xbf, 0xfe, 0x01, 0x40, 0x00, 0x00, 0x02, 0x60, 0x00, 0x03, 0x07, 0xef, 0xff, 0x01, 0x40, 
	0x00, 0x00, 0x00, 0x60, 0x00, 0x07, 0x01, 0xf7, 0xff, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x50, 0x01, 
	0xdf, 0x00, 0x7f, 0xff, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x40, 0x01, 0xff, 0x00, 0x1f, 0xff, 0x1e, 
	0xe0, 0x00, 0x00, 0x02, 0x08, 0x00, 0x3f, 0x80, 0x07, 0xef, 0x03, 0xe0, 0x00, 0x00, 0x06, 0x08, 
	0x00, 0x03, 0xc0, 0x07, 0xdf, 0x07, 0xc0, 0x00, 0x00, 0x06, 0x08, 0x0f, 0x81, 0x80, 0x1f, 0xdf, 
	0x1f, 0x80, 0x00, 0x00, 0x03, 0x08, 0x1f, 0x98, 0x00, 0x3f, 0xfe, 0x19, 0x80, 0x00, 0x00, 0x18, 
	0x08, 0x3f, 0xfe, 0x00, 0x7f, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x08, 0x08, 0x30, 0x3f, 0x00, 0xff, 
	0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x76, 0x0f, 0x89, 0xff, 0xff, 0x9f, 0x00, 0x00, 0x00, 
	0x03, 0xe0, 0x7f, 0xc3, 0x81, 0xff, 0xfe, 0x9f, 0x80, 0x00, 0x00, 0x03, 0xf0, 0x7f, 0xf3, 0xc3, 
	0xff, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x7f, 0xfd, 0xc3, 0xff, 0xfe, 0x5e, 0x00, 0x00, 
	0x00, 0x03, 0xf0, 0x7f, 0xff, 0xc3, 0xff, 0xf3, 0x1e, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x71, 0xff, 
	0x87, 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x7c, 0x3f, 0x87, 0xff, 0xe3, 0xfe, 0x00, 
	0x00, 0x00, 0x0f, 0xf0, 0x3c, 0xff, 0x05, 0xff, 0xf3, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 
	0xfe, 0x09, 0xff, 0xf7, 0xfc, 0x00, 0x00, 0x00, 0x08, 0xf8, 0x01, 0xfc, 0x19, 0xff, 0xff, 0xf8, 
	0x00, 0x00, 0x00, 0x0c, 0x78, 0x00, 0x00, 0x13, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x0e, 0x78, 
	0x00, 0x00, 0x23, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x47, 0xff, 0xff, 
	0xf0, 0x00, 0x00, 0x00, 0x0c, 0xfa, 0x00, 0x01, 0x8f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x08, 
	0x7b, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x0c, 0x3b, 0xf8, 0x0f, 0xff, 0xff, 
	0xff, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 
	0x07, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x71, 0xff, 0xff, 0xff, 
	0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x41, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00
};

void setup()   {
	Serial.begin(9600);

	//Initialize Display
	display.begin();

	// you can change the contrast around to adapt the display for the best viewing!
	display.setContrast(57);

	// Clear the buffer.
	display.clearDisplay();

	// Display bitmap
	display.drawBitmap(0, 0,  MarilynMonroe, 84, 48, BLACK);
	display.display();

	// Invert Display
	//display.invertDisplay(1);
}

void loop() {
}
				
			

خروجی این کدها را در تصویر زیر می‌بینید:

خروجی تصویر در نمایشگر نوکیا 5110
خروجی تصویر در نمایشگر نوکیا 5110

توضیحات مرحله سوم کدنویسی پروژه راه اندازی نمایشگر Nokia 5110 با آردوینو

تابع drawBitmap() برای نمایش یک تصویر در LCD به کار می‌رود. این تابع دارای پارامترهای X و Y برای گوشه بالا سمت چپ، پارامتر مخصوص رنگ مونوکروم، پارامتر عرض بر حسب پیکسل، پارامتر ارتفاع بر حسب پیکسل و پارامتر مخصوص رنگ.

تصویر استفاده شده در این کدها دارای ابعاد 48×84 است بنابراین X و Y روی 0 تنظیم شده‌اند و عرض و ارتفاع به ترتیب 84 و 48 پیکسل هستند.

				
					// Display bitmap
display.drawBitmap(0, 0,  MarilynMonroe, 84, 48, BLACK);
display.display();
				
			

پیش از آنکه بتوانیم از تابع drawBitmap() بهره ببریم، باید یک عکس طراحی کنیم. به خاطر داشته باشید که رزولوشن نمایشگر 48×84 پیکسل است به همین علت تصاویر بزرگتر از این سایز به خوبی پخش نخواهند شد. برای اینکه یک تصویر با ابعاد گفته شده بکشید، یک نرم‌افزار مانند فتوشاپ یا نقاشی ویندوز را اجرا کنید.

یک تصویر از اینترنت دانلود نمایید و سایز آن را در نرم‌افزار مدنظر، به 48×84 پیکسل تغییر دهید و با فرمت .bmp ذخیره کنید.

تنظیم سایز تصویر برای پخش در نمایشگر نوکیا 5110
تنظیم سایز تصویر برای پخش در نمایشگر نوکیا 5110

وقتی عکس دلخواه را پیدا کردید و سایز را تغییر دادید، آن را باید به آرایه‌ای تبدیل کنید که کنترلر PCD8544 بتواند تشخیص دهد. یکی از روش‌های انجام این کار، استفاده از ابزار آنلاین image2cpp می‌باشد.

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

ابعاد عکس انتخاب شده در بخش Canvas size زیر Image Settings قابل مشاهده خواهد بود. چنان‌چه تصویر بزرگتر از 48×84 پیکسل بود، با گزینه Scaling آن را به ابعاد دلخواه درآورید و پیش‌نمایشی از خروجی نهایی را در بخش Preview ببینید.

اگر لازم بود، می‌توانید رنگ پس‌زمینه تصویر یا رنگ خودِ تصویر را تغییر دهید.

در نهایت، مهمترین گزینه تنظیمات یعنی شروع روشنایی را عوض کنید. وقتی آپشن شروع روشنایی را تنظیم می‌کنید، اعداد بالاتر از آن سفید و اعداد کمتر از آن سیاه خواهند شد.

انتخاب تصویر جهت تبدیل فرمت به .bmp
انتخاب تصویر جهت تبدیل فرمت به .bmp

در پنجره Preview می‌توانید خروجی نهایی را با تنظیمات اعمال شده ببینید.

پیش‌نمایش تصویر قبل از تبدیل فرمت به .bmp
پیش‌نمایش تصویر قبل از تبدیل فرمت به .bmp

وقتی عکس آن چیزی که می‌خواستید شد، آرایه‌های داده‌ای را تنظیم کنید. برای این کار، گزینه Arduino Code را به عنوان فرمت خروجی مشخص و روی گزینه Generate کلیک نمایید.

تنظیمات لازم برای تبدیل فرمت تصویر به .bmp
تنظیمات لازم برای تبدیل فرمت تصویر به .bmp

با طی کردن مراحل گفته شده، تصویر دلخواه آماده شده است. اینک با کدهایی که ارائه دادیم، عکس را در نمایشگر LCD نوکیا 5110 پخش کنید. به خاطر داشته باشید که برای آن اسم مناسبی گذاشته و مقادیر مربوطه را در تابع drawBitmap() قرار دهید.

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

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