راه اندازی LCD کاراکتری با ماژول رابط سریال I2C و آردوینو

راه اندازی ال سی دی کاراکتری با i2c

اگر تا به حال سعی کرده‌اید یک ال سی دی کاراکتری را به یک آردوینو متصل کنید، احتمالاً متوجه شده‌اید که تعداد زیادی از پین‌های آردوینو مورد استفاده قرار می‌گیرند. حتی در مد 4 بیتی، به 7 پین از آردوینو نیاز خواهیم داشت که معادل نیمی از پین‌های ورودی/خروجی دیجیتال آردوینو می‌باشد. برای حل مشکل تعداد اتصالات بالا می‌توان یک صفحه نمایش LCD را با رابط سریال I2C به کار گرفت. در این حالت فقط از 2 پین ورودی/خروجی استفاده می‌شود و نمایشگر می‌تواند با سایر دستگاه‌های I2C نیز به اشتراک گذاشته شود.

ویژگی‌های سخت‌افزاری ال‌ سی‌ دی کاراکتری با رابط سریال I2C

خوب است قبل از شروع به راه اندازی LCD کاراکتری با ماژول رابط سریال I2C و آردوینو، با قطعه مورد بحثمان یعنی LCD کارکتری 16*2 همراه با رابط I2C کمی بیشتر آشنا شویم. همانطوری که در تصویر زیر پیداست این محصول از یک LCD کاراکتری با تراشه کنترلر HD44780 و یک آداپتور تشکیل شده‌است که جزئیات مربوط به آن را می‌توانید در ادامه آموزش، مورد بررسی قرار دهید.

 ال‌ سی‌ دی کاراکتری 16*2 با رابط سریال I2C

کاربرد ماژول نمایشگر ال‌ سی‌ دی کاراکتری چیست؟

همانطورکه از نام LCD های کاراکتری مشخص است، این نوع نمایشگرها فقط برای نمایش متن یا کاراکتر مناسب هستند. برای مثال یک LCD کاراکتری 16*2 می‌تواند 32 کاراکتر اسکی را در دو ردیف 16‌تایی نمایش دهد.

بلاک‌های تشکیل شده از پیکسل در نمایشگر ال سی دی کاراکتری 16*2

اگر با دقت به تصویر بالا نگاه كنيد، می‌توانید بلوک‌های مستطيلی شكل مربوط به هر كاراكتر و پيكسل‌های آن را مشاهده كنيد. هر يک از اين مستطيل‌‌ها شامل شبكه ای از 8×5 پيكسل می‌باشند.

معرفی ماژول درایور رابط سریال I2C

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

آی سی PCF8574 قرارگرفته‌شده روی ماژول درایور رابط سریال I2C

یک پتانسیومتر کوچک نیز برروی ماژول I2C تعبیه شده‌است که با استفاده از آن می‌توانید به راحتی کنتراست یا نور نمایشگر را تنظیم نمایید.

وجود پتانسیومتر و جامپر روی ماژول I2C برای تنظیم کنتراست و نور LCD کاراکتری

برای تأمین نور پس‌زمینه ال‌ سی‌ دی، یک جامپر بر روی ماژول رابط I2C وجود دارد که درصورت تمایل به کنترل شدت نور پس‌زمینه نمایشگر خود، می‌توانید این جامپر را برداشته و به پین‌هدری که برچسب “LED” دارد، یک ولتاژ خارجی اعمال کنید.

نحوه‌ی آدرس‌دهی رابط I2C

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

پد های ماژول رابط سریال  I2C برای آدرس‌دهی

نکته مهمی که در اینجا باید به آن اشاره کرد این است که چندین شرکت مختلف از جمله Texas Instruments و NXP Semiconductors تراشه PCF8574 را تولید می‌کنند. بنابراین آدرس I2C نمایشگر شما بسته به اینکه از تراشه کدام سازنده استفاده می‌کنید، متفاوت خواهد بود که در ادامه تفاوت آن‌ها ذکر شده‌است.

تراشه PCF8574 ساخت Texas Instruments

بر اساس دیتاشیت شرکت تگزاس، سه بیت مشخص‌کننده آدرس (A0، A1 و A2)، در انتهای رجیستر هفت بیتی آدرس I2C قرار دارد.

