ขอโค๊ด Arduino MEGA หน่อยครับ แบบไฟสเต็ปต่างๆ ต้องส่งสิ้นเดือนแล้ว

ไฟกระพริบแบบต่างๆอะครับ เช่นแบบฝนดาวตก หรืออะไรก็ได้ รบกวนทีครับ
แก้ไขข้อความเมื่อ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 4
จากโค๊ดตัวอย่าง
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้

เราได้อะไร จากตัวอย่างนี้ คือการกำหนดขา การสั่งให้สว่าง การสั่งให้ดับ เวลาที่จะหน่วง

อ่า แล้วถ้าเราจะทำไฟฉุกเฉิน ที่รถฉุกเฉินเขาติดกันละ .... มาดูรูปแบบกันก่อน

สมมุติว่ามีไฟ 8 ดวง เรียงตามนี้ B1 R1 G1 W1  W2  G2 R2 B2  ....Bสีน้ำเงิน Rสีแดง Gสีเขียว Wสีขาว
กระบวนการกระพริบ จากนอกเข้าใน
- B1 B2 กระพริบเร็วๆ 2 ครั้ง  ที่เหลือดับ...........(1)
- R1 R2 กระพริบเร็วๆ 2 ครั้ง  ที่เหลือดับ...........(2)
- G1 G2 กระพริบเร็วๆ 2 ครั้ง  ที่เหลือดับ...........(3)
- W1 W2 กระพริบเร็วๆ 2 ครั้ง  ที่เหลือดับ...........(4)

ต่อด้วย กระบวนการกระพริบ จากในออกข้างนอก
- G1 G2 กระพริบเร็วๆ 2 ครั้ง  ที่เหลือดับ...........(5)
- R1 R2 กระพริบเร็วๆ 2 ครั้ง  ที่เหลือดับ...........(6)
- B1 B2 กระพริบเร็วๆ 2 ครั้ง  ที่เหลือดับ...........(7)

แล้วก็วนการทำงาน ในออกนอก นอกออกใน

เราก็เขียนได้ว่า
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้

ซึ่งจะเห็นว่า มีการกระทำที่ซ้ำกันอยู่ อาจเขียนเป็นฟังชั่นย่อยการทำงานของแต่ละลำดับ  แล้วเรียกใช้เอาก็ได้
เช่น

/* B1 B2 กระพริบเร็วๆ 2 ครั้ง  ที่เหลือดับ...........(1)  */
/// ปิดดวงที่ไม่เกี่ยวข้อง
digitalWrite(R1, LOW);    digitalWrite(R2, LOW);  
digitalWrite(G1, LOW);  digitalWrite(G2, LOW);    
digitalWrite(W1, LOW);    digitalWrite(W2,LOW);  
/// กระพริบ ดวงที่เกี่ยวข้อง
digitalWrite(B1, HIGH);  digitalWrite(B2, HIGH);      delay(200);   /// สว่างครั้งแรก    
digitalWrite(B1, LOW);  digitalWrite(B2, LOW);     delay(200);     /// ดับ เพื่อกระพริบครั้งที่2
digitalWrite(B1, HIGH);  digitalWrite(B2, HIGH);     delay(200);       ///  สว่างครั้งที่2
มันจะซ้ำกับ รูปแบบที่ 7

เราก็เขียนเป็น

void B1B2_Blink()
{

/// ปิดดวงที่ไม่เกี่ยวข้อง
digitalWrite(R1, LOW);    digitalWrite(R2, LOW);  
digitalWrite(G1, LOW);  digitalWrite(G2, LOW);    
digitalWrite(W1, LOW);    digitalWrite(W2,LOW);  
/// กระพริบ ดวงที่เกี่ยวข้อง
digitalWrite(B1, HIGH);  digitalWrite(B2, HIGH);      delay(200);   /// สว่างครั้งแรก    
digitalWrite(B1, LOW);  digitalWrite(B2, LOW);     delay(200);     /// ดับ เพื่อกระพริบครั้งที่2
digitalWrite(B1, HIGH);  digitalWrite(B2, HIGH);     delay(200);       ///  สว่างครั้งที่2

}
แบบอื่นๆก็เหมือนกัน  เวลาเรียกใช้ก็
void loop()
{
B1B2_Blink();
R1R2_Blink();
G1G2_Blink();
W1W2_Blink();
G1G2_Blink();
R1R2_Blink();
}
เรื่องของลูกเล่นมันอยู่ที่ เราจะเรียงการแสดงผลยังไง ....หวังว่า คงเป็นแนวทางให้ได้
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่