آردوینو آردوینو Arduino Uno آموزش آردوینو نمایشگر LCD

آموزش راه اندازی ۳ مدل ال سی دی کاراکتری LCD با آردوینو Arduino

Arduino-character-LCD-Display-digispark
نوشته شده توسط پریسا پوربلورچیان

در پروژه‌ها نمایش نتیجه و Result خروجی هر سنسور از اهمیت ویژه‌ای برخوردار است. بررسی وضعیت و نمایش داده‌های سنسور در هر ثانیه بسیار مهم است. از این رو نمایشگرهای مختلفی بر این اساس تولید شده‌اند که هر کدام دارای ویژگی‌های منحصر به فردی می‌باشند. از جمله نمایشگرهای کاراکتری با ابعاد مختلف، نمایشگرهای OLED ، نمایشگرهای مدل Nokia و بسیاری دیگر که آموزش‌های متنوعی در دیجی اسپارک منتشر شده است. در این بین نمایشگرهای کاراکتری پرطرفدار و پرمصرف می باشند. ال سی دی های کاراکتری در ابعاد متنوع و مدل‌های مختلف تولید می‌شوند. همچنین قیمت بسیار مناسبی نسبت به دیگر نمایشگرها داشته و از این رو بسیار پرکاربرد هستند. کاربران زیادی خواستار آموزش و راه اندازی هر سه مدل ال سی دی کاراکتری ۲*۱۶ با جزییات کامل را داشته اند که در این پست به این موضوع خواهیم پرداخت. در ادامه این پست کامل با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

 

۱: معرفی ال سی دی کاراکتری ۲*۱۶

LCD کاراکتری ۱۶*۲ یکی از پایه‌ای ترین نمایشگرهای الکترونیکی می‌باشد. این LCD در بسیاری از مدارها کاربرد دارد. یکی از دلایل پر مصرف بودن این مدل ال سی دی در مقابل نمایشگرهایی همچون سون سگمنت، عدم محدودیت در نمایش کاراکترها می‌باشد. همچنین توانایی ساختن کارکترهای دلخواه را دارند. برای نمایش مقادیر و متن در کد نرم افزار آردوینو Arduino IDE نیاز به معرفی و تعریف چند تابع در کدها داریم. در ابتدا به معرفی پایه‌های ال سی دی LCD و سپس دستورات لازم برای نمایش کاراکتر در ال سی دی LCD می‌پردازیم.

 

معرفی پایه‌های ال سی دی LCD