رجیستر هفت بیتی I2C با سه بیت برای آدرس‌دهی

با توجه به اینکه که سه ورودی آدرس وجود دارد و هر کدام می‌توانند در دو وضعیت HIGH یا LOW قرار گیرند، بنابراین می‌توانیم هشت (3^2) ترکیب یا به عبارتی 8 آدرس مختلف داشته باشیم. هر یک از ورودی‌ها با استفاده از مقاومت های pullup روی برد، در وضعیت HIGH قرار دارند، بنابراین آدرس I2C پیش فرض تراشه PCF8574، آدرس 0x27 می‌باشد.

زمانی که یک جامپر (یک جفت از پین‌های آدرس) اتصال کوتاه شود، وضعیت آن ورودی به LOW تغییر می‌کند. چنانچه هر سه جامپر اتصال کوتاه شود، آدرس I2C معادل 0x20 خواهد بود. به‌این ترتیب می‌توانید آدرس‌های مختلف از 0x20 تا 0x27 را داشته باشید. در شکل زیر 8 آدرس I2C مختلف نمایش داده شده‌است.

آدرس‌دهی 0x20 تا 0x27 در تراشه‌های ساخت شرکت تگزاس

تراشه PCF8574 ساخت  NXP Semiconductor

طبق دیتاشیت شرکت NXP Semiconductor، سه بیت مشخص کننده آدرس (A0، A1 و A2)، در انتهای رجیستر هفت بیتی آدرس I2C قرار دارند.

وجود سه بیت در آخر رجیستر هفت بیتی آدرس‌دهی I2C

همانند حالت قبل سه ورودی آدرس می‌توانند یکی از دو وضعیت HIGH یا LOW را داشته باشند. بنابراین هشت (3^2) ترکیب یا به عبارتی 8 آدرس مختلف می‌توان داشت. هر یک از ورودی‌ها با استفاده از مقاومت‌های pullup روی برد، در وضعیت HIGH قرار دارند، بنابراین آدرس I2C پیش فرض تراشه PCF8574، معادل 0x3F خواهد بود.

زمانی که یک جامپر (یک جفت از پین‌های آدرس) اتصال کوتاه شود، وضعیت آن ورودی به LOW تغییر می‌کند. چنانچه هر سه جامپر اتصال کوتاه شود، آدرس I2C معادل 0x38 خواهد بود. به این صورت می‌توانید آدرس‌های مختلف از 0x38 تا 0x3F داشته باشید. در شکل زیر 8 آدرس I2C مختلف نمایش داده شده‌است.

آدرس دهی 0x38 تا 0x3F در تراشه‌های ساخت شرکت  NXP Semiconductor
  • با این تفاسیر آدرس I2C نمایشگر LCD شما به احتمال زیاد 0x27 یا 0x3F است. اگر آدرس I2C نمایشگر مشخص نباشد، برای مشخص کردن آن روش ساده‌ای وجود دارد که در این آموزش به آن اشاره شده است.

پین‌های ماژول ال ‌سی‌ دی کاراکتری 16*2 همراه با رابط سریال I2C

ماژول‌های ال‌ سی‌ دی کاراکتری همراه با درایور I2C، تنها 4 پین دارند و این یکی از مزیت‌های مهم این قطعه به‌شمار می‌آید:

پایه‌های خروجی ماژول رابط سریال I2C متصل به ال سی دی

GND : پین زمین است و به پین  GNDماژول آردوینو متصل می‌شود.

VCC : پین تغذیه نمایشگر است و به خروجی 5 ولت آردوینو یا به یک منبع تغذیه خارجی 5 ولت وصل می‌شود.

SDA : پین داده I2C است.

SCL : پین کلاک I2C است.

راه اندازی ال سی دی کاراکتری با ماژول I2C و آردوینو

اتصال یک ال سی دی دارای ماژول رابط I2C، بسیار ساده‌تر از اتصال یک ال‌سی‌دی کاراکتری معمولی استاندارد به آردوینو است، زیرا تنها با استفاده از 4 پین در ماژول برد آردوینو می‌توانید این مدل ال‌ سی‌ دی را راه ‌اندازی کنید.

