📟 نمایشگر LCD کاراکتری ۱۶×۲ با ماژول I2C در آردوینو
LCD کاراکتری ۱۶×۲ همان صفحهی سبز یا آبی آشنایی است که در دستگاهها میبینی: دو خط، هر خط ۱۶ حرف. نسخهی معمولیاش به شش تا ده سیم نیاز دارد، ولی با یک برد کوچک به اسم ماژول I2C پشتش، فقط با چهار سیم وصل میشود. در این آموزش همین نسخهی I2C را با کتابخانهی LiquidCrystal_I2C راه میاندازیم. اگر قبلاً این پروژه را در wokwi دیدهای و نسخهی فارسیاش را میخواهی، اینجاست.
چرا I2C؟
I2C یک «خط اتوبوس» دوسیمه است: یک سیم داده (SDA) و یک سیم ساعت (SCL). روی همین دو سیم میتوانی چند دستگاه مختلف، مثلاً LCD و ساعت RTC و OLED را با هم وصل کنی، چون هر کدام یک آدرس جدا دارند. نتیجه: پایههای آردوینو برای سنسورها و دکمهها آزاد میمانند.
قطعهها
- آردوینو Uno
- LCD ۱۶×۲ با ماژول I2C (برد PCF8574 پشت آن)
- چهار سیم جامپر
سیمکشی
| پایهی ماژول I2C | آردوینو Uno |
|---|---|
| GND | GND |
| VCC | 5V |
| SDA | A4 |
| SCL | A5 |
کد کامل
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // آدرس، تعداد ستون، تعداد سطر
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0); // ستون 0، سطر 0
lcd.print("Salam Wokwi.ir!");
}
void loop() {
unsigned long sec = millis() / 1000;
lcd.setCursor(0, 1); // سطر دوم
lcd.print("Time: ");
lcd.print(sec);
lcd.print(" s "); // فاصلهها حرفهای قبلی را پاک میکنند
delay(250);
}
توضیح خطهای مهم
LiquidCrystal_I2C lcd(0x27, 16, 2): آدرس رایج این ماژولها0x27است؛ بعضیها0x3Fهستند. ۱۶ و ۲ یعنی ۱۶ ستون و ۲ سطر.lcd.init()نمایشگر را آماده میکند وlcd.backlight()نور پسزمینه را روشن. در بعضی نسخههای کتابخانه به جایinitبایدlcd.begin()بنویسی.lcd.setCursor(col, row): مکاننما را میبرد. شمارهها از صفر شروع میشوند، پس سطر دوم یعنی1.lcd.print: درست مثلSerial.printمتن و عدد چاپ میکند.- چرا فاصله بعد از " s"؟ LCD چیزی را خودش پاک نمیکند. وقتی عدد از ۱۰۰ به ۹۹ برسد، رقم آخر قبلی روی صفحه جا میماند. چند فاصلهی اضافه آن را پاک میکند، بیآنکه با
lcd.clear()صفحه چشمک بزند.
اجرا در شبیهساز
در تینکرکد فارسی، LCD معمولی (موازی) و رایگان است و برای شروع عالی است: مثال سلام روی LCD و درس ۲۸: اولین متن روی LCD را ببین. دستورهای setCursor و print در هر دو نسخه یکی است؛ فقط خط تعریف فرق میکند. نسخهی I2C جزو ماژولهای حرفهای اشتراک پلاس است. برای پروژهی کاملتر هم داشبورد LCD را باز کن و صفحهی قطعهی LCD ۱۶×۲ را بخوان.
اشکالهای رایج
- نور روشن است ولی حرفی دیده نمیشود: روی برد واقعی، پیچ آبی پتانسیومتر پشت ماژول (کنتراست) را بچرخان. نود درصد مشکلها همین است!
- یک ردیف مربع سفید میبینی: LCD برق دارد ولی دستورها به آن نمیرسد. آدرس را بین 0x27 و 0x3F عوض کن و SDA/SCL را چک کن.
- خطای 'class LiquidCrystal_I2C' has no member named 'init': نسخهی دیگری از کتابخانه نصب است؛
lcd.begin()را امتحان کن. - حرفهای اضافه ته خط: فاصلهی پاککن را بعد از عدد بگذار.
- فارسی نمینویسد: این LCD فقط حروف لاتین و چند نماد دارد. حداکثر هشت حرف سفارشی میتوانی بسازی؛ درس حرفهای سفارشی روی LCD را ببین.
یک نمایشگر گرافیکیتر میخواهی؟ OLED SSD1306 با آردوینو را بخوان. برای همهی پروژههای آردوینو صفحهی شبیهساز آردوینو و برای کتابخانهها صفحهی کتابخانهها را ببین.
اولین متن LCD را رایگان بنویس 📟