معرفی و راه‌اندازی ال‌سی‌دی لمسی با آردوینو

شنبه, 11 خرداد 1398 08:12
این مورد را ارزیابی کنید
(11 رای‌ها)

این مطلب بخش دهم از آموزش جامع آردوینو (مبتدی و پیشرفته) است. در این آموزش قصد داریم به معرفی و راه‌اندازی نمایشگر رنگی لمسی بپردازیم. اضافه کردن یک نمایشگر لمسی به پروژه‌تان می‌تواند جذابیت آن را چند برابر کند. به علاوه نمایشگر لمسی تمام مزایای یک نمایشگر مانند امکان مشاهده وضعیت سیستم و مزایای یک منبع ارسال فرمان به سیستم مانند دستور چرخیدن موتورها یا پخش صوت را یک جا دارد. در این آموزش علاوه بر کار با نمایشگر با مباحث بیشتری در کدنویسی و گرافیک کامپیوتر نیز آشنا خواهید شد. به دنیای نمایشگرها خوش آمدید!

قطعات مورد نیاز:

برد آردوینو و کابل رابط

1 عدد

شیلد نمایشگر لمسی "2.4 

1 عدد

معرفی نمایشگر TFT

نمایشگر TFT LCD نوعی از نمایشگرهای کریستال مایع (LCD) است که در آن از یک لایه نازک ترانزیستور استفاده شده است. این تغییر باعث بهبود کارکرد و شفافیت تصویر آن شده است.

 شیلد ال سی دی لمسی

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

پیکسل های TFT


معرفی نمایشگر لمسی

صفحه لمسی یک لایه حساس به تماس است که معمولا بر روی نمایشگرها نصب ‌می‌شود و به عنوان ورودی عمل می‌کند. صفحه‌های لمسی در سال‌های گذشته پیشرفت چشمگیری داشته‌اند و فناوری‌های مختلفی برای ساخت آنها از جمله خازنی، مقاومتی و SAW ارائه شده است. زمانی که یک نقطه از صفحه لمس شود، یک سیگنال حاوی مختصات آن نقطه ارسال می‌گردد. امروزه از نمایشگرهای لمسی در موارد بسیاری از جمله گوشی‌های هوشمند، رایانه‌های شخصی و غیره استفاده می‌شود.

لایه های نمایشگر لمسی


نحوه کار با نمایشگر لمسی

بسیاری از ماژول‌های الکترونیکی که با آردوینو استفاده می‌شوند، به دو صورت مجزا و شیلد ارائه شده‌اند. شیلدها بردهای الکترونیکی هستند که یک یا چند ماژول مختلف بر روی آن قرار دارد و با استفاده از تعدادی پین مشخص به یک برد کنترلی مانند آردوینو UNO وصل می‌شوند. مزیت شیلدها در این است که نیاز به اتصالات زیاد قطعات مختلف را از بین می‌برد و کافیست که آنرا مستقیما به آردوینو متصل کنید. علاوه بر این، استفاده از شیلد حجم اشغال شده توسط دستگاه‌تان را کم می‌کند. راه‌اندازی شیلدها معمولا تفاوتی با ماژول‌های مجزا ندارد و همان کد را بر روی آردوینو آپلود می‌کنید. در این آموزش از شیلد ماژول نمایشگر TFT لمسی استفاده شده است.
همان‌طور که می‌دانید آردوینو یک برد توسعه‌ای است که امکان راه‌اندازی بسیاری از تجهیزات الکتریکی و الکترونیک را به ساده‌ترین و سریع‌ترین شکل ممکن فراهم می‌کند. با این وجود نباید فراموش کنید که قدرت پردازشی و حافظه آردوینو محدود بوده و برای انجام کارهای سنگین محاسباتی چندان مناسب نیست. پردازش تصویر یکی از مواردی است که معمولا نیاز به قدرت محاسباتی و حافظه RAM زیادی دارد، بنابراین اگر می‌خواهید کار گرافیکی نسبتا سنگینی انجام دهید بهتر است به سراغ بردهای قوی‌ترین مانند رزبری پای بروید. با وجود این محدودیت‌ها به لطف کتابخانه‌های موجود و طراحی‌های خاص تراشه‌های موجود در نمایشگرها، آردوینو می‌تواند تصاویر نسبتا قابل قبولی تولید کند که برای خیلی از پروژه‌ها کافی است.
در این آموزش از شیلد نمایشگر لمسی TFT که مناسب آردوینو UNO ساخت شرکت MCUFriend استفاده شده است. برای کار با این شیلد نیاز به استفاده از سه کتابخانه وجود دارد. البته خودتان هم می‌توانید کدهای لازم برای استفاده از نمایشگر را بنویسید اما این کار نیاز به زمان بسیار زیاد برای نوشتن چند صد یا چند هزار خط دستور و داشتن دانش بیشتر در زمینه برنامه‌نویسی و گرافیک کامپیوتر دارد. بنابراین اگر کار اصلی شما برنامه‌نویسی برای سخت‌افزار نیست، خیلی راحت از خیر نوشتن برنامه بدون کتابخانه گذشته و از کتابخانه‌های موجود استفاده کنید!