برای شروع پایه  VCC ماژول را به پایه خروجی 5 ولت آردوینو و پایه GND آن را به پایه زمین آردوینو وصل کنید. پین‌های باقی‌مانده برای ارتباط I2C استفاده می‌شوند. هر برد آردوینو دارای شماره پایه‌های I2C مختلفی است که باید به درستی متصل شوند. در بردهای آردوینو R3، پین‌های داده و کلاک نزدیک به پایه AREF قرار دارند و با نام‌هایA5 (SCL)  و A4 (SDA) مشخص شده‌اند.

در جدول زیر پایه‌های داده و کلاک چندین برد آردوینو مختلف ذکر شده‌است.

مدل برد آردوینوSCLSDA
Arduino UnoA5A4
Arduino NanoA5A4
Arduino Mega2120
Leonardo/Micro32

نحوه اتصال نمایشگر کاراکتری دارای رابط سریال I2C به برد آردوینو

باتوجه به دیاگرام زیر می‌توانید نحوه اتصال ماژول ال‌سی‌دی به آردوینو UNO را ببینید و به‌درستی انجام دهید:

دیاگرام نحوه اتصال و راه اندازی ال سی دی کاراکتری با ماژول I2C و آردوینو

تنظیم کنتراست نور ال ‌سی‌ دی کاراکتری

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

ایجاد تغییر در نور و کنتراست LCD کاراکتری متصل به آردوینو و I2C

نصب کتابخانه LiquidCrystal_I2C

قدم بعدی برای ادامه کار و راه اندازی رابط سریال I2C با آردوینو، نصب کتابخانه LiquidCrystal_I2C است که با استفاده از این کتابخانه می‌توانید نمایشگرهای دارای I2C را با استفاده از توابعی که بسیار شبیه به توابع کتابخانه LiquidCrystal هستند، به‌سادگی کنترل کنید.

برای نصب کتابخانه به مسیر Sketch > Include Library > Manage Libraries بروید. پس از آن منتظر بمانید تا Library Manager فهرست کتابخانه‌ها را دانلود و کتابخانه‌های نصب شده را به‌روزرسانی ‌کند.

نحوه اضافه کردن کتابخانه در IDE آردوینو از منوی Sketch

سپس جستجوی خود را با نوشتن عبارت “Liquidcrystal” فیلتر کنید. از میان گزینه‌های موجود کتابخانه LiquidCrystal I2C را انتخاب و بر روی گزینه Install کلیک کنید تا نصب شود.

انتخاب و نصب کتابخانه LiquidCrystal_I2C در آردوینو

تعیین آدرس I2C

همانطورکه اشاره شد، آدرس I2C نمایشگر شما به سازنده آن بستگی دارد. اگر ماژول درایور روی LCD دارای تراشه PCF8574 ساخت Texas Instruments باشد، آدرس I2C آن 0x27 است و چنانچه ساخت NXP Semiconductors باشد، آدرس I2C آن 0x3F است.

در صورتی که آدرس I2C نمایشگر شما مشخص نیست، می‌توانید برنامه ساده‌ی اسکنر I2C را اجرا کنید. این برنامه باس I2C شما را اسکن نموده و آدرس هر دستگاه متصل به باس را بر می‌گرداند. برای این‌کار به مسیر File > Examples > Wire > i2c_scanner بروید و برنامه اسکنر را باز کنید.

مشخص کردن آدرس i2c مورد استفاده در پروژه

در این مرحله کد زیر را در آردوینو IDE بارگذاری می‌کنیم.

#include <Wire.h>

void setup() {
  Wire.begin();

  Serial.begin(9600);
  while (!Serial); // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}

void loop() {
  int nDevices = 0;

  Serial.println("Scanning...");

  for (byte address = 1; address < 127; ++address) {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    byte error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println("  !");

      ++nDevices;
    } else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0) {
    Serial.println("No I2C devices found\n");
  } else {
    Serial.println("done\n");
  }
  delay(5000); // Wait 5 seconds for next scan
}

پس از آپلود کد بر روی آردوینو، مانیتور سریال را باز و بادریت را بر روی 9600 تنظیم کنید و در اینجا است که آدرس I2C نمایشگر به شما نمایش داده خواهد شد.

