หลักคิด/ทฤษฎีความรู้
สี่แยกไฟแดง สร้างขึ้นมาเพื่ออำนวยความสะดวกในการขับรถข้ามแยกให้เกิดความปลอดภัย โดยสี่แยก มีการติดตั้งไฟแดงไว้ทุกแยก รวม 4 ชุด
ในการปล่อยรถ จะมีวิธีการปล่อยหลาบแบบ แล้วแต่ผู้ออกแบบว่าจะปล่อยแบบใด เช่น
- ปล่อยทีละแยก แยกละ 30 วินาที
- ปล่อยทีละสาย คือแยกตรงข้ามพร้อมกัน
- ปล่อยทีละสาย คือแยกตรงข้ามพร้อมกัน แล้วปล่อยแล้วขวาต่างหาก
- กำหนดการปล่อยรถโดยตำรวจจราจร (การทำด้วยมือ)
ในที่นี้ จะให้นักเรียนฝึก การปล่อยรถทีละสาย หรือปล่อยแยกตรงข้ามพร้อมกัน โดยจะมีขั้นตอนการทำงานคือ
- เปิดไฟเขียวเส้นแรก ( แยก 1-2) ไฟแดง เส้น 2 (แยก 3-4) เป็นเวลา 30 วินาที
- ปิดไฟเขียวเส้นแรก ( แยก 1-2) เปิดไฟกระพริบสีเหลือง 2 ครั้ง ( แยก 1-2)
- เปิดไฟแดงเส้นแรก ( แยก 1-2) ไฟเขียว เส้น 2 (แยก 3-4) เป็นเวลา 30 วินาที
- ปิดไฟเขียวเส้น2 (แยก 3-4) เปิดไฟกระพริบสีเหลือง 2 ครั้ง(แยก 3-4)
- วนกลับไปที่ข้อ 1
ขั้นแรก ต่อวงจรกันก่อน
ขั้นต่อมา เขียน Code
ส่วนแรก กำหนดตัวแปร และตั้งค่า
// C++ code // กำหนดตัวแปร ทั้ง 4 แยก 12 หลอด int y1green = 1; int y1red = 2; int y1yello = 3; int y2green = 4; int y2yello = 5; int y2red = 6; int y3green = 7; int y3yello = 8; int y3red = 9; int y4green = 10; int y4yello = 11; int y4red = 12; void setup() { pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); }
ส่วนต่อมา กำหนดโปรแกรม
void loop() { // ไฟเขียวแยก 1-2 ไฟแดง แยก 3-4 (set1) digitalWrite(y1green, HIGH); digitalWrite(y2green, HIGH); digitalWrite(y3red, HIGH); digitalWrite(y4red, HIGH); delay(3000); //รอ 30 วินาที ปิดไฟเขียว กระพริบไฟเหลือง แล้วเปิดไฟแดง digitalWrite(y1green, LOW); digitalWrite(y2green, LOW); // กระพริบไฟเหลือง 1-2 digitalWrite(y1yello, HIGH); digitalWrite(y2yello, HIGH); delay(500); digitalWrite(y1yello, LOW); digitalWrite(y2yello, LOW); delay(500); digitalWrite(y1yello, HIGH); digitalWrite(y2yello, HIGH); delay(500); digitalWrite(y1yello, LOW); digitalWrite(y2yello, LOW); delay(500); // แล้วเปิดไฟแดง แยก 1-2 ไฟเขียว แยก 3-4 (set2) digitalWrite(y1red, HIGH); digitalWrite(y2red, HIGH); digitalWrite(y3red, LOW); digitalWrite(y4red, LOW); digitalWrite(y3green, HIGH); digitalWrite(y4green, HIGH); delay(3000); //รอ 30 วินาที ปิดไฟเขียว กระพริบไฟเหลือง แล้วเปิดไฟแดง digitalWrite(y3green, LOW); digitalWrite(y4green, LOW); // กระพริบไฟเหลือง 3-4 .. .. .. // แล้วปิดไฟแดง แยก 1-2 digitalWrite( , LOW); digitalWrite( , LOW); }