
การตั้งโปรแกรมให้ระบบไฟจราจร : ไฟเปลี่ยนสี

อัปเกรดสำหรับเนื้อหาเพิ่มเติม
True or false? Yellow light means go.
นี่คือสัญญาณไฟจราจร มันควบคุมการจราจรที่สี่แยก สีแดงคือหยุด สีเขียวคือไป และสีเหลือง เป็นตัวบอกว่าตอนนี้สัญญาณไฟจราจร จะเปลี่ยนจากสีแดงเป็นสีเขียวหรือกลับกัน ตอนนี้เราจะสร้างสัญญาณไฟจราจรของเราเอง และเราต้องการส่วนประกอบบางอย่าง ซึ่งมีไมโครคอนโทรลเลอร์ที่จะคอยตั้ง โปรแกรมควบคุมสัญญาณไฟจราจรขึ้นมา ไฟ LED ที่เปลี่ยนเป็นสีแดง สีเขียว และสีเหลือง ทั้งนี้ ยังต้องใช้สายเคเบิลเพื่อเชื่อม ชิ้นส่วนทั้งหมดเข้าด้วยกัน เมื่อเรามีส่วนประกอบทั้งหมด ก็สามารถเริ่มต้นได้ ก่อนอื่นเราจะใช้ไฟ LED สีแดง และนี่คือหน้าตาของมัน มันมีสองขา ขาหนึ่งยาวกว่านิดหน่อย และอีกขาหนึ่งสั้นกว่า ค่อยๆ ง้างมันออกจากกันเล็กน้อย, แบบนี้,และต่อ ขาข้างที่ยาวเข้ากับขั้วบวกข้างหนึ่ง บนไมโครคอนโทรลเลอร์ เราเลือกการเชื่อมต่อ หรือปักหมุด ที่ศูนย์สำหรับไฟ LED สีแดง จากนั้นเชื่อมไฟ LED สีเหลือง เข้ากับพินหมายเลขหนึ่ง และเชื่อมไฟ LED สีเขียวกับพินหมายเลขสอง เชื่อมต่อสายเคเบิลกับขาที่สั้น ของไฟ LED แต่ละตัว กับขั้วลบ จนถึงตอนนี้ไม่มีไดโอดตัวไหนไฟติดเลย นี่เป็นเพราะวงจรยังคงเปิดอยู่ ตอนนี้เราจะตั้งโปรแกรม ไมโครคอนโทรลเลอร์ เพื่อให้เราควบคุมมันได้ เมื่อมีการปิดและเปิดวงจร สัญญาณไฟจราจรจะเปิดและปิดตามลำดับ ไฟแดง ไฟเหลือง ไฟเขียว ไฟเหลือง และไปเรื่อยๆ ตอนนี้เราจะกำหนดคำสั่งที่ชัดเจน ว่าไฟพวกนี้ทำงานอย่างไร คำสั่งหรืออัลกอริทึมจึงควรจะเป็น เปิดไฟแดง เปิดไฟเหลือง เปิดไฟเขียว แล้วก็เปิด... โอ้, ตอนนี้ไฟทั้งหมดถูกเปิดหมดแล้ว แล้วมันมีอะไรผิดพลาดล่ะ เห็นได้ชัดว่าเราต้องแก้ไข อัลกอริทึมนิดหน่อย เราจะหยุดวิดีโอกันชั่วคราวแล้วมาดูว่า มีอะไรขาดหายไปในคำสั่งบ้าง เราไม่ได้ให้คำสั่งเกี่ยวกับ เวลาที่จะปิดหลอดไฟ เราจบมันด้วยการให้ไฟทั้งสาม ดวงติดในเวลาเดียวกัน งั้นมาลองปรับอัลกอริทึม ด้วยการเปิดไฟแดง ปิดไฟแดง และเปิดไฟเหลือง ปิดไฟเหลือง และเปิดไฟเขียว ปิดไฟเขียว และเปิดไฟเหลือง ปิดไฟเหลืองและทำใหม่อีกรอบ มาทดสอบอัลกอริทึมของเรากัน ใช่แล้ว หลอดไฟจะไม่ติดพร้อมกันหมด แต่ตอนนี้สัญญาณไฟจราจร เปลี่ยนสีอย่างรวดเร็ว ไม่มีรถเมล์คันไหนแล่นมาทัน ก่อนมันจะเปลี่ยนเป็นไฟแดงอีกครั้ง หยุดวิดีโอไว้และคิดว่าจะ แก้ไขอัลกอริทึมนี้ได้อย่างไร เราไม่ได้คุยกันเลยว่าควรเปิด ไฟแต่ละสีไว้นานแค่ไหน ตัวแปรใหม่ของอัลกอริทึมจะหยุด ทุกอย่างไว้ชั่วคราวระหว่างรอไฟเปลี่ยนสี เพิ่มเติม : หยุดสามวินาทีที่นี้ ดังนั้นผู้ที่ต้องการข้ามถนน ก็สามารถข้ามได้ทัน 1 วินาทีตรงนี้,ในขณะที่มันเป็น ไฟเหลืองอยู่, ดังนั้นทุกคนจึงพร้อม 3 วินาทีตรงนี้ จะทำให้รถเมล์ ขับผ่านทางแยกได้ทัน เพิ่ม 1 วินาทีตรงนี้ ลองอีกครั้งสิ ใช่แล้ว มันทำงานได้ดีทีเดียว รหัสเทียมใกล้สมบูรณ์แล้ว เราสามารถใช้คำสั่งเหล่านี้ และอัลกอริทึมของเราเป็นพื้นฐาน ในการตั้งโปรแกรม แต่เดี๋ยวก่อน รหัสเทียมจะจบลงแค่นี้เหรอ หลังจากไฟเขียวและไฟเหลือง เราจะเปิดไฟแดงอีกครั้งรึ? ไม่, เราไม่จำเป็นต้องทำแบบนั้น เราได้เขียนคำว่า"ทำซ้ำ"ลงไปแล้ว ซึ่งเป็นการวน การวนซ้ำในโปรแกรมจะทำให้ บางส่วนของโปรแกรมทำงานซ้ำ ตราบใดที่เงื่อนไขยังเป็นจริงอยู่ เราต้องการให้สัญญาณไฟจราจรทำงานตลอดเวลา ดังนั้นการทำซ้ำควรเป็นไปอย่างต่อเนื่อง ดังนั้นเราจึงตั้งเงื่อนไขที่เป็นจริงเสมอ นั่นคือใช้ 'หนึ่งเท่ากับหนึ่ง' ตราบใดที่มันเป็นจริง, คำสั่งวนซ้ำ ก็จะทำงานอยู่ การจะทำสัญลักษณ์ว่าแถวใดจะวนซ้ำ เราจะกดแท็บแถวเหล่านี้ดังนี้ : เอาล่ะ ตอนนี้รหัสเทียมก็เสร็จสมบูรณ์แล้ว ดังนั้นก็ถึงเวลาที่คุณต้องเขียน โปรแกรมสัญญาณไฟจราจรแล้วล่ะ