نمایش آدرس I2C در  سریال بادریت آردوینو بعد از آپلود کد

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

بعد از انجام مراحلی که برای شما توضیح دادیم نوبت به بخش پایانی این پروژه یعنی اجرای کدها و دیدن خروجی روی ال سی دی با ماژول درایور I2C است:

با اجرای کد زیر عبارت “Hello World!” در خط اول نمایشگر و عبارت “LCD Tutorial” در خط دوم چاپ خواهد شد.

توجه داشته باشید قبل از آپلود کد بر روی آردوینو، به منظور عملکرد صحیح آن، لازم است یک تغییر جزئی را اعمال کنید و آن هم تغییر آدرس I2C و ابعاد نمایشگر است. برای مثال اگر از LCD کاراکتری 20×4 استفاده می‌کنید، در خط زیر از برنامه به جای 16 عدد 24 و به جای 2 عدد 4 را وارد کنید. همچنین آدرس I2C ماژول خود را به جای ” 0x3F ” وارد نمایید.

// enter the I2C address and the dimensions of your LCD here
LiquidCrystal_I2C lcd(0x3F, 16, 2);

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

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address to 0x3F for a 16 chars and 2 line display

void setup() {
  lcd.init();
  lcd.clear();         
  lcd.backlight();      // Make sure backlight is on
  
  // Print a message on both lines of the LCD.
  lcd.setCursor(2,0);   //Set cursor to character 2 on line 0
  lcd.print("Hello world!");
  
  lcd.setCursor(2,1);   //Move cursor to character 2 on line 1
  lcd.print("LCD Tutorial");
}

void loop() {
}

اگر همه چیز به درستی انجام شده‌باشد، باید بر روی نمایشگر خود دو عبارت مانند تصویر زیر را مشاهده کنید.

نمایش خروجی پروژه راه اندازی ال سی دی کاراکتری با ماژول I2C و آردوینو

توضیحات کد

برنامه‌ای که آپلود شد با فراخوانی کتابخانه LiquidCrystal_I2C آغاز می‌شود.

#include <LiquidCrystal_I2C.h>

مرحله بعد ایجاد یک شی LiquidCrystal_I2C است. ساختار LiquidCrystal_I2C شامل سه ورودی آدرسI2C، تعداد ستون‌ها و سطرهای نمایشگر می‌باشد:

LiquidCrystal_I2C lcd(0x3F,16,2);

در تابع setup، سه تابع فراخوانی می‌شود. اولین تابع ()init است که تنظیمات مربوط به ال‌سی‌دی با استفاده از این تابع انجام می‌شود. تابع دوم ()clear است، این تابع صفحه ال‌ سی‌ دی را پاک می‌کند و مکان‌نما را در گوشه بالا سمت چپ قرار می‌دهد. تابع سوم، ()backlight نام دارد که نور پس‌زمینه نمایشگر را روشن می‌کند.

lcd.init();
lcd.clear();         
lcd.backlight();

سپس تابع setCursor(2, 0) برای انتقال مکان‌نما به ستون سوم از سطر اول فراخوانی می‌شود. موقعیت مکان‌نما مشخص می‌کند متن موردنظر در کجا ظاهر شود. مشخصۀ گوشه بالا سمت چپ معادل col=0 و row=0 می‌باشد.

lcd.setCursor(2,0);

نهایتاً از تابع ()print برای چاپ عبارت “Hello world!” بر روی نمایشگر استفاده می‌کنیم.

lcd.print("Hello world!");

به همین صورت با دو خط زیر، مکان‌نما را به ستون سوم از ردیف دوم منتقل و عبارت “LCD Tutorial” را در بر روی ال‌ سی‌ دی 16*2 چاپ می‌کنیم.

lcd.setCursor(2,1);
lcd.print("LCD Tutorial");

آشنایی با توابع کاربردی کتابخانه LiquidCrystal_I2C

