Precision Logic Timing: ไฟสตาร์ท Formula 1
การทำให้ LED ติดดับตัวเดียวเนี่ยมันง่าย แต่โปรเจค Formula 1 Start Lights นี่แหละที่จะสอนให้น้องเห็นความซับซ้อนของ "Sequential State Timers" จัดเต็มเลย! มันจำลองลำดับไฟสตาร์ท 5 ดวงสุดคลาสสิกของ FIA ได้เป๊ะๆ โดยใช้ลูปซ้อนลูปและการคำนวณดีเลย์แบบสุ่ม เพื่อบังคับให้เกิดความท้าทายเรื่องเวลาตอบสนองที่คาดเดาไม่ได้
ลอจิกของอาร์เรย์แบบเรียงลำดับ
ในสนามจริง ไฟสตาร์ท F1 จะมีไฟสีแดงยักษ์ 5 ดวงติดทีละดวงทุกวินาที ก่อนจะดับพร้อมกันเพื่อเริ่มแข่ง
- The Array Method: แทนที่จะเขียน
digitalWrite()50 รอบ ให้เรากำหนดอาร์เรย์ของ integer ไปเลย:int lights[5] = {3, 4, 5, 6, 7}; - The Build-Up Loop: พอกรรมการกดปุ่ม "Start Sequence" ลูป
forก็จะทำงานfor (int i = 0; i < 5; i++) { digitalWrite(lights[i], HIGH); delay(1000); // รอเป๊ะๆ 1 วินาทีระหว่างไฟแต่ละดวง } - ตอนนี้ไฟแดงทั้ง 5 ดวงก็จะสว่างจ้าเตรียมพร้อมแล้ว
ช่วงเวลาดับไฟแบบสุ่ม
ถ้าเวลาที่รอก่อนไฟดับ (Lights Out) จะเป็น 2 วินาทีเป๊ะๆ นักแข่งก็แค่นับ 1 2 แล้วออกตัวได้สบายๆ FIA เลยทำให้เวลานี้คาดเดาไม่ได้เลย (อยู่ระหว่าง 0.2 ถึง 3 วินาที)
- The Random Seed: Arduino สร้างตัวเลขสุ่มเทียมโดยใช้
random(200, 3000); - (Pro Tip: ฟังก์ชัน
random()ของ Arduino นี่ห่วยมาก มันจะให้ลำดับตัวเลขเดิมๆ เสมอ ต้องไป "เพาะเมล็ด" (seed) เครื่องมือสร้างตัวเลขสุ่มในsetup()ก่อน โดยอ่านค่าจากพินอนาล็อกที่ไม่ได้ต่ออะไร:randomSeed(analogRead(A0));ถึงจะได้ค่าสุ่มจริงๆ) - ระบบจะรอเป็นเวลาสุ่มนั้น แล้วค่อยสั่งให้พินทั้ง 5 ตัวเป็น
LOWพร้อมกันทันที เพื่อเริ่มการแข่งขัน!
Arduino จะสุ่มเลือกเวลาระหว่าง 4 ถึง 7 วินาทีเพื่อดับไฟ เหมือนในสนามจริงเป๊ะ!
สเปคการสร้างที่ต้องรู้
- Arduino Uno/Nano: ตัวสร้างลำดับงานหลัก
- โมดูล LED สีแดงยักษ์ 5 ตัว
- โครงสร้างเสาไฟเหนือศีรษะ พิมพ์จากเครื่อง 3D Printer หรือทำจากไม้
- (Optional Advanced Module: ติดเซ็นเซอร์ตัดแสงอินฟราเรด (IR break-beam sensors) บนพื้นล่างเสาไฟ ถ้ามีรถตัดแสงก่อนไฟดับ Arduino จะสั่งให้ธงเหลืองยักษ์ "Jump Start" ขึ้นทันที!)
สู้งานนะน้อง! ห้ามช็อตนะตัวนี้