
การหา I2C Address ของจอ LCD
สวัสดีครับทุกท่าน วันนี้เราจะมาสอนวิธีหา I2C Address ของจอ LCD ที่มีการใช้โมดูล I2C (อ่านว่า "ไอสแควร์ซี") ในการสื่อสารขอมูลระหว่างจอ LCD กับ Arduino แล้วจะหาไปทำไมไหล่ะ ? มันหายหรอ ? ไปดูกันครับ
จอ LCD แบบ 16x2 หรือ 20x4 นั้นจะมาด้วยกันสองรูปแบบคือ
1. แบบที่เป็นจอเปล่า ๆ แบบนี้

2. แบบที่ติดตั้งโมดูล I2C มาให้แบบนี้

แต่ใน Ep นี้ผมจะไม่ขอพูดเจาะลึกเรื่อง I2C มันคืออะไรนะครับ (ไว้เดี๋ยวจะทำบทความแยกออกไปอีกที) แต่เราจะมาแก้ปัญหาเวลาเราซื้อจอ LCD + I2C ไปแล้ว แล้วเกิดปัญหาคือ "ทำไมจอไม่ออกว่ะ?" "เฮ้ยย จอพังป่าวว่ะ?" "เห้ยย เห้ยย เห้ยย บลา บลา บลา" เอาเป็นว่าวิธีแก้และมักเป็นปัญหาแรก ๆ ที่ทำให้จอ LCD ไม่แสดงผล (ถ้าไม่นับสายไฟหลวมอ๊ะนะ) ก็คือ การไม่ทราบ Address ของ I2C นั้นเอง ซึ่ง Address นี้จำเป็นต้องใช้เพื่อระบุสำหรับโปรแกรมแสดงผลหน้าจอ (ถ้า Address ไม่ตรง จอก็หม๊ายยออก!!) เอาหล่ะ!! ไปดูวิธีหากันนะครับพี่น้องครับ อุปกรณที่จำเป็นต้องใช้ก็มีดังนี้

1. บอร์ด Arduino Uno R3 หรือ Arduino Mega 2560 R3 (สาย USB ด้วยนะอย่าลืม)
3. สายจั๊ม ผู้-เมีย
4. จอ LCD + I2C
วิธีเชื่อมต่ออุปกรณ์

ทำการเชื่อมต่อขา SCL และ SDA จากโมดูล I2C บนจอ LCD มายัง Arduino
| Arduino | LCD + I2C | |
| SCL | >> | SCL |
| SDA | >> | SDA |
| 5V | >> | VCC |
| GND | >> | GND |
หลักการทำงาน
โปรแกรมจะทำการค้นหา Address ของ I2C จากนั้นจะทำการแสดงผลออกทาง Serial Monitor จากนั้นเราจะนำเอา Address ที่ไปนำไปทดสอบการแสดงผลบนจอ LCD
โค๊ดโปรแกรม

#include
void setup() {
Serial.begin (9600);
while (!Serial){}
Serial.println ("I2C scanner. Scanning ...");
byte count = 0;
Wire.begin();
for (byte i = 8; i < 120; i++){
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0){
Serial.print ("Found address: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX);
Serial.println (")");
count++;
delay (1);
}
}
Serial.println ("Done.");
Serial.print ("Found ");
Serial.print (count, DEC);
Serial.println (" device(s).");
}
void loop() {}
การทดลอง

จากการทดลองเมื่อเราเปิด Serial Monitor ออกมาจะเห็นได้ว่าโปรแกรมได้ทำการค้นหา Address ของ I2C ผลลัพธ์ที่ได้แสดงออกมาในบรรทัดที่สอง นั้นก็คือ (0x3F) ....เอาหล่ะงั้นต่อไปเราลองนำเอา Address ไปใช้งานกันใน EP ถัดไป
Arduino.MakerZone