#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // กำหนดจอ LCD 16x2
// สร้างตัวอักษรแบบกำหนดเอง
byte name1x6[] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000 };
byte name0x2[] = { B00000, B00000, B00000, B00000, B00000, B01110, B00000, B00000 };
byte name0x5[] = { B00000, B00000, B00000, B00000, B00010, B00010, B00010, B00000 };
byte name1x2[] = { B00000, B01111, B10001, B10001, B10001, B10001, B10001, B10001 };
byte name1x3[] = { B00000, B11010, B01010, B01010, B01010, B01010, B01011, B01101 };
byte name1x4[] = { B10100, B01100, B00100, B00100, B00100, B00100, B00100, B00110 };
byte name1x5[] = { B00000, B01101, B00101, B01001, B01001, B01001, B01001, B01111 };
void setup() {
lcd.begin(16, 2);
lcd.createChar(0, name1x6);
lcd.createChar(1, name0x2);
lcd.createChar(2, name0x5);
lcd.createChar(3, name1x2);
lcd.createChar(4, name1x3);
lcd.createChar(5, name1x4);
lcd.createChar(6, name1x5);
lcd.clear();
}
void displayCustomChars(int position) {
lcd.setCursor(position + 6, 1);
lcd.write(0); // name1x6
lcd.setCursor(position + 2, 0);
lcd.write(1); // name0x2
lcd.setCursor(position + 5, 0);
lcd.write(2); // name0x5
lcd.setCursor(position + 2, 1);
lcd.write(3); // name1x2
lcd.setCursor(position + 3, 1);
lcd.write(4); // name1x3
lcd.setCursor(position + 4, 1);
lcd.write(5); // name1x4
lcd.setCursor(position + 5, 1);
lcd.write(6); // name1x5
}
void loop() {
// Step 1: แสดงผลวิ่งจากขวาไปซ้าย
for (int position = 16; position >= -6; position--) {
lcd.clear();
displayCustomChars(position);
delay(300); // ความเร็วในการเลื่อน
}
// Step 2: แสดงผลวิ่งจากซ้ายไปขวา
for (int position = -6; position <= 16; position++) {
lcd.clear();
displayCustomChars(position);
delay(300); // ความเร็วในการเลื่อน
}
// Step 3: ลบตัวอักษรทีละตัวจากตัวสุดท้ายจนหมด
for (int length = 6; length >= 0; length--) {
lcd.clear();
for (int i = 0; i < length; i++) {
displayCustomChars(0); // แสดงเฉพาะส่วนที่เหลือ
}
delay(300); // ความเร็วในการลบ
}
// Step 4: ค่อยๆ ปรากฎขึ้นทีละตัวจากตัวแรกไปจนถึงตัวสุดท้าย
for (int length = 0; length <= 6; length++) {
lcd.clear();
for (int i = 0; i < length; i++) {
displayCustomChars(0); // แสดงเฉพาะส่วนที่เพิ่มขึ้น
}
delay(300); // ความเร็วในการแสดงผล
}
delay(1000); // หน่วงเวลาหลังจากทำงานเสร็จก่อนเริ่มใหม่
}