شیلد ال سی دی به همراه آردوینو


کتابخانه Adafruit_GFX

اولین و مهمترین کتابخانه، Adafruit_GFX است. این کتابخانه معروف‌ترین کتابخانه آردوینو برای ایجاد تصاویر و نمایش خروجی گرافیکی است. این کتابخانه دارای مجموعه وسیعی از توابع گرافیکی بوده و با بسیاری از نمایشگرهای LCD، OLED و TFT همخوانی دارد. نصب کتابخانه با روشی که در آموزش دوم آردوینو توضیح داده شد به سادگی انجام می‌شود.

دانلود کتابخانه Adafruit_GFX

نمایشگر LED از ماتریسی از واحدهای بسیار کوچک نوری به نام پیکسل تشکیل شده است. در این صفحه هر پیکسل با مختصاتش مشخص می‌شود. مختصات پیکسل‌ها در یک دستگاه کارتزین (X, Y) تعریف شده است. محورهای این دستگاه بر خلاف حالت مرسوم، به سمت راست و پائین بوده و مبدا آن گوشه بالا و سمت چپ نمایشگر است. این یک روش متداول بوده و در اغلب سیستم‌های گرافیک کامپیوتر از آن استفاده می‌شود. برای اینکه جهت نمایش صفحه (عمودی یا افقی) تغییر کند باید این دستگاه را بچرخانید. اگر نقطه مبدا دستگاه مختصات در هر کدام از چهار گوشه صفحه قرار داشته باشد، یک جهت نمایش متفاوت ایجاد خواهد شد. چرخاندن صفحه نمایش به طور خاص وقتی کاربرد دارد که مجبور باشید نمایشگر را در جهت خاصی در پروژه‌تان نصب کنید.
طبق یک دسته‌بندی، می‌توان نمایشگرها را به سه گروه تقسیم کرد:

1. نمایشگر سیاه و سفید (Bitmap)؛ در این حالت هر پیکسل تنها دارای دو حالت سیاه(٠) و سفید(١) است. نمونه یک عکس سیاه و سفید:

تصویر دو رنگ

2. نمایشگر سیاه و سفید با طیف خاکستری (Grayscale)؛ در این نوع نمایشگرها، رنگ سیاه، سفید و مجموعه‌ای از رنگ‌های خاکستری بین سیاه و سفید قابل تولید است. هرچه تعداد بیت‌های بیشتری برای نمایش تصویر استفاده شود، تعداد رنگ‌های بیشتری نیز بین سیاه و سفید قابل تفکیک و ارائه خواهد بود. به تعداد بیت‌های استفاده شده برای یک رنگ، عمق رنگ (Color depth) گفته می‌شود. معمولا برای نمایش طیف رنگ از ٨ بیت (یک بایت) داده استفاده می‌شود که تفکیک 256 رنگ مجزا را ممکن می‌سازد. نمونه‌ای از یک تصویر سیاه و سفید با طیف خاکستری:

تصویر grayscale

