Versie 2 - Vorm state machine aangenomen
Dependencies: mbed
main.cpp@0:ec163fd43fec, 2018-03-25 (annotated)
- Committer:
- lennartgroen
- Date:
- Sun Mar 25 22:35:49 2018 +0000
- Revision:
- 0:ec163fd43fec
- Child:
- 1:879991cde999
Versie 2 van stoplicht, nu geschreven als state machine;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lennartgroen | 0:ec163fd43fec | 1 | /* |
lennartgroen | 0:ec163fd43fec | 2 | Namen: Lennart Groen |
lennartgroen | 0:ec163fd43fec | 3 | Klas: EMT1PSa |
lennartgroen | 0:ec163fd43fec | 4 | Opdracht: MBED - Stoplicht |
lennartgroen | 0:ec163fd43fec | 5 | Samengewerkt met: ... |
lennartgroen | 0:ec163fd43fec | 6 | Datum: 17-03-2018 |
lennartgroen | 0:ec163fd43fec | 7 | Inspiratie uit: https://os.mbed.com/users/4180_1/notebook/rgb-leds/ |
lennartgroen | 0:ec163fd43fec | 8 | */ |
lennartgroen | 0:ec163fd43fec | 9 | |
lennartgroen | 0:ec163fd43fec | 10 | #include <mbed.h> |
lennartgroen | 0:ec163fd43fec | 11 | |
lennartgroen | 0:ec163fd43fec | 12 | struct lichtkleur { // Struct voor beheren LED kleuren van stoplicht |
lennartgroen | 0:ec163fd43fec | 13 | float val_rood, val_groen, val_blauw; |
lennartgroen | 0:ec163fd43fec | 14 | }; |
lennartgroen | 0:ec163fd43fec | 15 | |
lennartgroen | 0:ec163fd43fec | 16 | enum State { // State machine status |
lennartgroen | 0:ec163fd43fec | 17 | STATE_ROOD, |
lennartgroen | 0:ec163fd43fec | 18 | STATE_NZ_GROEN, |
lennartgroen | 0:ec163fd43fec | 19 | STATE_NZ_ORANJE, |
lennartgroen | 0:ec163fd43fec | 20 | STATE_OW_GROEN, |
lennartgroen | 0:ec163fd43fec | 21 | STATE_OW_ORANJE, |
lennartgroen | 0:ec163fd43fec | 22 | }; |
lennartgroen | 0:ec163fd43fec | 23 | |
lennartgroen | 0:ec163fd43fec | 24 | // Defineren van ledkleuren voor RGB LED - Buiten class omdat dit compiling errors geeft |
lennartgroen | 0:ec163fd43fec | 25 | const lichtkleur rood = { 0.0,1.0,1.0}; |
lennartgroen | 0:ec163fd43fec | 26 | const lichtkleur geel = { 0.5,0.0,1.0}; |
lennartgroen | 0:ec163fd43fec | 27 | const lichtkleur groen = { 1.0,0.0,1.0}; |
lennartgroen | 0:ec163fd43fec | 28 | |
lennartgroen | 0:ec163fd43fec | 29 | |
lennartgroen | 0:ec163fd43fec | 30 | class stoplicht // Class voor object stoplicht |
lennartgroen | 0:ec163fd43fec | 31 | { |
lennartgroen | 0:ec163fd43fec | 32 | public: |
lennartgroen | 0:ec163fd43fec | 33 | stoplicht(PinName p_rood, PinName p_groen, PinName p_blauw); |
lennartgroen | 0:ec163fd43fec | 34 | void set_rood(); |
lennartgroen | 0:ec163fd43fec | 35 | void set_geel(); |
lennartgroen | 0:ec163fd43fec | 36 | void set_groen(); |
lennartgroen | 0:ec163fd43fec | 37 | private: |
lennartgroen | 0:ec163fd43fec | 38 | PwmOut pin_rood; |
lennartgroen | 0:ec163fd43fec | 39 | PwmOut pin_groen; |
lennartgroen | 0:ec163fd43fec | 40 | PwmOut pin_blauw; |
lennartgroen | 0:ec163fd43fec | 41 | }; |
lennartgroen | 0:ec163fd43fec | 42 | |
lennartgroen | 0:ec163fd43fec | 43 | int main() |
lennartgroen | 0:ec163fd43fec | 44 | { |
lennartgroen | 0:ec163fd43fec | 45 | enum State stoplicht_state = STATE_ROOD; // State machine status wegschrijven |
lennartgroen | 0:ec163fd43fec | 46 | |
lennartgroen | 0:ec163fd43fec | 47 | stoplicht stoplicht_nz(D11, D10, D9); // defineren stoplicht noord zuid (pin_rood, pin_groen, pin_blauw) |
lennartgroen | 0:ec163fd43fec | 48 | stoplicht stoplicht_ow(D6, D5, D3); // defineren stoplicht oost west (pin_rood, pin_groen, pin_blauw) |
lennartgroen | 0:ec163fd43fec | 49 | enum State prev_state = STATE_OW_ORANJE; // bijhouden van vorige state om te bepalen welke stoplicht aan gaat na rood |
lennartgroen | 0:ec163fd43fec | 50 | |
lennartgroen | 0:ec163fd43fec | 51 | Timer timer1; // timer voor beheren van tijd interrupt |
lennartgroen | 0:ec163fd43fec | 52 | timer1.start(); |
lennartgroen | 0:ec163fd43fec | 53 | |
lennartgroen | 0:ec163fd43fec | 54 | while(1) { |
lennartgroen | 0:ec163fd43fec | 55 | |
lennartgroen | 0:ec163fd43fec | 56 | |
lennartgroen | 0:ec163fd43fec | 57 | switch (stoplicht_state) { |
lennartgroen | 0:ec163fd43fec | 58 | case STATE_ROOD: |
lennartgroen | 0:ec163fd43fec | 59 | stoplicht_nz.set_rood(); |
lennartgroen | 0:ec163fd43fec | 60 | stoplicht_ow.set_rood(); |
lennartgroen | 0:ec163fd43fec | 61 | if(prev_state == STATE_OW_ORANJE && timer1.read() >= 1) { |
lennartgroen | 0:ec163fd43fec | 62 | stoplicht_state = STATE_NZ_GROEN; |
lennartgroen | 0:ec163fd43fec | 63 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 64 | } else if(prev_state == STATE_NZ_ORANJE && timer1.read() >= 1) { |
lennartgroen | 0:ec163fd43fec | 65 | stoplicht_state = STATE_OW_GROEN; |
lennartgroen | 0:ec163fd43fec | 66 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 67 | } |
lennartgroen | 0:ec163fd43fec | 68 | break; |
lennartgroen | 0:ec163fd43fec | 69 | case STATE_NZ_GROEN: |
lennartgroen | 0:ec163fd43fec | 70 | stoplicht_nz.set_groen(); |
lennartgroen | 0:ec163fd43fec | 71 | if(timer1.read() >= 5) { |
lennartgroen | 0:ec163fd43fec | 72 | stoplicht_state = STATE_NZ_ORANJE; |
lennartgroen | 0:ec163fd43fec | 73 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 74 | } |
lennartgroen | 0:ec163fd43fec | 75 | break; |
lennartgroen | 0:ec163fd43fec | 76 | case STATE_NZ_ORANJE: |
lennartgroen | 0:ec163fd43fec | 77 | stoplicht_nz.set_geel(); |
lennartgroen | 0:ec163fd43fec | 78 | if(timer1.read() >= 1) { |
lennartgroen | 0:ec163fd43fec | 79 | prev_state = STATE_NZ_ORANJE; |
lennartgroen | 0:ec163fd43fec | 80 | stoplicht_state = STATE_ROOD; |
lennartgroen | 0:ec163fd43fec | 81 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 82 | } |
lennartgroen | 0:ec163fd43fec | 83 | break; |
lennartgroen | 0:ec163fd43fec | 84 | case STATE_OW_GROEN: |
lennartgroen | 0:ec163fd43fec | 85 | stoplicht_ow.set_groen(); |
lennartgroen | 0:ec163fd43fec | 86 | if(timer1.read() >= 5) { |
lennartgroen | 0:ec163fd43fec | 87 | stoplicht_state = STATE_OW_ORANJE; |
lennartgroen | 0:ec163fd43fec | 88 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 89 | } |
lennartgroen | 0:ec163fd43fec | 90 | break; |
lennartgroen | 0:ec163fd43fec | 91 | case STATE_OW_ORANJE: |
lennartgroen | 0:ec163fd43fec | 92 | stoplicht_ow.set_geel(); |
lennartgroen | 0:ec163fd43fec | 93 | if(timer1.read() >= 1) { |
lennartgroen | 0:ec163fd43fec | 94 | prev_state = STATE_OW_ORANJE; |
lennartgroen | 0:ec163fd43fec | 95 | stoplicht_state = STATE_ROOD; |
lennartgroen | 0:ec163fd43fec | 96 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 97 | } |
lennartgroen | 0:ec163fd43fec | 98 | break; |
lennartgroen | 0:ec163fd43fec | 99 | default: |
lennartgroen | 0:ec163fd43fec | 100 | stoplicht_state = STATE_ROOD; |
lennartgroen | 0:ec163fd43fec | 101 | break; |
lennartgroen | 0:ec163fd43fec | 102 | } |
lennartgroen | 0:ec163fd43fec | 103 | |
lennartgroen | 0:ec163fd43fec | 104 | } |
lennartgroen | 0:ec163fd43fec | 105 | |
lennartgroen | 0:ec163fd43fec | 106 | } |
lennartgroen | 0:ec163fd43fec | 107 | |
lennartgroen | 0:ec163fd43fec | 108 | stoplicht::stoplicht(PinName p_rood, PinName p_groen, PinName p_blauw) |
lennartgroen | 0:ec163fd43fec | 109 | :pin_rood(p_rood), pin_groen(p_groen), pin_blauw(p_blauw) |
lennartgroen | 0:ec163fd43fec | 110 | { |
lennartgroen | 0:ec163fd43fec | 111 | |
lennartgroen | 0:ec163fd43fec | 112 | } |
lennartgroen | 0:ec163fd43fec | 113 | |
lennartgroen | 0:ec163fd43fec | 114 | // Functies voor stoplicht class // |
lennartgroen | 0:ec163fd43fec | 115 | void stoplicht::set_groen() |
lennartgroen | 0:ec163fd43fec | 116 | { |
lennartgroen | 0:ec163fd43fec | 117 | pin_rood = groen.val_rood; |
lennartgroen | 0:ec163fd43fec | 118 | pin_groen = groen.val_groen; |
lennartgroen | 0:ec163fd43fec | 119 | pin_blauw = groen.val_blauw; |
lennartgroen | 0:ec163fd43fec | 120 | } |
lennartgroen | 0:ec163fd43fec | 121 | |
lennartgroen | 0:ec163fd43fec | 122 | |
lennartgroen | 0:ec163fd43fec | 123 | void stoplicht::set_geel() |
lennartgroen | 0:ec163fd43fec | 124 | { |
lennartgroen | 0:ec163fd43fec | 125 | pin_rood = geel.val_rood; |
lennartgroen | 0:ec163fd43fec | 126 | pin_groen = geel.val_groen; |
lennartgroen | 0:ec163fd43fec | 127 | pin_blauw = geel.val_blauw; |
lennartgroen | 0:ec163fd43fec | 128 | } |
lennartgroen | 0:ec163fd43fec | 129 | |
lennartgroen | 0:ec163fd43fec | 130 | |
lennartgroen | 0:ec163fd43fec | 131 | void stoplicht::set_rood() |
lennartgroen | 0:ec163fd43fec | 132 | { |
lennartgroen | 0:ec163fd43fec | 133 | pin_rood = rood.val_rood; |
lennartgroen | 0:ec163fd43fec | 134 | pin_groen = rood.val_groen; |
lennartgroen | 0:ec163fd43fec | 135 | pin_blauw = rood.val_blauw; |
lennartgroen | 0:ec163fd43fec | 136 | } |
lennartgroen | 0:ec163fd43fec | 137 |