หน้าแรก
วิธีการสั่งซื้อสินค้า
แจ้งชำระเงิน
บทความ
เว็บบอร์ด
เกี่ยวกับเรา
ติดต่อเรา
หน้าแรก
>
บทความ
>
Display - ตอนที่ 3 : Liquid Cr…
ค้นหาบทความที่นี่
บทความทั้งหมด
Display - ตอนที่ 3 : Liquid Crystal I2C & Custom Character
3 ปีที่ผ่านมา
โดย
เจ้าของร้าน
Publish :
10 April 2022
หัวข้อในบทนี้
- Library สำหรับ Arduino
- การเขียนโปรแกรมจอ LCD I2C
- คำสั่งเพิ่มเติมของ LiquidCrystal_I2C และการปรับแต่งจอ
- การแก้ปัญหาของจอ LCD I2C
- การเปลี่ยน Address ของจอ
- Custom Character
เมื่อตอนที่แล้วได้พูดถึงเรื่องการใช้จอ LCD กันไปแล้ว ในสัปดาห์นี้จะพูดถึงการใช้จอ LCD ที่ตีบวกขึ้นอีกเลเวลนึง คือจอที่มาพร้อมกับโมดูล I2C ทำให้เราใช้งานได้สะดวกขึ้น ต่อสายน้อยลง ซึ่งการใช้งานก็ไม่ได้ยากอะไรครับ คล้าย ๆ ของเดิมเลย เปลี่ยนแค่ไม่กี่จุดเอง ลองไปดูกันเลยดีกว่า
Library สำหรับ Arduino
สำหรับการใช้งานจอ LED แบบ I2C นี้ เนื่องจากเราไม่ได้ส่ง Shift Register ไปที่จอโดยตรง แต่เราส่งสัญญาณในรูปแบบ I2C ไปยังชิปที่ทำหน้าที่เฉพาะ แล้วชิปตัวนี้ก็จะไปขับชิป HD44780 แสดงออกทางจออีกที Library ตัวเดิมก็ใช้ไม่ได้แล้ว เราจึงต้องใช้ Library ที่ชื่อว่า "LiquidCrystal_I2C" ซึ่ง Library ตัวนี้มีหลายตัวหลายผู้สร้าง และบางตัวก็มีการใช้งานต่างกันเล็กน้อย สำหรับที่จะใช้อ้างอิงในบทความนี้ก็ขอให้ดาวน์โหลดจากลิงค์ด้านล่างครับ อย่างน้อยก็อยู่บน Library ตัวเดียวกัน จะได้ไม่มีปัญหา (เนื่องจากเป็น Library ที่ผู้เขียนใช้มานาน และก็ก็อปปี้ของเดิมใช้ตลอด จึงไม่ทราบว่าต้นทางที่เอามานั้นใช้เป็นตัวไหน ต้องขออภัยด้วยครับ)
ดาวน์โหลด LiquidCrystal_I2C Library
บทความที่เกี่ยวข้อง
การเพิ่ม library ใน Arduino IDE
การเขียนโปรแกรมจอ LCD I2C
คำสั่งต่าง ๆ ในการเขียนโปรแกรมนั้นจะเหมือน ๆ กับแบบธรรมดามากครับ ต่างกันนิดนึงตรงบรรทัดกำหนดชื่อสร้าง Object และจะมีคำสั่งเพิ่มเติมอีกนิดหน่อย นอกนั้นก็ใช้คำสั่งเดียวกับตอนที่แล้วเลย ลองดูโปรแกรมตัวอย่างกันเลย
สิ่งที่แตกต่างจากแบบธรรมดานอกจาก Library แล้วคือตอนเรียกคำสั่งขึ้นมาตั้งชื่อให้จอเราจะเป็น LiquidCrystal_I2C LCD(0x27, 16, 2); ซึ่งก็คือ Address ของจอ และจะบอกจำนวนคอลัม(ตัวอักษร) และแถว(บรรทัด) ไว้ในที่นี้เลย ส่วนใน begin() เราก็ไม่ต้องมีอะไรเนื่องจากเรากำหนดไปแล้วนั่นเองครับ
จะเห็นว่าคำสั่งต่าง ๆ เหมือนตอนที่แล้วเลยใช่มั๊ยล่ะครับ ซึ่งก็ไม่ยากอะไรเลย ที่นี้ก็ลองต่อสายไฟแล้วดูผลลัพธ์กันเลย
คำสั่งเพิ่มเติมของ LiquidCrystal_I2C และการปรับแต่งจอ
แม้คำสั่งต่าง ๆ จะเหมือนกันกับแบบธรรมดา แต่สิ่งนึงทีต่างกันคือแบบ I2C นี่เราไม่ได้ต่อกับหลอด LED Backlight ซึ่งแบบธรรมดานี้เราต่อตรงกับ 5V หากต้องการปิดไป Backlight ก็สามารถดึงสายไฟออกได้ แต่แบบ I2C ไม่มี แล้วเราจะเปิดปิด Backlight ได้ยังไง? มันเลยมีคำสั่งเพิ่มขึ้นมา(เท่าที่นึกออก เพราะคำสั่งอื่น ๆ ก็ใช้เหมือนกันหมด) นั่นคือคำสั่งให้เปิด-ปิดไฟ Backlight นั่นเอง
backlight()
รูปแบบคำสั่ง
lcd.backlight()
lcd
ชื่อ Object ของจอที่ตั้งขึ้นมา
ใช้ในการเปิดไฟ Backlight ของจอให้สว่างขึ้นมา
noBacklight()
รูปแบบคำสั่ง
lcd.noBacklight()
lcd
ชื่อ Object ของจอที่ตั้งขึ้นมา
ใช้ในการปิดไฟ Backlight ของจอให้ดับลง
นอกจากการปิดไฟ Backlight โดยวิธีสั่งจากโค้ดโปรแกรมแล้ว ยังมีอีกวิธีคือการพลิกดูตัวโมดูล I2C ที่ติดอยู่ด้านหลังของจอ จะเห็นจั๊มเปอร์อยู่ตัวหนึ่ง ตัวนี้แหละครับเป็นไฟที่ไปเลี้ยงหลอด Backlight หากต้องการปิดก็ดึงออกได้เลย แต่ถ้าเราดึงตัวนี้ออกก็จะปิดตลอดเลยนะครับ อยากเปิดต้องเอามาเสียบใหม่ แต่ถ้าเสียบคาไว้แล้วสั่งปิดจากโค้ด เราก็สั่งเปิดใหม่จากโค้ดตอนไหนก็ได้เลย
อีกอย่างคือถ้าจอมันไม่เข้มชัดเจนหล่ะ? จอแบบธรรมดาเราก็ปรับที่ตัวต้านทานปรับค่าได้ใช่มั๊ยครับ จอแบบ I2C ก็มีเช่นกัน ลองพลิกดูด้านหลังที่โมดูล I2C จะเห็นตัวต้านทานปรับค่าได้อยู่ ตัวสีฟ้า ๆ นั่นแหละครับ ตรงกลางจะหมุนปรับค่าได้ ก็ลองหาไขควงมาบิดปรับให้ชัดเจนได้เลยครับ
การแก้ปัญหาของจอ LCD I2C
ปัญหาของจอแบบ I2C ก็ไม่ค่อยมีอะไรมากเลยครับ เหมือน ๆ กับจอแบบธรรมดานั่นแหละ มันไม่มีอะไรซับซ้อน แต่ปัญหาที่เจอบ่อย ๆ ก็มีดังนี้
Address ผิด
คำว่า Address ผิดในที่นี้ไม่ต้องตกใจครับ ไม่ยากอะไร ปัญหามันเกิดจากชิปแปลงสัญญาณ I2C นั่นเอง ต่างเบอร์ก็ต่างกัน แต่ไม่ต้องกังวลอะไรครับ จำไว้แค่ 2 ตัว คือตามปกติเป็น 0x27 ถ้าอัพโหลดโปรแกรมแล้วไม่มีอะไรเกิดขึ้นกับจอ ก็ลองเปลี่ยน Address เป็น 0x3F ถ้าไม่ทำอะไรพิเศษกับจอ(คือไปเปลี่ยน Address) รับรองมีแค่สองตัวนี้แหละครับ
ส่วนเรื่องจอไม่ชัดก็ให้ลองบิดตัวต้านทานปรับค่าได้ตามที่ว่าไปด้านบน นอกนั้นถ้ายังไม่ทำงานอีกก็ลองเช็ดสายไฟ เช็คโปรแกรมดู อีกเรื่องคือไฟพอรึเปล่า เนื่องด้วยเราใช้โมดูล I2C เพิ่มขึ้นมา มันย่อมใช้ไฟฟ้ามากกว่าปกติ แต่จากประสบการณ์ของผู้เขียน ต่อจอเข้ากับ 5V ที่ออกจากบอร์ด Arduino และมีเซ็นเซอร์ต่ออีก 2-3 ตัว ไฟจาก Arduino เอาอยู่แน่นอนครับ
การเปลี่ยน Address ของจอ
อันนี้ก็ขอบอกไว้ก่อนว่าปกติก็ไม่ค่อยเจอใครเปลี่ยน Address ของจอนะครับ เนื่องจากว่าจอมันเป็นอุปกรณ์พื้นฐานที่ต้องใช้กันแทบทั้งนั้น และก็เป็นที่รู้กันแล้วว่า Address ของจอมันคืออะไร ผู้ผลิตเซ็นเซอร์หรืออุปกรณ์อย่างอื่นก็จะเลี่ยงไปใช้ Address อื่นนั่นเอง เอาเป็นว่าขอพูดไว้เพื่อให้รู้ก็แล้วกันครับ
ลองพลิกดูที่โมดูล I2C ด้านล่างของตัวต้านทานปรับค่าได้จะมี A0 A1 A2 ที่ขาดจากกันอยู่ ตรงนี้แหละครับเป็นที่กำหนด Address ถ้าเราลองบัดกรี A0 ใช้เชื่อมติดกัน เท่านี้ Address ก็เปลี่ยนไปแล้วครับ ส่วนจะเปลี่ยนตรงไหนแล้วกลายเป็นอะไรก็ลองหา Datasheet มาเปิดดูกันครับ
บทความที่เกี่ยวข้อง :
Datasheet??? สำคัญไฉน???
Custom Character
หลังจากเราใช้จอ LCD กันเป็นแล้ว แต่ที่ผ่านมาก็เป็นการแสดงข้อความกับตัวอักษรที่มีอยู่บนคีย์บอร์ดเท่านั้น แถมยังต้องเป็นภาษาอังกฤษด้วย (อันที่จริงภาษาไทยผู้เขียนก็เคยเห็นว่ามีคนทำไว้แหละครับ) แล้วถ้าเราจะให้แสดงผลเป็นอักขระพิเศษ สมมติจะทำมัลติมิเตอร์ จะให้แสดงผลสัญลักษณ์โอห์ม
Ω จะไปกดมาจากไหน เราต้อง Custom Char เอาครับ
ก่อนอื่น เราลองดูที่หน้าจอครับ ไอ้แต่ละตัวอักษรก่อนหน้านี่ที่เป็นช่อง ๆ ถ้าเราเพ่งมองในช่องนั้นเราจะเห็นจุด ๆ พิกเซลขนาด 5x8 ประกอบอยู่
การจะสร้างตัวอักษรใด ๆ ขึ้นมา เราก็ต้องทำให้จุดพิกเซลแต่ละจุดเป็นสีดำประกอบกันเป็นรูปร่าง เช่น A อย่างรูปซ้าย และเช่นกัน เราอยากทำเครื่องหมายแปลก ๆ ก็ใช้หลักการเดียวกันเช่นรูปขวา
ทีนี้เราจะแปลงจากตารางพิกเซลที่วาดไว้ให้กลายเป็นโค้ดโปรแกรม ซึ่งข้อดีของจอแบบ Monochrome คือจอที่มีสีเดียว(จะอักษรดำ ขาว เขียว อะไรก็ช่างขอแค่มีสีเดียว) มันคือการทำงานด้วยเลขฐานสองเพื่อเปิดปิดพิกเซลเท่านั้น วิธีแปลงรูปร่างพวกนี้ไปเป็นโค้ดโปรแกรมก็คือ ตรงไหนโปร่ง ๆ ให้แทนด้วย 0 ตรงไหนที่อยากให้มันเป็นจุดดำ ๆ ให้แทนด้วย 1 ย้อนกลับมาที่เครื่องหมายโอห์มของเรา ลองเขียนเป็นเลขฐานสองก็จะได้ดังนี้
เมื่อเราได้ชุดตัวเลขนี้แล้วเราก็จะสร้าง byte array ขึ้นมา จากนั้นจึง createChar ตัวอักษรใหม่ขึ้นมา แล้วก็นำไปใช้ได้เลยด้วยคำสั่ง write ซึ่งก็สามารถใช้ได้ทั้งจอแบบธรรมดา และจอแบบ I2C เลย ลองไปดูโค้ดตัวอย่างเลยครับ
โค้ดนี้เลือกให้ตรงกับชนิดจอที่ใช้นะครับ อันไหนไม่ใช้ลบทิ้งไป แล้วลองอัพโหลดลงบอร์ด ดูสิ่งที่เกิดขึ้นเลยครับ
อีกตัวอย่าง โค้ดนี้จะแสดงผลอย่างไร?
สิ่งที่ควรรู้ในการใช้ Custom Charactor นี้ คือตัวอักษรที่เรา CreateChar ขึ้นมา จะถูกนำไปเก็บไว้ใน CGRAM และเจ้า CGRAM นี้ไม่ได้อยู่บน Arduino แต่อยู่บนชิป HD44780 ที่แปะอยู่กับจอนั่นเอง ฉะนั้นมันจึงมีพื้นที่จำกัดนะครับ โดยเราสามารถ createChar สำหรับพื้นที่ 5x8 พิกเซลที่เราใช้นี้ได้มากที่สุด 8 ตัว (0-7) เท่านั้น ทีนี้ก็มีคำถามที่ว่า หากทำโปรเจคต้องใช้สัญลักษณ์มากกว่า 8 ตัว พอจะมีทางออกมั๊ย มีครับ ก็ต้อง createChar ขึ้นมาทับตัวเก่าแล้วก็ใช้ตามปกติ ถ้าอยากเปลี่ยนไปใช้ตัวเก่าก็ createChar ตัวเก่าขึ้นมาใหม่แล้วใช้งาน มันก้เป็นทางออกแต่ก็อาจทำให้เขียนโปรแกรมค่อนข้างยากเพราะคนเขียนจะงงว่าตอนนี้ตัวไหน และการทำงานก็จะหน่วงตามคำสั่งของเรา มันต้องสร้างข้อมูลในแรมขึ้นมาตลอดนั่นเอง เหมือนเราเปิดเอกสารในคอมพิวเตอร์แหละครับ เราเปิดค้างไว้ ทุกอย่างอยู่ใน RAM แค่คลิกเดียวก็พร้อมใช้งาน แต่ถ้า RAM เราไม่พอ ต้องปิดอันแรกก่อนแล้วไปเปิดอันที่สอง พออยากกลับไปใช้อันแรกเราก็ต้องปิดอันที่สองแล้วรอเปิดอันแรกขึ้นมาใหม่ คงพอนึกออกนะครับ
สำหรับวันนี้ก็คิดว่าคงครบแล้วสำหรับการใช้งานจอ LCD นะครับ แต่ยัง ยังไม่จบครับ เพราะจอมันก็มีอีกหลายแบบ การใช้งานก็ต่างกันไป ซีรีส์นี้ยังอีกยาว แฟนบอยบทความของเรามีหลายคนที่ติดตาม ต้องขอขอบคุณมากครับ แม้ช่วงหลัง ๆ จะไม่ค่อยได้ว่างมาเขียนก็ยังติดตามกันอยู่ ยังไงติดตามซีรีส์นี้ต่อไปครับ เดี๋ยวมีจนเล่นจอได้ครบทุกชนิดแน่นอน วันนี้สวัสดีครับ
tutorial
,
lcd
,
Arduino
,
แสดงผล
,
display
,
การใช้งาน
,
การใช้งาน lcd
,
1602
,
2004
,
0802
,
lcd1602
,
lcd2004
,
lcd0802
,
custom
,
charactor
,
custom charactor
Share
Share :
COPY
Privacy Policy
|
Cookie Policy
|
Copyright © 2025
fitrox.lnwshop.com
All rights reserved.
ตะกร้า
(
0
)
▲
▼
รายการสั่งซื้อของฉัน
เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก
ยังไม่มีบัญชีเทพ
สร้างบัญชีใหม่
ไม่มีค่าใช้จ่าย
สมัครสมาชิก (ฟรี)
รายการสั่งซื้อของฉัน
ข้อมูลร้านค้านี้
Fitrox Electronics
ไฟทร็อก อิเล็กทรอนิกส์ จำหน่ายอุปกรณ์อิเล็กทรอนิกส์ บอร์ดไมโครคอนโทรลเลอร์ และอุปกรณ์สำหรับโปรเจคต่างๆ อ.เมือง จ.เชียงใหม่ (หลัง มช.)
เบอร์โทร :
0897245633
อีเมล :
fitrox.electronics@gmail.com
ส่งข้อความติดต่อร้าน
เกี่ยวกับร้านค้านี้
ค้นหาสินค้าในร้านนี้
ค้นหา
หรือค้นหาอย่างละเอียด
ค้นหาสินค้า
สินค้าที่ดูล่าสุด
{{pdata.name}}
ดูสินค้าทั้งหมดในร้าน
สินค้าที่ดูล่าสุด
บันทึกเป็นร้านโปรด
Join เป็นสมาชิกร้าน
แชร์หน้านี้
แชร์หน้านี้
↑
TOP
เลื่อนขึ้นบนสุด
คุณมีสินค้า
0
ชิ้นในตะกร้า
สั่งซื้อทันที
สินค้าในตะกร้า ({{total_num}} รายการ)
ขออภัย ขณะนี้ยังไม่มีสินค้าในตะกร้า
ราคาสินค้าทั้งหมด
฿ {{price_format(total_price)}}
- ฿ {{price_format(discount.price)}}
ราคาสินค้าทั้งหมด
{{total_quantity}} ชิ้น
฿ {{price_format(after_product_price)}}
ราคาไม่รวมค่าจัดส่ง
ดูสินค้าในตะกร้า
เริ่มการสั่งซื้อ
➜
เลือกซื้อสินค้าเพิ่ม
พูดคุย-สอบถาม
อีเมล fitrox.electronics@gmail.com
โทร 0897245633
channel/UCnHfpCdqN1RkzAfEH_lRLvw?
1924052434588436
Add @zpq2828r