3. نمایشگرهای رنگی (Color)؛ در این نمایشگرها با استفاده از ترکیب چند رنگ پایه مانند قرمز (Red)، سبز (Green) و آبی (Blue) سایر رنگ‌ها ساخته می‌شود. این سه رنگ مبنای استاندارد نمایش RGB است که معمولا در سیستم‌های کامپیوتری استفاده می‌شود. اینکه برای هر کدام از این سه رنگ چه مقدار فضای داده در نظر گرفته شود متغیر است و هرچه بیشتر باشد، رنگ‌های بیشتر و زنده‌تری تولید شده و در نتیجه تصویر نهایی می‌تواند کیفیت بالاتری داشته باشد. البته کیفیت تصویر به عوامل دیگری مانند تراکم پیکسل‌ها در واحد سطح نیز وابسته است. معمول‌ترین سیستم ایجاد تصاویر، استفاده از ٨ بیت برای هر رنگ (Channel) است که مجموعا ٢٤ بیت برای ذخیره سازی هر پیکسل اشغال می‌شود. به این سیستم، 24-bit یا True Color گفته می‌شود و در آن مجموعا حدود ١٦ میلیون رنگ متفاوت قابل تولید است. در تجهیزاتی که با محدودیت ذخیره‌سازی، پردازش یا انتقال اطلاعات مواجه‌اند یا نمایشگر کیفیت لازم برای نمایش این تعداد رنگ را ندارد، از سیستم 16-bit استفاده می‌شود. در این روش رنگ هر پیکسل در یک مجموعه ١٦ بیتی ثبت شده که در آن ٥ بیت سمت چپ مربوط به رنگ قرمز، ٦ بیت وسط رنگ سبز و ٥ بیت سمت راست رنگ آبی است.

ذخیره سازی عکس رنگی

با اینکه در این حالت فقط حدود ٦٥ هزار رنگ قابل تولید است اما برای بسیاری از کاربردها کافی است. مخصوصا در آردوینو که محدودیت فضای RAM و قدرت پردازشی دارد، این موضوع مزیت بسیار مهمی به شمار می‌آید. کتابخانه Adafruit_GFX و نیز شیلد نمایشگر از سیستم 16-bit استفاده می‌کنند. نمونه یک عکس رنگی ٢٤ بیتی:

تصویر رنگی

توابع اصلی کتابخانه Adafruit_GFX

در این قسمت بعضی از توابع مهم در این کتابخانه معرفی می‌شوند. پیش از آن باید با یک موضوع دیگر آشنا شوید. همان‌طور که می‌دانید انواع مختلفی از متغیرها وجود دارد، مانند عدد صحیح (Int)، عدد اعشاری (float) و متغیر منطقی (bool). هر کدام از این متغیرها نحوه تعریف و معنای مشخصی دارند اما حجم ذخیره‌سازی آنها می‌تواند به گونه‌های مختلفی در نظر گرفته شود؛ مثلا متغیر int می‌تواند به صورت ٨، ١٦، ٣٢ و ٦٤ بیتی ذخیره شود. در این صورت برای تعریف متغیر به جایintاز عبارت‌هایی مانندint8_t،int16_tو … استفاده می‌شود. همچنین متغیرها می‌توانند فقط شامل اعداد مثبت باشند که در این صورت بزرگترین عدد قابل تعریف برای آن متغیر با همان حجم ذخیره‌سازی، ٢ برابر خواهد شد. در این صورت تعریف متغیر مانند موارد زیر صورت می‌گیرد:

unsigned int Variable = number;
uint16_t Variable = number;

بنابراین در ورود اطلاعات به توابع، به نوع هر ورودی دقت کنید. توابع اصلی کتابخانه Adafruit_GFX شامل موارد زیر است. در تعاریف زیر نوع هر متغیر نیز مشخص شده است.
نمایش پیکسل:

drawPixel(uint16_t x, uint16_t y, uint16_t color);

متغیر اول مقدار x، متغیر دوم مقدار y و متغیر سوم رنگ پیکسل به صورت 16-bit است.

نمایش خط:

drawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);

متغیر اول و دوم مختصات نقطه شروع و متغیر سوم و چهارم مختصات نقطه انتهای خط و متغیر پنجم رنگ خط است.

نمایش خط افقی و عمودی:

drawFastVLine(uint16_t x1, uint16_t y1, uint16_t length, uint16_t color);
drawFastHLine(uint8_t x1, uint8_t y1, uint8_t length, uint16_t color);

