// โปรแกรมควบคุมขา Digital INPUT 04
//
int sw = 16; //ประกาศตัวแปรชื่อ sw มีค่าเท่ากับ GP16
int led1 = 21; //ประกาศตัวแปรชื่อ led มีค่าเท่ากับ GP21
int led2 = 19; //ประกาศตัวแปรชื่อ led มีค่าเท่ากับ GP19
int led3 = 18; //ประกาศตัวแปรชื่อ led มีค่าเท่ากับ GP18
int flag1 = 0; //ประกาศตัวแปรชื่อ flag1 มีค่าเท่ากับ "0"
int step = 1; //ประกาศตัวแปรชื่อ step มีค่าเท่ากับ "1"
void setup()
{
pinMode(sw, INPUT); //กำหนดขา GP16 เป็น Input
pinMode(led1,OUTPUT); //กำหนดขา GP21 เป็น Output
pinMode(led2,OUTPUT); //กำหนดขา GP19 เป็น Output
pinMode(led3,OUTPUT); //กำหนดขา GP18 เป็น Output
Serial.begin(9600); //คำสั่งเริ่มการสื่อกับคอมพิวเตอร์ผ่าน USB ด้วยความถี่ 9600
}
void loop(){
//put your main code here, to run repeatedly:
if(digitalRead (sw)==LOW){
delay(50);
while(digitalRead(sw)==LOW){delay(50);}
flag1 = !flag1;
Serial.print("flag1=");
Serial.println(flag1);
}
delay(500);
if(flag1 == 1){
switch(step){
case 1:digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
step=2;
break;
case 2:digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
step=3;
break;
case 3:digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite (led3, HIGH);
step=1;
break;
}
}
}
/*
### อธิบายการทำงานของโค้ด:switch-case
1. **เริ่มต้น:**
- ตัวแปร `step` ถูกกำหนดค่าเริ่มต้นเป็น `1` ซึ่งหมายความว่าในตอนแรกจะเข้าไปใน `case 1` ของ `switch`.
2. **`case 1`:**
- เมื่อ `step == 1`:
- LED 1 (`led1`) จะถูกเปิด (ตั้งค่าเป็น `HIGH`)
- LED 2 (`led2`) และ LED 3 (`led3`) จะถูกปิด (ตั้งค่าเป็น `LOW`)
- จากนั้นตัวแปร `step` จะถูกเปลี่ยนเป็น `2`
- เมื่อทำงานใน `case 1` เสร็จแล้ว โปรแกรมจะหยุดทำงานในบล็อกนี้และออกไป (ด้วยคำสั่ง `break`).
3. **`case 2`:**
- เมื่อ `step == 2` (จากการที่ใน `case 1` เราได้เปลี่ยนค่า `step` เป็น `2`):
- LED 1 (`led1`) จะถูกปิด (ตั้งค่าเป็น `LOW`)
- LED 2 (`led2`) จะถูกเปิด (ตั้งค่าเป็น `HIGH`)
- LED 3 (`led3`) จะถูกปิด (ตั้งค่าเป็น `LOW`)
- จากนั้นตัวแปร `step` จะถูกเปลี่ยนเป็น `3`
- เมื่อทำงานใน `case 2` เสร็จแล้ว โปรแกรมจะหยุดทำงานในบล็อกนี้และออกไป (ด้วยคำสั่ง `break`).
4. **`case 3`:**
- เมื่อ `step == 3` (จากการที่ใน `case 2` เราได้เปลี่ยนค่า `step` เป็น `3`):
- LED 1 (`led1`) จะถูกปิด (ตั้งค่าเป็น `LOW`)
- LED 2 (`led2`) จะถูกปิด (ตั้งค่าเป็น `LOW`)
- LED 3 (`led3`) จะถูกเปิด (ตั้งค่าเป็น `HIGH`)
- จากนั้นตัวแปร `step` จะถูกเปลี่ยนเป็น `1` เพื่อกลับไปเริ่มที่ `case 1`
- เมื่อทำงานใน `case 3` เสร็จแล้ว โปรแกรมจะหยุดทำงานในบล็อกนี้และออกไป (ด้วยคำสั่ง `break`).
### ผลลัพธ์:
- เมื่อโปรแกรมเริ่มทำงาน มันจะเริ่มที่ `step = 1`, เปิด LED 1 และปิด LED 2 และ LED 3.
- หลังจากนั้น `step` จะเปลี่ยนเป็น `2`, LED 1 จะปิด, LED 2 จะเปิด, และ LED 3 จะปิด.
- จากนั้น `step` จะเปลี่ยนเป็น `3`, LED 1 และ LED 2 จะปิด, LED 3 จะเปิด.
- เมื่อถึง `step = 3`, ค่า `step` จะเปลี่ยนกลับเป็น `1`, และวงรอบจะเริ่มใหม่ (กลับไปที่ `case 1`).
### สรุป:
โค้ดนี้ทำการสลับเปิดปิด LED 3 ดวงในลำดับที่กำหนดไว้:
- LED 1 → เปิด, LED 2 และ LED 3 → ปิด (เมื่อ `step = 1`)
- LED 1 → ปิด, LED 2 → เปิด, LED 3 → ปิด (เมื่อ `step = 2`)
- LED 1 และ LED 2 → ปิด, LED 3 → เปิด (เมื่อ `step = 3`)
การทำงานของ `step` จะวนลูปไปเรื่อยๆ ทำให้ LED สลับการเปิด-ปิดในลำดับที่กำหนด.
*/
ความต้านทานต่อ LED = 470 Ω
ความต้านทานต่อ switch = 1 kΩ