پایه های ال سی دی کاراکتری از چپ به راست به صورت زیر است:

  • VSS = زمین  GND
  • VCC = تغذیه ۵ ولت
  • (VO (Display Contrast Pin = تنظیم شدت نور صفحه
  • (RS (Register Select = انتخاب رجیستر
  • (RW (Read/Write = پایه Read و Write
  • E = پایه Enable
  • D0 – D7 = پایه های دیتا
  • A = پایه Anode
  • K = پایه Cathode

 

اتصال ال سی دی به Arduino UNO

برای اتصال ال سی دی LCD به آردوینو همانطور که در بالا گفته شده است، پایه VSS را به پایه GND، پایه VCC را به ۵ ولت، پایه VO را به پایه GND اتصال می‌دهیم. در صورت نیاز می‌توانید یک پتانسیومتر جهت تنظیم شدت نور بین دو پایه قرار دهید. پایه RS را به یکی از پایه های دیجیتال، پایه RW را به پایه GND، پایه E را به یکی از پایه‌های دیجیتال آردوینو متصل می‌کنیم. پایه‌های D0 -D7 را به پین دیجیتال آردوینو و در نهایت پایه Anode را به ۵ ولت و پایه Cathode را به پایه GND وصل کنید.

انواع دیگر آردوینو

برای آردوینو مگا Mega2560 و آردوینو نانو Nano هم به همین ترتیب عمل کنید و از پایه‌های دیجیتال برای اتصال به آردوینو استفاده کنید.

 

نکته مهم برای اتصال پایه‌های ال سی دی LCD به پایه های دیجیتال Digital آردوینو، توجه به یک نکته اهمیت دارد. هر یک از پایه‌هایی که انتخاب می‌کنید باید در کد برنامه معرفی شود. به عنوان مثال اگر از پایه‌های ۱۲,۱۱,۵,۴,۳,۲ آردوینو استفاده می‌کنید، باید به صورت زیر در کد آردوینو تعریف شود:

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

 

معرفی تابع فراخوانی ال سی دی LCD

۱: liquid Crystal

برای شروع باید یک متغیر از انواع مختلف Liquid Crystal بسازید. در این متغیر می‌توانید بین ۴ تا ۸ پایه از دیتا را معرفی کنید. در زیر چند نمونه متغیر معرفی می‌کنم. بسته به انتخاب پایه‌های آردوینو  Arduino می‌توانید از یکی متغیرهای زیر استفاده کنید.

  • RS: یکی از پایه های آردوینو به پایه RS ال سی دی LCD متصل می‌شود.
  • EN: یکی از پایه های آردوینو به پایه EN ال سی دی LCD متصل می‌شود.
  • RW: پایه GND آردوینو به پایه RW ال سی دی LCD متصل می‌شود.
  • d0,d1,d2,d3,d4,d5,d6,d7 : با توجه به تعریف متغیر در کد برنامه از پایه های D0 تا D7 ال سی دی به پایه های آردوینو متصل می‌شود.

 

۲: ()Begin

قبل از شروع نوشتن کدهای ال سی دی نیاز به معرفی ال سی دی LCD و مشخص کردن ابعاد مورد استفاده دارید. از اینرو سطر Begin اهمیت خاصی دارد. دستور معرفی ال سی دی همانند زیر است. cols جهت مشخص کردن تعداد ستون و row برای مشخص کردن تعداد سطر می‌باشد.

به عنوان مثال اگر ال سی دی مورد استفاده از نوع ۱۶*۲ باشد، همانند زیر در کد آردوینو فراخوانی می‌شود.

 

۳: ()clear

توسط تابع clear صفحه نمایش ال سی دی پاک شده و به صورت زیر در کد تعریف می‌شود. پس از تابع begin نیاز به تعریف تابع clear خواهیم داشت. تابع clear به صورت زیر در برنامه فراخوانی می‌شود.

 

۴: ()home

توسط تابع home مکان نما در بالا سمت چپ ال سی دی قرار می‌گیرد. تابع ()home به صورت زیر در برنامه فراخوانی می‌شود.

۵: ()setcursor

توسط تابع setcursor یک موقعیت خاص در ال سی دی برای مکان نما انتخاب می‌کنیم. سپس در تابع سطر row و ستون cols مورد نظر را وارد می‌کنیم. تابع cursor به صورت زیر در برنامه فراخوانی می‌شود.

۶: ()write

از تابع write برای نوشتن کارکتر در ال سی دی استفاده می‌شود. تابع write به صورت زیر در برنامه فراخوانی می‌شود.

۷: ()print

از تابع print برای نمایش کاراکتر در ال سی دی LCD اسنفاده می‌شود. تابع print به صورت زیر در برنامه فراخوانی می‌شود.

۸: ()cursor و ()nocursor

از تابع cursor برای نمایش به صورت زیر خط underscore استفاده می‌شود. در واقع یک خط زیر کاراکتر کشیده می‌شود. همچنین برای عدم نمایش underscore از تابع nocursor استفاده می‌کنیم. هر دو تابع cursor و nocursor به صورت زیر در برنامه فراخوانی می‌شود.

۹: ()blink و ()noblink

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

۱۰: ()display و ()nodisplay

توسط تابع display ال سی دی روشن و همچنین توسط تابع nodisplay ال سی دی خاموش می‌شود. هر دو تابع display و nodisplay به صورت زیر در برنامه فراخوانی می‌شوند.

۱۱: ()scrolldispalyleft و ()scrolldisplayright

توسط این دو تابع محتوای نمایش داده شده در ال سی دی یک واحد به سمت چپ و راست انتقال داده می‌شود. هر دو تابع scrolldispalyleft و scrolldisplayright به صورت زیر در برنامه فراخوانی می‌شوند.

۱۲: ()autoscroll و ()noAutoscroll

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

۱۳: ()LeftToRight و ()RightToLeft

توسط تابع LeftToRight یک مسیر چپ به راست برای نوشتن متن در ال سی دی مشخص شده و محتوا از چپ به راست نوشته می‌شود. همچنین توسط تابع RightToLeft محتوا از راست به چپ در صفحه نمایش نوشته می‌شود. هر دو تابع به صورت زیر در برنامه فراخوانی می‌شود.

۱۴: ()CreatChar

از تابع creatchar برای نمایش یک کاراکتر خاص مانند smiley در ال سی دی استفاده می‌شود. تابع creatchar به صورت زیر در برنامه فراخوانی می‌شود:

 

فراخوانی کتابخانه LiquidCrystal

برای راه اندازی ال سی دی کاراکتری نیاز به کتابخانه LiquidCrystal داریم. هچنین کتابخانه ال سی دی کاراکتری در صفحه محصول ال سی دی کاراکتری LCD 2×۱۶ در قسمت دانلود قرار دارد. با کلیک بر روی لینک کتابخانه LiquidCrystal را دانلود کرده و مجددا در مسیر Arduino / Library کپی کنید. اگر هم شیوه افزودن کتابخانه به نرم افزار آردوینو را نمیدانید از آموزش نصب کتابخانه در آردوینو که قبلا توسط همکارم نوشته شده، استفاده کنید. حال تا اینجا توابع مهم برای فراخوانی یک ال سی دی کاراکتری ۲*۱۶ را فرا گرفتیم. در ادامه به بررسی ال سی دی گرافیکی ۱۶*۲ با راه انداز I2C می‌پردازیم.

 

۲:معرفی LCD کاراکتری ۱۶*۲ با I2C

مدل دیگری از ال سی دی کاراکتری با درایور راه انداز I2C ارائه شده است. ماژول راه انداز LCD با تراشه PCF8574 و رابط I2C مناسب برای مدیریت ال سی دی‌های کاراکتری است. همچنین به دلیل استفاده از تنها ۴ پایه باعث کاهش حجم سیم کشی در طی پروژه شده است. راه انداز LCD کاراکتری با رابط I2C دارای ۴ پایه SCL , SDA, VC , GND است. در ادامه اتصال ال سی دی LCD به آردوینو را توضیح خواهم داد.

آموزش کار با انواع ال سی دی کاراکتری LCD توسط برد آردوینو Arduino

 

اتصال I2C در انواع آردوینو

راه انداز I2C دارای ۴ پایه SCL, SDA, VCC, GND است. اتصال پایه ها در مدل های مختلف آردوینو متفاوت است. در ادامه برای نمایش محتوا در ال سی دی LCD نیاز به معرفی چند تابع در کد آردوینو داریم که به معرفی آن خواهیم پرداخت.

  1. آردوینو UNO:  پایه SCL به پایه A5, پایه SDA به پایه A4 متصل می‌شود.
  2. آردوینو Mega2560: پایه SCL به پایه ۲۰، پایه SDA به پایه ۲۱ متصل می‌شود.
  3. آردوینو Nano: پایه SCL به پایه A5،پایه SDA به پایه A4 متصل می‌شود.
  4. پایه VCC و GND هم به ترتیب به ۵ ولت و GND آردوینو متصل می‌شود.

 

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

 

۱: LiquidCrystal_I2C

در تابع crystalLiquid_I2C باید نوع ال سی دی LCD استفاده شده را مشخص کنید. به عنوان مثال برای استفاده از ال سی دی ۱۶*۲ تابع را به صورت زیر فراخوانی می‌کنیم.

 

۲: ()write begin

تابع write begin کتابخانه wire را اجرا می‌کند و پروتکل I2C را فرامیخواند. این تابع تنها یک بار در برنامه فراخوانده می‌شود.

 

۳: ()backlight و ()nobacklight

از این دو تابع برای روشن شدن و خاموش شدن ال سی دی استفاده می‌شود. تابع backlight و nobacklight به صورت زیر فراخوانی می‌شود.

 

فراخوانی کتابخانه LiquidCrystal_I2C

برای راه اندازی ال سی دی کارکتری نیاز به فراخوانی کتابخانه LiquidCrystal_I2C داریم. لینک دانلود کتابخانه LiquidCrystal_I2C در صفحه محصول راه انداز LCD کاراکتری LCD Driver PCF8574 با رابط I2C در قسمت دانلود قرار دارد. کتابخانه را دانلود و در مسیر arduino/Library کپی کنید. همچنین برای راه اندازی ال سی دی نیاز به کتابخانه wire خواهیم داشت که به صورت پیش فرض در لیست کتابخانه Arduino قرار دراد. تنها کافیست از مسیر Sketch/ Include Library کتابخانه wire را فراخوانی کنید.

 

 

 

کد آردوینو راه اندازی LCD کاراکتری

 

۱:  نمونه کد آردوینو نمایش متن در LCD ساده کاراکتری

 

۲: کد آردوینو نمایش متن LCD کارکتری I2C

حال طبق آموزش اتصالات هر دو مدل ال سی دی ساده و همراه با درایور I2C را برقرار کنید. کدها را در نرم افزار آردوینو کپی کنید. سپس هر یک از کدها را جداگانه آپلود کنید. در هر دو مدل ال سی دی ساده و همراه با راه انداز I2C، محتوای متنی Digispark.ir در صفحه نمایش داده خواهد شد.

 

وسایل مورد نیاز

ال سی دی ۲*۱۶ 

ال سی دی ۲*۱۶ به همراه درایور راه اندازی I2C

شیلد ال سی دی آردوینو LCD Shield Arduino

برد آردوینو arduino UNO

 

۳: شیلد Arduino Shield 2*16 LCD

شیلد ال سی دی آردوینو Arduino Shield 2*16 LCD مخصوص آردوینو با استفاده از پرکاربردترین ال سی دی کاراکتری و ۶ میکروسوئیچ به برد آردوینو Arduino نصب می‌شود. از نقاط مثبت شیلد ال سی دی آردوینو Arduino Shield 2*16 LCD دارا بودن ۶ میکروسوئیچ به ترتیب SELECT,LEFT,DOWN, UP, RIGHT,RESET است. این ۶ کلیدجهت انجام فعالیت مختلف در پردازش‌ها می‌باشد. این مدل ال سی دی به صورت شیلد بر روی آردوینو arduino قرار می‌گیرد.راه اندازی شیلد ال سی دی کاراکتری با آردوینو Arduino lcd shield

 

فراخوانی کتابخانه

برای راه اندازی شیلد ال سی دی نیاز به فراخوانی کتابخانه‌های LiquidCrystal و DFR_LCD_Keypad داریم. لینک دانلود کتابخانه LiquidCrystal در صفحه محصول ال سی دی کاراکتری LCD 2×۱۶ در قسمت دانلود قرار دارد. با کلیک بر روی لینک کتابخانه LiquidCrystal را دانلود کرده و مجددا در مسیر Arduino / Library کپی کنید. همچنین برای فعال سازی کلیدهای قرار گرفته شده بر روی شیلد ال سی دی نیاز به فراخوانی کتابخانه DFR_LCD_Keypad داریم. لینک دانلود کتابخانه DFR_LCD_KEYPAD در صفحه محصول شیلد ال سی دی ۲×۱۶ آردوینو در قسمت دانلود قرار دارد. کتابخانه را دانلود و در مسیر Arduino / Library کپی کنید.

 

معرفی پایه شیلد ال سی دی LCD Shield

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

  • A0 : پایه A0 برای فراخوانی ۶ کلید قرار گرفته شده بر روی شیلد ال سی دی است و توسط این پایه فرمان ارسال می‌شود.
  • DB4 – DB7 : پایه های D4 تا D7 برای ارسال دیتا بین آردوینو و شیلد ال سی دی استفاده می‌شود.
  • DB8: پایه DB8 یا همان Register برای انتخاب دیتا و سیگنال در نمایشگر استفاده می‌شود.
  • DB9: پایه Enable جهت فعال سازی ال سی دی استفاده می‌شود.
  • DB10: برای کنترل Backlight استفاده می‌شود.

 

معرفی توابع

 

()DFR_LCD_Keypad

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

در نهایت برای فراخوانی کلیدها و نمایش تغییرات در متن نیاز به معرفی متغیر سوییچ خواهیم داشت که با انتخاب هر یک از سوییچ ها، محتوا مورد نظر در نمایشگر نشان داده شود.

 

نمونه کد آردوینو نمایش متن در LCD Shield

 

مهمان گرامی، جهت دسترسی به کدهای این پروژه، اسپارکر ویژه شوید.

 

 

حال کد سوم را در نرم افزار آردوینو کپی کنید. همانطور که بر روی شیلد ال سی دی مشخص است، دارای ۶ عدد میکروسوییچ است. کد را آپلود کنید. با فشردن کلید RIGHT عبارت Digispark.ir ، کلید UP عبارت Digispark، کلید DOWN عبارت Daneshjookit، کلید LEFT عبارت Theladypi و کلید SELECT عبارت Projects نمایش داده می‌شود.

 

وسایل مورد نیاز

ال سی دی ۲*۱۶ 

ال سی دی ۲*۱۶ به همراه درایور راه اندازی I2C

شیلد ال سی دی آردوینو LCD Shield Arduino

برد آردوینو arduino UNO

 

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

 

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۲۸ دیدگاه

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

  • سلام
    برای ال سی دی ۲/۱۶ نیازی به پتانسیومتر نیست ؟ خیلی از دیتاشیت ها پتانسیومتر داره ولی شما استفاده نکردین واتفاقا خیلی هم نوشته ها واضحه !

    • سلام
      توسط پتانسیومتر وضوح متن و شفاف بودن آن را تنظیم می‌کنیم که استفاده از آن اختیاری است. بله همانطور که در تصویر و فیلم مشاهده می‌کنید متن نمایش داده شده کاملا واضح است و نیازی به تنظیم آن نیست.

  • سلام
    من یه شیلد LCD دارم پایه A0 طبق معمول رزرو خود شیلد میخوام یه نمایشگر ضربان قلب راه اندازی کنم یه پالس سنسور دارم اونم برا ارسال دیتا به پایه A0 نیاز داره دیتا رو تویه serial monitor دارم ولی رو نمایشگر نمیاد راه حلی برا این مشکل دارین ؟؟
    با تشکر

    • سلام
      پایه A0 در اختیار کلید های قرار گرفته بر روی شیلد است. برای رفع مشکل باید یکی از پایه های دیگر آنالوگ را تعریف کنید، که با تغییر در کد برنامه به راحتی امکان پذیر است.

  • سلام
    من تازه با این برد آشنا شدم و یه پک آموزشی خوب هم تهیه کردم ولی هر کاری کردم نتونستم lcd رو با i2c راه اندازی کنم .همه چیزو چندین بار چک کردم ، آموزش شما رو هم کلمه به کلمه خوندم ولی نمیشه.از هر کدوم ۴ تا داشتم که هیچکدوم جواب نمیده البته lcd ها بدون i2c کار میکنن.لطفا راهنمایی بفرمایید

  • سلام خانم مهندس خسته نباشید.
    من یک lcd از بازار تهیه کردم ولی محل قرار گیری پایه ها و تعدادشون منو به مشکل در دونستن شماره هر پایه مواجه کرد.
    بی زحمت بگید هر پایه پایه ی چندم هستش
    http://s8.picofile.com/file/8321790868/20180315_194227.jpg

    http://s8.picofile.com/file/8321791018/20180315_194241.jpg
    با تشکر…

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

    • سلام
      کتابخانه مربوط به Kepad را نصب کردید؟ اگر کلید را برای چند ثانیه نگه دارید، تغییری ایجاد می‌شود؟

    • سلام
      برای هر سنسور نیاز به کتابخانه مرتبط به آن است. کتابخانه سنسور مورد نظر را فراخوانی کنید و سپس کدها را ترکیب کنید.

  • سلام خسته نباشید دوتا سوال داشتم
    ١-چجوری می شه مقدار داده یک سنسور روی lcdنمایش داد
    ٢-در شیلد lcdکه داری ۶دکمه هم هست می شه استفاده نکنیم از کلید ها در بعضی از پروژه ها که نیازی نیست

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

    • سلام
      بله امکان پذیر است.
      برای دو ال سی دی کاراکتری ساده و کاراکتری همراه با درایور I2C دو کد یکسان است تنها باید کتابخانه مخصوص هر یک و نوع ال سی دی را فراخوانی کنید. برای کد سوم که مربوط به شیلد ال سی دی است، سوییچ ها و کتابخانه مربوط به آن تعریف شده است و باید تغییر دهید.

  • سلام
    من یک lcd 20*4 دارم
    وقتی یک داده ۲۴ بیتی رو دریافت میکنم و میخام روی lcd در سطر اول و دوم نشون داده بشه ، ۲۰ بیت اول بدون مشکل در سطر اول قرار میگیره اما ۴ بیت اخر به جای سطر دوم ، روی سطر سوم قرار میگیره .
    من چیکار کنم که ۴ بیت اخر بیاد روی سطر دوم ؟

      • من از این تابع استفاده کردم ، مشکل اینجاست که دیتای من ۲۴ بیت و ۲۰ بیت اول در سطر اول قرار گرفته و مشکلی نیست. اما ۴ بیت اخر به جای اینکه بیاد سطر دوم ، رفته سطر سوم.

        من که نمیتونم جداگانه برای ۴ بیت اخر دوباره از تابعی که شما گفتید استفاده کنم!

        • سلام مجدد
          بنده بررسی نکرده‌ام. ولی مواردی از جمله اینکه پروتکل ارتباطی I2C است یا بدون I2C و همچنین در قسمت lcd.begin(16, 2); موارد را درست وارد کرده باشید. از دیگر کاربران که در این زمینه تجربه مشابهی دارند، تقاضا دارم تا در این بحث شرکت کنند.

  • این قسمت از برنامه ای که آقای قربانی نوشتند را در برنامه شما قرار دادم، ولی عدد ۱۲۳۴۵۶ یک بار از چپ و بار دیگه از راست نوشته شد. ولی با این حال ثابت بود و حرکتی نمی کرد.

    delay(1000);
    lcd.clear();
    lcd.rightToLeft();//راست به چپ کردن
    lcd.setCursor(15, 0);
    lcd.print(“123456”);

    lcd.leftToRight(); //چپ به راست کردن
    lcd.setCursor(0, 0);
    lcd.print(“123456”);

    delay(2000);

    • خطا

      Arduino: 1.8.1 (Windows 10), Board: “Arduino/Genuino Uno”

      C:\Users\Asus\Desktop\lcd_shild\lcd_shild.ino: In function ‘void setup()’:

      lcd_shild:16: error: ‘lt’ was not declared in this scope

      for (int thisChar = 0; thisChar < 10; thisChar++) {

      ^

      lcd_shild:16: error: expected ‘)’ before ‘;’ token

      for (int thisChar = 0; thisChar < 10; thisChar++) {

      ^

      lcd_shild:16: error: ‘thisChar’ was not declared in this scope

      for (int thisChar = 0; thisChar < 10; thisChar++) {

      ^

      lcd_shild:28: error: a function-definition is not allowed here before ‘{‘ token

      {

      ^

      lcd_shild:76: error: expected ‘}’ at end of input

      }

      ^

      Multiple libraries were found for “LiquidCrystal.h”
      Used: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal
      Not used: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal.library.daneshjookit
      Multiple libraries were found for “DFR_LCD_Keypad.h”
      Used: C:\Users\Asus\Documents\Arduino\libraries\DFR_LCD_Keypad-master
      Not used: C:\Program Files (x86)\Arduino\libraries\DFR_LCD_Keypad-master
      exit status 1
      ‘lt’ was not declared in this scope

      This report would have more information with
      “Show verbose output during compilation”
      option enabled in File -> Preferences.

      • دقت کنید از کدام یک از کدها استفاده میکنید و اینکه کتابخانه های هر یک را به درستی فراخوانی کنید. سپس همانطور که در کامنت قبل توضیح دادم، باید از تابع Scroll برای جا به جایی متن در ال سی دی استفاده کنید. مجددا تست کنید و نتیجه را از همین طریق اعلام نمایید.

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

  • سلام من دستورات lcd to i2c رو نوشتم ولی روی ال سی دیم چیزی نمایش نداد
    ممنون میشم راهنماییم کنید اتصالات رو هم درست انجام دادم

    • سلام
      آیا مطابق با متن آموزش پیش رفته اید؟ برای اتصال i2c باید کتابخانه crystalLiquid_I2C را فراخوانی کنید. سپس باید نوع ال سی دی مشخص شود.
      موارد را چک و اعلام کنید تا راهنمایی کنم.

      • با سلام و خسته نباشید. تشکر از آموزش های خوبتون.
        من ماژول ارتباط سریال I2C برای LCD کاراکتری رو با برد آردوینو UNO میتونم راه اندازی کنم ولی با برد آردوینو Mega 2560 هیچی نمیاره، از کنتراستشم نیست. پایه های SDA رو به پایه ۲۰ و SCL رو به پایه ۲۱ وصل کردم (بر عکسم وصل کردم) هیچی نمیاره.
        لطفا راهنمایی فرمایید. با سپاس

        • سلام
          از توجه شما ممنونم.
          بررسی کردم و مشکلی در نمایش متن با آردوینو مگا۲۵۶۰ نیست. پتانسیومتر را تغییر دهید و از نمونه کد همین آموزش استفاده و سپس نتیجه را اعلام کنید.
          عکس را ضمیمه کردم، مشاهده کنید.

          ال سی دی 2x16 با آردوینو مگا2560

    • سلام
      در این خصوص تجربه ای در مورد نداشته و تست نکرده ام. از دیگر کاربران تقاضا دارم در صورت داشتن اطلاعات در این بحث شرکت کنند.

  • سلام.ممنون از آموزشتون.
    من وقتی کد راه انداز با ic2 رو آپلود می کنم فقط اول عبارات ینی c , d رو فقط نمایش می ده
    می شه راهنمایی کنید مشکل از کجاست؟

  • سلام خانم
    چقدر اون بخش معرفی توابع عالی و خوب بود دمتون گرم، امیدوارم این نحوه آموزش (معرفی جزئیات) بیشتر بشه.

  • سلام من میخوام از دکمه های up و down شیلد lcd به عنوان تنظیم کننده سطح رطوبت استفاده کنم ولی وقتی داخل دستور switch و مثلا KEY_UP میگم :
    if(moistureSet!=100)moistureSet++; عمل نمیکنه
    قبلشم مقدار انالوگ سنسور رو با دستور map بصورت درصد تعریف کردم و MOISTURE_SET با define 0 گذاشتم و با static int اینارو برابر قرار دادم
    به نظر شما چیکار کنم؟

  • با عرض سلام و احترام خدمت سرکار خانم مهندس

    ضمن تشکر از مطالب مفید شما من یک مشکل داشتم، من شیلد LCD و keypad را به برد Arduino UNO وصل میکنم و ارتباط کامل برقرار می شود و متن بر روی LCD نمایش داده می شود اما زمانی که به برد Wemos D1 وصل میکنم متن نمایش داده نمی شود
    لطفا در صورت امکان راهنمایی فرمایید

    باتشکر از شما

  • سلام
    برای اتصال lcd 2*16 به اردوینو حالا متن یا اون کاراکتری رو که میخام نشون نمیده همش مربع از پتانسیومتر استفاده کردم فقط همون مربع ها کمرنگ و پرنگ شدن
    ممنون میشم راهنمایی کنید

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

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

  • سلام
    من scl رو به a5 و sda رو به a4 وصل کردم vcc و gnd هم متصل کردم
    کتابخانه ها هم نصب هستند lcd هم ۱۶۰۲ هست حتی کد همین بخش روهم استفاده میکنم اما بعد از اپلود فقط lcd ابی میشه و هیچ کاراکتری نمایش نمیده پتانسومتر هم تغییر میدم ولی بازم هم چیزی نشون نمیده
    کاری هست که بتونم انجام بدم این مشکل حل شه؟

    • سلام
      اگر از آردوینو UNO و LCD با درایور I2C استفاده می‌کنید، پایه SCL به پایه A5, پایه SDA به پایه A4 متصل می‌شود.
      تست کنید و نتیجه را از همین طریق اعلام کنید.

  • سلام وقت بخیر
    ضمن تشکر از زحمات شما ممکنه بفرمایید چطور میتونم ادامه متنم به خط بعدی منتقل کنم؟
    از دستور for به این شکل استفاده کردم
    for(Serial.available()=1,Serial.available()>17,Serial.available()++){
    lcd.setCursor(2,0);
    { lcd.write(Serial.read());
    for(Serial.available()=16,Serial.available()>33,Serial.available()++){
    lcd.setCursor(2,0);
    } lcd.write(Serial.read());
    اما گویا درست نیست و ارور میده
    ممنون میشم مشکل رو اصلاح بفرمایید

      • ببینید میخوام با ارتباط سریال یه پیام رو که بیشتر از ۱۶ کاراکتر هست رو lcd نمایش بدم اما طبیعتا همش نمایش داده نمیشه دیگه
        برای همین میخوام از خط دوم lcd هم برای نمایش بقیه متن استفاده کنم به طوری که کاربر متن مثلا ۲۰ کاراکتری رو ارسال کنه و خودکار ۱۶ کاراکتر در خط اول قرار بگیره و ۴ کاراکتر دیگه بجای حذف شدن به خط بعد منتقل بشه

        • کد برنامه ناخوانا است و امکان تحلیل وجود ندارد. به عنوان مثال اگر متن مورد نظر شما بیش از ۳۲ کاراکتر است، باید آن را جدا کنید و برای اینکار باید از تابع()string.length و (string.substring(from, to استفاده کنید.

  • ببخشید من برای یک پروژه که آردیونو همیشه باید روشن باشد از lcd استفاده کردم که اولش همه چی خوبه ولی بعد تقریبا ۴ ساعت دیگه هیچی رو lcd نشون نمیده وقتی هم پایه هاشو قطع و وصل میکنم که شاید درست شه فقط یه سری علامت سوال و فلش و اینا میاره یعنی همه چی خوب کار میکنه و درسته فقط هیچی رو صفحه نشون نمیده وقتی که آردیونو رو ریست میکنم دوباره درست میشه .
    به نظر شما چیکار میتونم بکنم که بدون ریست کردن همیشه درست کار کنه؟

        • در این خصوص باید تغذیه را بررسی کنید.
          هیچ مشکلی در مدت زمان بالا برای برد و اتصالات به وجود نخواهد امد و این مورد قبلا توسط بنده تست شده است.
          از چه تغذیه ای استفاده می‌کنید؟

          • من یه دونه شلید کنترل موتور گذاشتم رو برد آردیونو همون که کتابخونش AFMotor هست بعد ورودی ۱۲ ولت ۵۰۰ آمپر رو به همون شیلده وصل کردم .

          • من یه دونه شلید کنترل موتور گذاشتم رو برد آردیونو همون که کتابخونش AFMotor هست بعد ورودی ۱۲ ولت ۵۰۰ میلی آمپر رو به همون شیلده وصل کردم .

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

              • بله مشکل نرم افزاری بود
                یه متغیر تو برنامه هی تا ۷۲۰۰ میرفت بعد دوباره صفر میشد که اول با int تعریفش کرده بودم بعد که سرچ کردم و اینا به این نتیجه رسیدم که با unsigned long شاید درست شه که تا حالا مشکلی نداشته امیدوارم که دوباره اونطور نشه 🙂 راستی تو این پروژه خیلی آموزش های مختلفتون کمکم کرد میخواستم ازتون تشکر کنم

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

                  حمایت از دیجی اسپارک

                  روش دریافت بن ارسال رایگان دانشجو کیت

    • بسته به ال سی دی مورد استفاده، فراخوانی دستورات کتابخانه ال سی دی متفاوت است. در این آموزش نحوه‌ی راه اندازی ۳ مدل ال سی دی گفته شده است.
      از چه ال سی دی استفاده می‌کنید تا بتوانم راهنمایی کنم.

      • lcd 16*2 کارکتری……میخوام که اطلاعات کارت rfid ک تو سریال مانیتور برنامه اردینو نمایش داده میشه روی lcdهم بتونم ببینم…ایا میشه؟

        • بله هیچ محدودیتی ندارد.
          باید طبق همین آموزش کتابخانه و توابع LCD را در کد برنامه اضافه کنید.
          از کدهای همین آموزش به راحتی می‌توانید استفاده کنید.

          • ۱-پایه های دیجیتال اردینو پرشده و فقط ۴ تا خالی هست…با این چهارتا پایه و یا پایه های انالوگ اردینو،میتوان lcd را متصل کرد؟
            ۲-هم چنین ماژول i2c ندارم.بدون این ماژول میشود؟

            • در خصوص سوال اول کامل در متن آموزش توضیح داده شده است:
              برای اتصال پایه‌های ال سی دی LCD به پایه های دیجیتال Digital آردوینو، توجه به یک نکته اهمیت دارد. هر یک از پایه‌هایی که انتخاب می‌کنید باید در کد برنامه معرفی شود. به عنوان مثال اگر از پایه‌های ۱۲,۱۱,۵,۴,۳,۲ آردوینو استفاده می‌کنید، باید به صورت زیر در کد آردوینو تعریف شود:
              (LiquidCrystal lcd (12,11,5,4,3,2 دقت داشته باشید می‌توانید از همان پایه های اشتراک بگیرید و به ال سی دی متصل کنید.
              سوال دوم : بله می‌توانید از ماژول lcd کاراکتری استفاده کنید.

  • سلام
    آموزش خوبی بود
    من کد هارو با ال سی دی با i2c آپلود کردم ولی فقط یک حرف رو نمایش میده خط اول D و خط دوم C نمیدونم مشکلش چیه
    خودم هم هر جور نوشتم فقط حرف اولو تایپ کرد
    بردم آردوینو نانو هست

  • سلام، بنده هنگام کامپایل کد، روی خط
    lcd.begin(16, 2);
    ارور میگیرم.
    No matching function for call to ‘LiquidCrystal_I2C::begin(int, int)

    وقتی پارامتر های ورودی فانکشن رو حذف میکنم برنامه کامپایل میشه ولی روی Lcd چیزی نشان داده نمیشود.

    • سلام
      همانطور که در متن آموزش بخش معرفی توابع راه اندازی ال سی دی توضیح دادم، طبق دستورات کتابخانه Liquid crystal باید نوع ال سی دی و کد I2C آن مشخص گردد. به عنوان مثال من در این آموزش از ال سی دی ۲*۱۶ استفاده کرده ام و کد I2c به صورت ۰X27 است.