ชื่อโปรเจกต์: ตัวอย่างจัด Flag คุม Servo แบบไวๆ สไตล์วัยรุ่น
โค้ดชุดนี้พี่ไปแงะมาจากโปรเจกต์ส่วนตัวที่ทำอยู่ แล้วก็เอามายำรวมกับโค้ดจากฟอรั่มข้างนอก แบ่งปันกันไปนะน้อง
อธิบายกันหน่อย
bool myFlag = false; //สร้างและตั้งชื่อ Flag
บรรทัดนี้คือการสร้างและตั้งชื่อ Variable แบบ Flag ให้เราจำได้ง่ายๆ
if (myFlag == false) //ถ้า Flag เป็น true ให้สั่งงาน...
อันนี้คือการเช็กเงื่อนไข ถ้า Flag ของเรามันเป็น true ก็ให้มันสั่งงาน Pins หรือจะสั่งอะไรก็ว่าไป
myFlag = true; // เซ็ต Flag เป็น true เพื่อสั่งปิด [Servo](https://s.shopee.co.th/7fUgFAWSki) 1
บรรทัดนี้คือการสั่งให้ Flag เปลี่ยนสถานะ เพื่อที่จะสั่งหยุดหรือปิดการทำงานของ Servo
myFlag = false; // เซ็ต Flag เป็น false เพื่อให้ Servo 1 กลับมาทำงาน
อันนี้คือการเคลียร์ Flag ให้เป็น false เพื่อให้เจ้า Servo กลับมาขยับได้อีกครั้ง
คำอธิบายพวกนี้อาจจะไม่ได้ถูกต้องเป๊ะร้อยเปอร์เซ็นต์นะเว้ย เพราะพี่เองก็เพิ่งหัดใช้ Flag มาได้ไม่นานเหมือนกัน
แล้วโค้ดนี้ก็อาจจะเอาไปใช้กับ Module รุ่นอื่นไม่ได้เสมอไปนะ เพราะพี่ลองมาแล้วบางตัวมันก็งอแง
อย่างที่น้องเห็นนั่นแหละ พี่ไม่มีโปรแกรมวาด Schematic วงจรสวยๆ เลยว่ะ ใครมีตัวไหนแจ่มๆ แนะนำพี่ทีนะ ขอบใจมากวัยรุ่น
ข้อมูลทางเทคนิคแบบจัดเต็ม
โลจิกตัวบ่งชี้แบบเคลื่อนไหว (Kinetic Indicator Logic)
โปรเจกต์นี้ใช้ "Flags" หรือสัญญาณธงจริงๆ มาเป็นตัวบอกสถานะ ซึ่งพี่ว่ามันดูมีเสน่ห์และดูเป็นเครื่องกลเท่ๆ กว่าพวกหน้าจอดิจิทัลเยอะเลย
- การกำหนดตำแหน่งองศา (Angular Position Mapping): ตัว Arduino จะคอยคุม micro Servo รุ่น SG90 ที่ติดกับก้านธงไว้ โดยใน Firmware จะมีการ Map ค่าเหตุการณ์ต่างๆ (เช่น มีอีเมลเข้า หรือ Sensor โดนกระตุ้น) ให้กลายเป็นองศาของ Servo (เช่น 0° คือเอาธงลง, 90° คือยกธงขึ้น)
- จังหวะการสะบัดธงแบบนุ่มนวล (Smooth Swing Animation): เพื่อไม่ให้ธงมันสะบัดแรงเกินไปจนกลไกพัง โค้ดนี้เลยมีการใช้ Loop เพื่อค่อยๆ ขยับตำแหน่ง Servo ไปทีละนิด ผลที่ได้คือธงจะค่อยๆ ยกขึ้นแบบมีจังหวะจะโคน หล่อเท่เลยงานนี้
เอาไปใช้งานจริงยังไง?
- ระบบแจ้งเตือนด้วยสายตา: เหมาะมากสำหรับที่เงียบๆ อย่างห้องสมุดหรือโฮมออฟฟิศ เพราะการใช้ธงโบกมันดูสงบกว่าการใช้ Buzzer ส่งเสียงหนวกหู หรือแสงวาบจากหน้าจอเยอะเลยนะน้อง สู้ๆ นะวัยรุ่น ห้ามช็อตนะตัวนี้!