توابع کاربردی زیادی وجود دارد که می‌توانید با شیء LiquidCrystal_I2C از آن‌ها استفاده کنید که ما در ادامه، تعدادی از این توابع را برای شما عزیزان به‌طور مختصر توضیح داده‌ایم:

  • تابع ()lcd.home : بدون پاک کردن صفحه نمایش، مکان‌نما را در گوشه بالا سمت چپ ال‌سی‌دی قرار می‌دهد.
  • تابع ()lcd.blink : یک بلوک 5×8 پیکسلی را در موقعیتی که کاراکتر بعدی در آن نوشته می‌شود به صورت چشمک‌زن نمایش خواهد داد.
  • تابع ()lcd.noBlink : مکان‌نما چشمک‌زن را خاموش می‌کند.
  • تابع ()lcd.cursor : در موقعیتی که کاراکتر بعدی در آن نوشته می‌شود، یک خط تیره نمایش می‌دهد.
  • تابع ()lcd.noCursor : مکان‌نما را پنهان می‌کند.
  • تابع ()lcd.scrollDisplayRight : محتوای نمایش داده شده بر روی ال‌سی‌دی را به اندازه یک space به سمت راست شیفت می‌دهد. برای حرکت دادن پیوسته متن روی ال‌‌سی‌‌‎دی، می‌توانید از این تابع در یک حلقه for استفاده کنید.
  • تابع ()lcd.scrollDisplayLeft : محتوای نمایش داده شده بر روی ال‌سی‌دی را به اندازه یک space به سمت چپ شیفت می‌دهد. برای حرکت دادن پیوسته متن روی ال‌‌سی‌‌دی، می‌توانید از این تابع در یک حلقه for استفاده کنید.
  • تابع ()lcd.noDisplay : بدون از دست رفتن متن نشان داده شده روی ال‌سی‌دی، آن را خاموش می‌کند.
  • تابع ()lcd.display : پس از خاموش شدن نمایشگر با ()noDisplay، این تابع ال‌سی‌دی را روشن کرده و متن و مکان‌نما را طبق آخرین وضعیت آن‌ها بازیابی می‌کند.

ایجاد و نمایش کاراکترهای دلخواه روی LCD کاراکتری

در این زمان که با نحوه راه اندازی LCD کاراکتری با ماژول رابط سریال I2C و آردوینو به‌خوبی آشنا شدید، می‌توان گفت کلید کار با این نمایشگر های را به‌دست آورده‌اید و همانطورکه منظور ما را متوجه شده‌اید زمان آن رسیده تا با مهارت و خلاقیتی که دارید بتوانید اشکال و کاراکترهای جذاب خود را بسازید و در LCD به نمایش بگذارید حتی اگر کاراکتر مورد نظر شما در جدول استاندارد کاراکترهای اسکی وجود ندارد! اما چطور؟!

همانطورکه در ابتدای این آموزش اشاره کردیم، یک کاراکتر تشکیل شده از یک ماتریس 8×5 پیکسل می‌باشد، بنابراین کاراکتر دلخواه شما نیز باید در این ماتریس تعریف شود. ما نیز برای تعریف یک کاراکتر از تابع ()createChar استفاده می‌کنیم.

برای به‌کارگیری تابع ()createChar، ابتدا باید یک آرایه 8 بایتی را تعریف کنید. به طوری‌که هر بایت متناظر با یک سطر از ماتریس 8×5 باشد. ارقام 0 و 1 در هر بایت بیانگر این است که در یک سطر کدامیک از پیکسل‌ها خاموش و کدامیک روشن باشند به همین سادگی!

خوب است بدانید که همه کاراکترهای تعریف شده توسط کاربر در حافظه CGRAM نمایشگر ذخیره می‌شوند، حالا این که این نوع حافظه چه کاربردی دارد و در چه قطعه‌ای وجود دارد را می‌توانید در ادامه مطالعه کنید.

حافظه‌های CGROM و CGRAM در نمایشگرهای کاراکتری

هر مدل LCD الکترونیکی كه دارای تراشه كنترلر هيتاچی HD44780 باشد، معمولاً با دو نوع حافظه برای ذخيره كاراكترها تعريف شده‌ است. اين حافظه‌ها عبارتند‌از CGRAM (Character Generator RAM) و CGRAM (Character Generator ROM) .

CGROM يک حافظه غير فرار است كه محتويات آن قابل ويرايش نيست. در مقابل، محتويات حافظه CGRAM را هر موقع كه بخواهيد می‌توانید ويرايش کنید.

