Switch 1 ตัว ควบคุม output 4 รูปแบบ

กดสวิตซ์ ครั้งที่ 1 รีเลย์ ตัวที่ 1 ติด
กดสวิตซ์ ครั้งที่ 2 รีเลย์ ตัวที่ 2 ติด ตัวที่ 1 ดับ
กดสวิตซ์ ครังที่ 3 รีเลย์ 2 ดับ 3 ติด
กดสวิตซ์ ครั้งที่ 4 รีเลย์ 3 ดับ 4 ติด
กดสวิตซ์ ครั้งที่ 5 รีเลย์ ดับทั้งหมด
กดสวิตซ์ อีกครั้งวนกับไปลูปเดิม

ผมจะแก้ไขเพิ่มเติมจากตัวอย่างโค้ต ของกระทู้นี้เพื่อความงาน

ขั้นตอนที่ 1

ผมเริ่มจากตัด Led ออกไป 2 ตัว นั้นคือตัวที่ 12 และ 13 เพราะเราต้องการ output แค่ 4 ตัวเท่านั้น

และตัดโค้ต ที่เราไม่ได้ใช้ออกไปด้วย

อ่าวไม่ทันไรก็เสร็จซะและ แค่ตัดโค้ตออกก็ตรงกับโจทย์ที่ตั้งเลยนะครับจบข่าว

const byte LED1[]={8,9,10,11 };

const int P1=2;

const int debaunceDelay=100;

byte stato=1;  

void setup() {

  pinMode(LED1[0], OUTPUT);

  pinMode(LED1[1], OUTPUT);

  pinMode(LED1[2], OUTPUT);

  pinMode(LED1[3], OUTPUT);

  pinMode(P1, INPUT);

}

void loop() {

  if(digitalRead(P1))

  {

    if(stato<5) stato=stato+1;

    else stato=1;

  }

     

switch(stato)

{ 

  case 1: 

    digitalWrite(LED1[0],LOW);

    digitalWrite(LED1[1],LOW);

    digitalWrite(LED1[2],LOW);

    digitalWrite(LED1[3],LOW);

    break;

  case 2: 

    digitalWrite(LED1[0],HIGH);

    digitalWrite(LED1[1],LOW);

    digitalWrite(LED1[2],LOW);

    digitalWrite(LED1[3],LOW);

    break;

  case 3: 

    digitalWrite(LED1[0],LOW);

    digitalWrite(LED1[1],HIGH);

    digitalWrite(LED1[2],LOW);

    digitalWrite(LED1[3],LOW);

    break;

 case 4: 

    digitalWrite(LED1[0],LOW);

    digitalWrite(LED1[1],LOW);

    digitalWrite(LED1[2],HIGH);

    digitalWrite(LED1[3],LOW);

    break;

 case 5: 

    digitalWrite(LED1[0],LOW);

    digitalWrite(LED1[1],LOW);

    digitalWrite(LED1[2],LOW);

    digitalWrite(LED1[3],HIGH);

    break;

}  

  while (digitalRead(P1) == LOW)

  {

    delay(10);

  }

  delay(debaunceDelay);

}

อุปกรณ์ที่ใช้

ผลลัพธ์

Simulate


ท่านใด มีวิธีเขียนที่ต่างออกไปสามารถเอามาแชร์กันได้เลยนะครับ

1 Like