Chapter 3: Design a Traffic Light Controller (မီးပွိုင့်စနစ်)
အေ သင်ခန်းစာမှာ ကျွန်တော်တို့ သင်ရိုးထဲမှာ မပါသိရေ State Machine ဆိုရေ Concept အသစ်ကို မိတ်ဆက်ပီးပါဖို့။ အေစာရေ Logic ကို စနစ်တကျ ထိန်းချုပ်ဖို့ အလွန်အသုံးဝင်ပါရေ။
၁။ လိုအပ်ချက်တိ (Requirements)
- မီးပွိုင့်ရေ အနီ (Red)၊ အစိမ်း (Green)၊ အဝါ (Yellow) သုံးမျိုး ပြောင်းလဲရပါဖို့။
- အစိုင်လိုက်ပြောင်းရဖို့: Red -> Green -> Yellow -> Red (Loop)။
- အရောင်တစ်ခုစီအတွက် ကြာချိန် (Timer) သတ်မှတ်ထားရပါဖို့။
၂။ ဇာဖြစ်လို့ If-Else မလုံလောက်လဲ?
IF red THEN go green
ELSE IF green THEN go yellow
...
အေပိုင်ရွီးကေ ရှုပ်ထွေးလားနိုင်ပါရေ။ စနစ်တစ်ခုက "အခြီအနီ" (State) တစ်ခုကနီ နောက်တစ်ခုကို ပြောင်းလဲစာဖြစ်လို့ Finite State Machine (FSM) ကို သုံးစွာ အကောင်းဆုံးပါ။
၃။ State Diagram
စက်ဝိုင်းပုံစံ လည်ပတ်နီပုံကို ပုံဖော်ကြည့်ပါ။
graph LR
RED((Red)) -- 30s --> GREEN((Green))
GREEN -- 20s --> YELLOW((Yellow))
YELLOW -- 5s --> RED
၄။ Logic Implementation (Pseudocode)
STATE TrafficLight
INITIAL_STATE = RED
METHOD run()
LOOP FOREVER
CASE CURRENT_STATE OF
RED:
TurnOn(RedLight)
WAIT 30 Seconds
CURRENT_STATE = GREEN
GREEN:
TurnOn(GreenLight)
WAIT 20 Seconds
CURRENT_STATE = YELLOW
YELLOW:
TurnOn(YellowLight)
WAIT 5 Seconds
CURRENT_STATE = RED
END CASE
END LOOP
END METHOD
END STATE
သင်ခန်းစာ အကျဉ်းချုပ်
- State Machine: စနစ်တစ်ခုဧ့ အခြီအနေတိ (States) နှင့် ပြောင်းလဲမှု (Transitions) ကို ထိန်းချုပ်ခြင်း။
- Loop: မီးပွိုင့်ပိုင် အဆုံးမရှိ လည်ပတ်နီရေ စနစ်တိမှာ သုံးခြင်း။
လေ့ကျင့်ခန်း (Exercises)
- Pedestrian Button: လမ်းကူးလူက ခလုတ်ဖိလိုက်ကေ (Input) လက်ဟိဇာအရောင်ဖြစ်နီနီ မီးနီ (Red) ကို ချက်ချင်းပြောင်းချင်ရေ။ State Machine မှာ ဇာပိုင် Logic ထည့်ဖို့?
- Emergency Mode: Ambulanceကား လာကေ ခလုတ်တစ်ခု ဖိလိုက်စာနန့် မီးအားလုံး အနီဖြစ်လားပနာ တန့်လားရပါဖို့။ ယင့်စာကို State အသစ် တစ်ခုအနီနန့် ထည့်ဖို့လား၊ ဟိပြီးသား State တိကိုရာ ပြင်ဖို့လား?