ما در اجرای پروژه‌هایی همچون راه اندازی LCD کاراکتری با ماژول رابط سریال I2C، می‌بایست به کاربرد و وظیفه هر مدل حافظه در نمایشگرهای کاراکتری دقت کنیم، برای مثال حافظه CGROM برای ذخيره سازی همه فونت‌های دائمی كه با استفاده از كدهای اسكی مربوطه قابل نمايش هستند، به‌كار گرفته می‌شود. به عنوان نمونه اگر كد 0x41 نوشته شود، كاراكتر A نمايش داده خواهد شد. حافظه ديگر يعنی CGRAM برای ذخيره كاراكترهای تعريف شده كاربران استفاده می‌شود. اين حافظه دارای محدوديت ظرفيت 64 بايت است. بنابراين برای يک ال‌سی‌دی كه دارای خانه‌های پيكسلی 8×5 است، حداكثر 8 كاراكتر دلخواه را می‌توان در حافظه GCRAM ذخيره نمود. در حالی‌كه در مورد ال‌ سی‌ دی با خانه‌های پيكسلی 10×5 تنها می‌توان 4 كاراكتر دلخواه را ذخيره کرد.

اپلیکیشن تولید کاراکترهای دلخواه

برای نمایش کاراکتر خاص روی LCD کاراکتری دارای I2C يک برنامه نرم افزاری ساده به نام Custom character generator طراحی شده‌است. در این اپلیکیشن می‌‍‌توانید پیکسل‌های یک کاراکتر را مشاهده کنید و با كليک بر روی هر يک از پيكسل‌ آن‌ها را روشن یا خاموش کنید. با این کار، كد كاراكتر متناسب با آن شکل ايجاد خواهد شد که می‌توانید فقط با کپی کردن آن در محیط IDE آردوینو، خروجی موردنظرتان را روی نمایشگر داشته باشید.

byte Character[8] =
{
0b00000,
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000
};

همانطور که می‌بینید ذهن انسان هیچگاه در تصور کاراکترهای مختلف محدودیت نخواهد داشت. اما کتابخانه LiquidCrystal_I2C تنها از 8 کاراکتر دلخواه پشتیبانی می‌کند.

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

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

 #include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);  // set the LCD address to 0x3F for a 16 chars and 2 line display

// make some custom characters:
byte Heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

byte Bell[8] = {
0b00100,
0b01110,
0b01110,
0b01110,
0b11111,
0b00000,
0b00100,
0b00000
};


byte Alien[8] = {
0b11111,
0b10101,
0b11111,
0b11111,
0b01110,
0b01010,
0b11011,
0b00000
};

byte Check[8] = {
0b00000,
0b00001,
0b00011,
0b10110,
0b11100,
0b01000,
0b00000,
0b00000
};

byte Speaker[8] = {
0b00001,
0b00011,
0b01111,
0b01111,
0b01111,
0b00011,
0b00001,
0b00000
};


byte Sound[8] = {
0b00001,
0b00011,
0b00101,
0b01001,
0b01001,
0b01011,
0b11011,
0b11000
};


byte Skull[8] = {
0b00000,
0b01110,
0b10101,
0b11011,
0b01110,
0b01110,
0b00000,
0b00000
};

byte Lock[8] = {
0b01110,
0b10001,
0b10001,
0b11111,
0b11011,
0b11011,
0b11111,
0b00000
};

void setup() 
{
  lcd.init();
  // Make sure backlight is on       
  lcd.backlight();

  // create a new characters
  lcd.createChar(0, Heart);
  lcd.createChar(1, Bell);
  lcd.createChar(2, Alien);
  lcd.createChar(3, Check);
  lcd.createChar(4, Speaker);
  lcd.createChar(5, Sound);
  lcd.createChar(6, Skull);
  lcd.createChar(7, Lock);

  // Clears the LCD screen
  lcd.clear();

  // Print a message to the lcd.
  lcd.print("Custom Character");
}

// Print All the custom characters
void loop() 
{ 
  lcd.setCursor(0, 1);
  lcd.write(0);

  lcd.setCursor(2, 1);
  lcd.write(1);

  lcd.setCursor(4, 1);
  lcd.write(2);

  lcd.setCursor(6, 1);
  lcd.write(3);

  lcd.setCursor(8, 1);
  lcd.write(4);

  lcd.setCursor(10, 1);
  lcd.write(5);

  lcd.setCursor(12, 1);
  lcd.write(6);

  lcd.setCursor(14, 1);
  lcd.write(7);
}