متغیر اول و دوم مختصات نقطه شروع، متغیر سوم طول خط و متغیر چهارم رنگ آن است.

نمایش مستطیل:

drawRect(uint16_t x1, uint16_t y1, uint16_t w, uint16_t h, uint16_t color);
fillRect(uint16_t x1, uint16_t y1, uint16_t w, uint16_t h, uint16_t color);

تابع اول خط دور مستطیل و تابع دوم داخل آن را رسم می‌کند. در این توابع، متغیر اول و دوم مختصات گوشه بالا و سمت چپ مستطیل، متغیر سوم و چهارم طول و عرض مستطیل و متغیر پنجم رنگ آن است.

نمایش دایره:

drawCircle(uint16_t x1, uint16_t y1, uint16_t r, uint16_t color);
fillCircle(uint16_t x1, uint16_t y1, uint16_t r, uint16_t color);

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

نمایش متن:
برای نوشتن متن، باید چند خط کد اجرا شود. ابتدا باید محل شروع متن (گوشه سمت چپ و بالای متن) با دستورsetCursorتنظیم شود، سپس رنگ متن با دستورsetTextColorو اندازه آن با دستورsetTextSizeتعیین می‌شود. همچنین در صورتی که متن طولانی‌تر از صفحه نمایش باشد، ادامه آن در سطر بعد نشان داده خواهد شد؛ برای غیرفعال کردن این ویژگی از دستور(setTextWrap(falseاستفاده کنید. توابع گفته شده به این صورت تعریف می‌شود:

setTextCursor(unint16_t x1, uint16_t y1);
setTextColor(uint16_t color);
setTextSize(uint8_t size);
setTextWrap(bool w);

 تنظیم صفحه نمایش:
دستور زیر تمام صفحه را پاک کرده و به رنگ دلخواه در می‌آورد:

fillScreen(uint16_t color);

و دستور زیر صفحه نمایش را به میزان دلخواه (یکی از موارد ٩٠، ١٨٠ یا ٢٧٠ درجه) می‌چرخاند.

setRotation(uint8_t angle);

دقت کنید که این دستور به چیزهایی که تاکنون نمایش داده‌اید اعمال نمی‌شود. همچنین توجه کنید که با چرخاندن صفحه، نقطه مبدا شما نیز تغییر می‌کند و در سایر دستورات باید این را در نظر داشته باشید. این دستور معمولا یک بار و در حلقه setup اجرا می‌شود.

دستور زیر نیز طول و عرض صفحه نمایش را برحسب پیکسل می‌دهد:

width();
height();

برای سادگی کار، در این کتابخانه یک کلاس به نامAdafruit_GFX_Buttonتعریف شده که با آن به راحتی می‌توانید یک کلید بر روی صفحه نمایش ایجاد کنید. در این کلاس دستورinitButtonکلید را در محل مورد نظر با رنگ دلخواه ایجاد کرده و یک متن روی آن می‌نویسد؛ دستورdrawButtonرنگ داخل کلید را پاک می‌کند؛ در صورتی که نقطه (x, y) درون کلید قرار داشته باشد دستور(contains(x, yمقدار true را می‌دهد و برعکس؛ دستور press وضعیت کلید (لمس شده یا لمس نشده) را بررسی می‌کند؛ دستوراتisPressed،justPressedوjustReleasedبه ترتیب در صورتی که کلید نگه‌داشته شده باشد، کلید به تازگی لمس شده باشد و کلید به تازگی رها شده باشد مقدار true را می‌دهند.


کتابخانه TouchScreen

کتابخانه دوم مورد استفاده، TouchScreen است. این کتابخانه برای خواندن داده‌های لمسی صفحه استفاده می‌شود. دستورات مهم این کتابخانه عبارتند از:
دریافت نقطه لمس‌شده:
تعیین نقطه لمس‌شده توسط دستور()getPointانجام می‌شود. برای استفاده از این دستور باید یک Structure از جنس TSPoint تعریف کنید. Structure ها شیءهایی هستند که می‌توانند چند متغیر داخلی داشته باشند. در این مورد، متغیرهای x, y مختصات نقطه لمس‌شده و z میزان فشار است. برای تعریف و دسترسی به Structure مانند زیر عمل کنید:

TSPoint touchPoint = touch.getPoint();
X = touchPoint.x;
Y = touchPoint.y;
Z = touchPoint.z;

دانلود کتابخانه Touchscreen


کتابخانه MCUFRIEND_kbv

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

این کتابخانه عمدتا بر اساس همان کتابخانه Adafruit_GFX نوشته شده است و دستورات آن را می‌شناسد. دو دستور مهم مخصوص این کتابخانه به صورت زیر است:
برای تشخیص نوع نمایشگر از دستور()readIDو برای برقراری ارتباط با آن از دستورbeginاستفاده می‌شود. استفاده از این دستورات نیز مانند صفحه لمسی به صورت تعریف Structure است:

TFTID = TFT.readID();
TFT.begin(TFTID);

دانلود کتابخانه MCUFriend


شروع کار با نمایشگر لمسی

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

راه اندازی ال سی دی با آردوینو

برنامه زیر این کار را انجام می‌دهد:

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com

*/

// TFT screen definitions
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
#include <TouchScreen.h>
MCUFRIEND_kbv TFT;
Adafruit_GFX_Button Button[4]; //  redButton, blueButton, greenButton, yellowButton;

#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
uint16_t color[4] = {RED, BLUE, GREEN, YELLOW};

// Touch definitions
#define minPressure 200
#define maxPressure 1000
const int XP = 6, XM = A2, YP = A1, YM = 7;
const int touchLeftLimit = 107, touchRightLimit = 910, touchUpLimit = 954, touchButtomLimit = 100;
TouchScreen touch = TouchScreen(XP, YP, XM, YM, 300);
int touchX, touchY;

// Functions
bool touchSensed()
{
    TSPoint touchPoint = touch.getPoint();
    pinMode(YP, OUTPUT);
    pinMode(XM, OUTPUT);
    digitalWrite(YP, HIGH);
    digitalWrite(XM, HIGH);
    bool pressed = (touchPoint.z > minPressure && touchPoint.z < maxPressure);
    if (pressed)
    {
        touchX = map(touchPoint.x, touchLeftLimit, touchRightLimit, 0, TFT.width());
        touchY = map(touchPoint.y, touchUpLimit, touchButtomLimit, 0, TFT.height());
    }
    return pressed;
}

void makeIcons()
{
    Button[0].initButton(&TFT, 60, 100, 100, 40, WHITE, MAGENTA, BLACK, "Red", 2);
    Button[1].initButton(&TFT, 180, 100, 100, 40, WHITE, MAGENTA, BLACK, "Blue", 2);
    Button[2].initButton(&TFT, 60, 200, 100, 40, WHITE, MAGENTA, BLACK, "Green", 2);
    Button[3].initButton(&TFT, 180, 200, 100, 40, WHITE, MAGENTA, BLACK, "Yellow", 2);
    Button[0].drawButton();
    Button[1].drawButton();
    Button[2].drawButton();
    Button[3].drawButton();
}

void initStartPage()
{
    uint16_t TFTID = TFT.readID();
    TFT.begin(TFTID);
    TFT.fillScreen(BLACK);
    TFT.setRotation(0);
    TFT.setCursor(15, 140);
    TFT.setTextColor(RED);
    TFT.setTextSize(2);
    TFT.setTextWrap(false);
    TFT.print("www.sanatbazar.com");
}

void setBackColor(int color)
{
    TFT.fillScreen(color);
    makeIcons();
}

void checkButtonPressed()
{
    for (int i = 0; i < 4; i++)
    {
        Button[i].press(touchSensed() && Button[i].contains(touchX, touchY));
        if (Button[i].justReleased())
        {
            Button[i].drawButton();
        }
        if (Button[i].justPressed())
        {
            Button[i].drawButton(true);
            setBackColor(color[i]);
        }
    }
}

void setup()
{
    initStartPage();
    delay(2000);
    TFT.fillScreen(BLACK);
    makeIcons();
}

void loop()
{
    checkButtonPressed();
}


در این برنامه ابتدا کتابخانه‌های ضروری فراخوانی شده و چند رنگ اصلی مورد استفاده تعریف شده‌اند. چهار کلید و رنگ‌های هر کدام به صورت آرایه‌ای از اشیا و رنگ‌ها تعریف شده‌اند. این کار باعث می‌شود بتوانیم به راحتی به آنها آدرس‌دهی کنیم و روند کدنویسی را راحت‌تر می‌کند:

Adafruit_GFX_Button Button[4]; // redButton, blueButton, greenButton, yellowButton;
uint16_t color[4] = {RED, BLUE, GREEN, YELLOW};

در ادامه تنظیمات صفحه لمسی قرار دارد. برای داشتن یک لمس دقیق باید محدوده قابل لمس برای برنامه تعریف شود. برای این کار ابتدا از مسیر File → Examples → MCUFRIEND_kbv مثال آماده TouchScreen_Calibr_native را اجرا کنید؛ نقاط مشخص شده روی نمایشگر را به ترتیب لمس کنید. در نهایت مقادیر چهار سمت نمایشگر نشان داده می‌شود. این مقادیر را در قسمت تنظیمات صفحه لمسی وارد کنید:

const int touchLeftLimit = 107, touchRightLimit = 910, touchUpLimit = 954, touchButtomLimit = 100;

متغیرهای touchX و touchY مختصات نقطه لمس‌شده است که در ادامه مورد استفاده قرار می‌گیرد:

int touchX, touchY;

تابعtouchSensedنقطه لمس‌شده را ثبت کرده و در صورتی که میزان فشار آن مناسب باشد، ابتدا محل نقطه مورد نظر را با طول و عرض نمایشگر هماهنگ کرده و مقدار true را می‌دهد:

bool touchSensed()
{
    TSPoint touchPoint = touch.getPoint();
    pinMode(YP, OUTPUT);
    pinMode(XM, OUTPUT);
    digitalWrite(YP, HIGH);
    digitalWrite(XM, HIGH);
    bool pressed = (touchPoint.z > minPressure && touchPoint.z < maxPressure);
    if (pressed)
    {
        touchX = map(touchPoint.x, touchLeftLimit, touchRightLimit, 0, TFT.width());
        touchY = map(touchPoint.y, touchUpLimit, touchButtomLimit, 0, TFT.height());
    }
    return pressed;
}

تابعmakeIconsچهار کلیدی که قبلا تعریف شده بود را با مشخصات مورد نظر (اندازه، محل کلید، رنگ و عنوان) می‌سازد:

void makeIcons()
{
    Button[0].initButton(&TFT, 60, 100, 100, 40, WHITE, MAGENTA, BLACK, "Red", 2);
    Button[1].initButton(&TFT, 180, 100, 100, 40, WHITE, MAGENTA, BLACK, "Blue", 2);
    Button[2].initButton(&TFT, 60, 200, 100, 40, WHITE, MAGENTA, BLACK, "Green", 2);
    Button[3].initButton(&TFT, 180, 200, 100, 40, WHITE, MAGENTA, BLACK, "Yellow", 2);
    Button[0].drawButton();
    Button[1].drawButton();
    Button[2].drawButton();
    Button[3].drawButton();
}

تابعinitStartPageصفحه آغازین نمایشگر شامل آدرس سایت صنعت‌بازار با پس‌زمینه مشکی را نشان می‌دهد:

void initStartPage()
{
    uint16_t TFTID = TFT.readID();
    TFT.begin(TFTID);
    TFT.fillScreen(BLACK);
    TFT.setRotation(0);
    TFT.setCursor(15, 140);
    TFT.setTextColor(RED);
    TFT.setTextSize(2);
    TFT.setTextWrap(false);
    TFT.print("www.sanatbazar.com");
}

تابعsetBackColorیک رنگ را به عنوان ورودی گرفته و پس‌زمینه را به همان رنگ تغییر می‌دهد:

void setBackColor(int color)
{
    TFT.fillScreen(color);
    makeIcons();
}

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

void checkButtonPressed()
{
    for (int i = 0; i < 4; i++)
    {
        Button[i].press(touchSensed() && Button[i].contains(touchX, touchY));
        if (Button[i].justReleased())
        {
            Button[i].drawButton();
        }
        if (Button[i].justPressed())
        {
            Button[i].drawButton(true);
            setBackColor(color[i]);
        }
    }
}

برنامه اصلی به این صورت است که ابتدا صفحه آغاز نمایش داده شده و ٢ ثانیه مکث می‌کند، سپس کلیدها ساخته شده و در صورتی که یکی از آنها لمس شود، رنگ پس‌زمینه تغییر خواهد کرد.

void setup()
{
    initStartPage();
    delay(2000);
    TFT.fillScreen(BLACK);
    makeIcons();
}

void loop()
{
    checkButtonPressed();
}

نتیجه‌گیری

در این آموزش با مباحث پایه در تولید تصاویر گرافیکی در کامپیوتر و نحوه کار با نمایشگر لمسی TFT را یاد گرفتید. با نمایشگر لمسی می‌توانید پروژه‌هایتان را به وسیله‌های هوشمند تبدیل کنید.
در آموزش بعدی، نحوه راه‌اندازی و کار با موتور DC را خواهید آموخت.
نظرات شما باعث بهبود محتوای آموزشی ما می‌شود. اگر این آموزش را دوست داشتید، همین‌طور اگر سوالی در مورد آن دارید، از شنیدن نظراتتان خوشحال خواهیم شد.

خواندن 8383 دفعه
داوود درستکار

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

کاربرانی که در این گفتگو شرکت کرده اند

نظرات (20)

  1. امیر

سلام وقت بخیر من دارم با smart GPU و arduino یک نوع smartwatch می سازم ، می خواستم بدونم این وسیله GPS دارد یا خیر ؟؟؟؟

 
  1. ابوالفضل ملک پور    امیر

سلام. تا جایی که میدونم نه، ولی دو راه حل وجود دارد:
۱.آردوینو یک ماژول gps دارد که مانند این ماژول باید بخرید. این روش فقط به شما اطلاعات طول و عرض رو به شما میده.?
۲.میتوانید از یک موبایل استفاده کنید، و با wi-fi به گوشی وصل شوید و اطلاعات gps...

سلام. تا جایی که میدونم نه، ولی دو راه حل وجود دارد:
۱.آردوینو یک ماژول gps دارد که مانند این ماژول باید بخرید. این روش فقط به شما اطلاعات طول و عرض رو به شما میده.?
۲.میتوانید از یک موبایل استفاده کنید، و با wi-fi به گوشی وصل شوید و اطلاعات gps رو از آن بگیرید(این راه فقط در صورتی درست کار میکنه که آردوینو گوشی و شخص به هم نزدیک باشند و به خاطر درست بودن اطلاعات باید گوشی درست کنار شخص باشد.).?

ادامه مطلب
 
  1. پشتیبانی    امیر

سلام امیر عزیز
نه آردوینو و نه پردازنده گرافیکی دارای GPS نیستند
موفق باشید

 
  1. ghasem akbari

سلام ببخشید این اموزش برای چه درایور ال سی دی هست؟
یعنی برای این پروژه درایور 9325 مناسب هست یا 9341
و یا اگر درایور دیگری رو انتخاب کنیم چهطور باید درایور رو به برنامه معرفی کنیم

 
  1. پشتیبانی    ghasem akbari

سلام دوست عزیز
ایدی LCD شما با موردی که در کتابخانه بیان شده باید متفاوت نباشد. برای درایور به کتابخانه ها و بحث موجود در انجمن (پرسش و پاسخ) زیر از همین سایت صنعت بازار مراجعه کنید.
موفق باشید

 
  1. کیوان

سلام
امیدوارم حالتون خوب باشه
ماژول lcd tft که مخصوص اردوینو آنو طراحی شده رو میشه با برد arduino due راه‌اندازی کرد؟
چون ولتاژ کاری arduino due برابر 3.3 ولته میترسم آسیب ببینه.

 
  1. پشتیبانی    کیوان

سلام دوست عزیز
بله اگر شما می خواهید تصاویر با رزولوشن بالا و یا حرکات با سرعت بالا داشته باشید می تونید از آردوینو DUE استفاده کنید. ضمن اینکه ولتاژ کاری ماژول ال سی دی هم 3.3 و 5 است. برای آموزش صحیح راه اندازی با due‌ به لینک زیر مراجعه کنید:

ادامه مطلب
 
  1. er

سلام
می تونید راهنمایی کنید که چرا برای من کار نمی کنه
کتابخانه ها نصب هست و خطایی هم نمیده ولی چیزی در صفحش نمیاد جز سفیدی

 
  1. پشتیبانی    er

سلام دوست عزیز
این حالت معمولا زمانی رخ میده که ایدی LCD شما با موردی که در کتابخانه بیان شده متفاوت باشه. پیشنهاد میشه به بحثی که در بخش انجمن (پرسش و پاسخ) سایت صنعت بازر در لینک قرار داده شده زیر هست مراجعه کنید و قطعا مشکلتون برطرف میشه....

سلام دوست عزیز
این حالت معمولا زمانی رخ میده که ایدی LCD شما با موردی که در کتابخانه بیان شده متفاوت باشه. پیشنهاد میشه به بحثی که در بخش انجمن (پرسش و پاسخ) سایت صنعت بازر در لینک قرار داده شده زیر هست مراجعه کنید و قطعا مشکلتون برطرف میشه. همچنین, ممنون میشیم اگر با تغییر کتابخانه به نتیجه رسیدید, کتابخانه جدید خودتون با نوع ایدی LCD رو در همان بحث آپلود کنید تا دیگر دوستان هم استفاده کنند.
موفق باشید

ادامه مطلب
 
  1. علیرضا

Adafruit_GFX_Button' does not name a type; did you mean 'Adafruit_GFX'?

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

 
  1. پشتیبانی    علیرضا

همچنین علیرضا عزیز به لینک زیر برای دستورات مراجعه کنید:
https://bit.ly/31qf8xT
با تشکر

 
  1. پشتیبانی    علیرضا

سلام دوست عزیز
احتمال بسیار زیاد در تعریف قسمتی از کدتون که مربوط به Adafruit_GFX_Button Button[4]; اشتباه شده که دوباره در قسمت آموزش بررسی کنید. همچنین, با توجه به اپدیت شدن کتابخانه باید توجه کنید که دستورات برای کتابخانه ها تغییر نکرده باشند....

سلام دوست عزیز
احتمال بسیار زیاد در تعریف قسمتی از کدتون که مربوط به Adafruit_GFX_Button Button[4]; اشتباه شده که دوباره در قسمت آموزش بررسی کنید. همچنین, با توجه به اپدیت شدن کتابخانه باید توجه کنید که دستورات برای کتابخانه ها تغییر نکرده باشند. مثلا در کتابخانه "Adafruit_SSD1306.h" دستور "display.begin(...)" ممکن است در برخی اپدیت ها نیاز باشد به دستور "setup()" تغییر یابد.
موفق باشید

ادامه مطلب
 
  1. علیرضا

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

 
  1. پشتیبان    علیرضا

سلام علیرضا عزیز
متاسفانه کتابهای موجود (حداقل اونایی که من میشناسم) یا با دید آکادمیک نوشته شدن و کاربردی نیستن و بیشتر آدم رو خسته می کنند؛ یا اینکه تمام مطالب رو پوشش نمیدن و نمیشه خیلی روشون حساب کرد. راستش من که خیلی گشتم ولی پیدا نکردم!
ما...

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

ادامه مطلب
 
  1. علیرضا

سلام ممنون از مطالب مفیدتون . میشه راهنمایی کنید که چه کتابی بخرم که همه آموزش ها کامل توش باشه چون از سایت مطالعه سخته تازه رجوع به اون هم سخته ، بازم ممنون .

 
  1. آرش

سلام ایا این نمایشگر همه پین هارو اشغال میکنه و پین دیگری خالی نمیمنه؟

 
  1. امیر    آرش

میشه از اردوینو مگا استفاده کرد؟

 
  1. پشتیبان    امیر

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

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

ادامه مطلب
 
  1. پشتیبان    آرش

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

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

ادامه مطلب
 
هیچ نظری در اینجا وجود ندارد

نظر خود را اضافه کنید.

ارسال نظر بعنوان یک مهمان
پیوست ها (0 / 3)
مکان خود را به اشتراک بگذارید
عبارت تصویر زیر را بازنویسی کنید. واضح نیست؟

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

ما را دنبال کنید:

Copyright © 2017-2018 | Sanatbazar.com