การเขียนโปรแกรมขั้นสูง: C++ Embedded Templates
ผู้เริ่มต้น Arduino มักจะเขียน void blinkPin13() {} แล้วตามด้วย void blinkPin10() {} เมื่อโปรเจกต์มีปุ่มถึง 30 ปุ่ม โค้ดจะกลายเป็นพันบรรทัดที่อ่านไม่ออกและยุ่งเหยิงเหมือนเส้นสปาเก็ตตี้ โปรเจกต์ C++ Templates Structure นี้จะผลักดันการเปลี่ยนแปลงจากการ "Scripting" ไปสู่ "Software Architecture" ที่แท้จริง โดยใช้ประโยชน์จากพลังของ compiler ดั้งเดิมของ GCC toolchain ที่ซ่อนอยู่ใน IDE

หลักการ DRY (Don't Repeat Yourself)
หากคุณมี DC motors ที่เหมือนกัน 5 ตัว คุณไม่จำเป็นต้องเขียนฟังก์ชันควบคุม motor 5 ฟังก์ชันที่แตกต่างกัน
- Class Template: คุณกำหนด blueprint object ที่สามารถรับ generic data types ได้
template <class T>
class MotorController {
private:
uint8_t fwdPin;
uint8_t revPin;
public:
MotorController(uint8_t f, uint8_t r) {
fwdPin = f; revPin = r;
pinMode(fwdPin, OUTPUT); pinMode(revPin, OUTPUT);
}
void Drive(T speed) {
Serial.print("Driving at: "); Serial.println(speed);
}
};
- พลังของ Generic: สังเกตที่
T speedตัวTนั้นหมายถึง "อะไรก็ตามที่ฉันส่งให้มัน" - หากคุณพิมพ์:
MotorController<int> LeftMotor(5, 6); LeftMotor.Drive(255);ตัวTจะกลายเป็นintทางคณิตศาสตร์ในทันที - หากคุณพิมพ์:
MotorController<float> RightMotor(9, 10); RightMotor.Drive(0.85);compiler จะเปลี่ยนโครงสร้างทางคณิตศาสตร์ทั้งหมดใน backend แบบไดนามิกให้เป็นรูปแบบ float ซึ่งช่วยให้การปรับขนาด PWM สมบูรณ์แบบโดยไม่ต้องเขียนฟังก์ชันที่สอง!
ข้อได้เปรียบด้านหน่วยความจำ (PROGMEM)
หากโค้ดของคุณมี constant arrays ขนาดใหญ่ (เช่น ชื่อ MP3 หรือ Image Bitmaps) มันจะทำให้ Uno ที่มี SRAM เพียง 2KB หยุดทำงาน (crash)
- Templates เข้ากันได้ดีกับ
PROGMEM - โดยการใช้
const uint8_t image[] PROGMEM = { ... };คุณจะบังคับให้ compiler จัดเก็บ massive math array ไว้ใน Flash Storage (Hard Drive) ขนาด 32KB แทนที่จะเป็น RAM - คุณต้องใช้ macros เฉพาะ เช่น
pgm_read_byte_near()เพื่อดึงข้อมูลกลับออกมาในขณะที่รัน complex vector templates
Engineering Stack
- บอร์ด Arduino ใดก็ได้: ไม่จำเป็นต้องมี external physical hardware เพื่อเรียนรู้ OOP!
- ความรู้เชิงลึกเกี่ยวกับ C++ Pointers, References, และ Structs
- ความเต็มใจที่จะเขียนใหม่และ optimize ทุก sketch ที่คุณเคยสร้างมาทั้งหมด!