خروجی به شکل زیر خواهد بود:

نمایش اشکال دلخواه روی نمایشگر کاراکتری دارای I2C

توضیحات کد

پس از فراخوانی کتابخانه و ایجاد شی LCD، آرایه‌های کاراکترهای دلخواه تعریف می‌شوند. هر آرایه از 8 بایت تشکیل شده‌است که هر بایت بیانگر یک سطر در یک ماتریس 5×8 می‌باشد. این کد شامل هشت کاراکتر مختلف است. برای مثال برای کاراکتر قلب، در آرایه Heart[8] با اختصاص مقادیر 0 یا 1 به هر بیت، شکل قلب ساخته می شود (بیت 0 پیکسل را خاموش و بیت 1 آن را روشن می‌کند).

byte Heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

در تابع setup، از تابع createChar() برای ایجاد یک کاراکتر استفاده می‌کنیم. این تابع دو پارامتر دارد: پارامتر اول عددی بین 0 تا 7 برای رزرو یکی از هشت کاراکتر تعریف شده است و پارامتر دوم نام آرایه است.

lcd.createChar(0, Heart);

در تابع loop، برای نمایش کاراکتر موردنظر باید تابع write()فراخوانی شود. پارامتر ورودی این تابع همان شماره کاراکتر موردنظر می‌باشد.

lcd.setCursor(0, 1);
lcd.write(0);

سخن پایانی

در آغاز این آموزش با نحوه راه اندازی LCD کاراکتری با ماژول رابط سریال I2C با آردوینو به‌طور کامل آشنا شدیم و در ادامه با ایجاد تغییراتی در نمونه کد I2C گفته شده، متوجه شدیم که چگونه طرح و اشکال دلخواه خود را به سادگی روی نمایشگر ال سی دی کاراکتری نمایش دهیم .

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

مقالات مشابه

۱۲ دیدگاه. Leave new

  • سلام آیا استفاده از ماژول i2c در سرعت نمایش کاراکتر روی ال سی دی تاثیر می گزارد؟ یعنی استفاده از ۸ بیتی ال سی دی سرعت بیشتری دارد یا ماژول i2c؟

    پاسخ
    • درود برشما محمدمهدی عزیز
      طبیعتاً ۸ بیت ال سی دی سریعتر است زیرا ماژول داده I2C را دریافت کرده و به داده قابل فهم برای ال سی دی تبدیل می‌کند. به عبارت دیگر ماژول I2C یک رابط اضافی است که تاخیر ایجاد خواهد کرد اما این تاخیر در اندازه‌ای نیست که با چشم قابل مشاهده باشد.

      پاسخ
  • بسیار کامل و واضح و کاربردی🌸❤️

    پاسخ
  • سپاس از استاد گرامی🙇🏼‍♂️

    پاسخ
    • درود برشما دانش پژوه عزیز و محترم
      خیلی خوشحالیم که مثل همیشه از مطالعه و انجام پروژه های کاربردی در این آکادمی راضی هستید 🙂

      پاسخ
  • کارم بعد از روز ها راه افتاد
    أجرك عند الله

    پاسخ
    • درود بر شما حسین عزیز
      ما از شما ممنونیم که این نتیجه خوب را به اشتراک گذاشتید و ما را در خوش حالی خودتان سهیم کردید 🙂

      پاسخ
  • بسیار عالی و خوب

    پاسخ
    • ممنونیم ازت محمدجواد عزیز، امیدواریم از بقیه مقالات آکادمی روبوایکیو هم دیدن کنی و نظر خودت رو بهمون بگی 🙂

      پاسخ
  • ممنون از به اشتراک گذاری اطلاعاتت موفق باشید

    پاسخ
    • درود بر شما حیدر عزیز
      از همراهی شما بسیار سپاسگذاریم، امیدواریم در ادمه نیز بتوانیم مطالب و پروژه های کاربردی جدیدی را به شما دانش پژوه عزیز ارائه دهیم.
      با تشکر

      پاسخ

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

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

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات