Versie 2 - Vorm state machine aangenomen
Dependencies: mbed
main.cpp@1:879991cde999, 2018-03-25 (annotated)
- Committer:
- lennartgroen
- Date:
- Sun Mar 25 23:08:59 2018 +0000
- Revision:
- 1:879991cde999
- Parent:
- 0:ec163fd43fec
Switches toegevoegd voor ring lus schakeling;
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 | 1:879991cde999 | 11 | DigitalIn ring_NZ = D4; |
lennartgroen | 1:879991cde999 | 12 | DigitalIn ring_OW = D2; |
lennartgroen | 0:ec163fd43fec | 13 | |
lennartgroen | 0:ec163fd43fec | 14 | struct lichtkleur { // Struct voor beheren LED kleuren van stoplicht |
lennartgroen | 0:ec163fd43fec | 15 | float val_rood, val_groen, val_blauw; |
lennartgroen | 0:ec163fd43fec | 16 | }; |
lennartgroen | 0:ec163fd43fec | 17 | |
lennartgroen | 0:ec163fd43fec | 18 | enum State { // State machine status |
lennartgroen | 0:ec163fd43fec | 19 | STATE_ROOD, |
lennartgroen | 0:ec163fd43fec | 20 | STATE_NZ_GROEN, |
lennartgroen | 0:ec163fd43fec | 21 | STATE_NZ_ORANJE, |
lennartgroen | 0:ec163fd43fec | 22 | STATE_OW_GROEN, |
lennartgroen | 0:ec163fd43fec | 23 | STATE_OW_ORANJE, |
lennartgroen | 1:879991cde999 | 24 | STATE_RING_NZ, |
lennartgroen | 1:879991cde999 | 25 | STATE_RING_OW, |
lennartgroen | 0:ec163fd43fec | 26 | }; |
lennartgroen | 0:ec163fd43fec | 27 | |
lennartgroen | 0:ec163fd43fec | 28 | // Defineren van ledkleuren voor RGB LED - Buiten class omdat dit compiling errors geeft |
lennartgroen | 0:ec163fd43fec | 29 | const lichtkleur rood = { 0.0,1.0,1.0}; |
lennartgroen | 0:ec163fd43fec | 30 | const lichtkleur geel = { 0.5,0.0,1.0}; |
lennartgroen | 0:ec163fd43fec | 31 | const lichtkleur groen = { 1.0,0.0,1.0}; |
lennartgroen | 0:ec163fd43fec | 32 | |
lennartgroen | 0:ec163fd43fec | 33 | |
lennartgroen | 0:ec163fd43fec | 34 | class stoplicht // Class voor object stoplicht |
lennartgroen | 0:ec163fd43fec | 35 | { |
lennartgroen | 0:ec163fd43fec | 36 | public: |
lennartgroen | 0:ec163fd43fec | 37 | stoplicht(PinName p_rood, PinName p_groen, PinName p_blauw); |
lennartgroen | 0:ec163fd43fec | 38 | void set_rood(); |
lennartgroen | 0:ec163fd43fec | 39 | void set_geel(); |
lennartgroen | 0:ec163fd43fec | 40 | void set_groen(); |
lennartgroen | 0:ec163fd43fec | 41 | private: |
lennartgroen | 0:ec163fd43fec | 42 | PwmOut pin_rood; |
lennartgroen | 0:ec163fd43fec | 43 | PwmOut pin_groen; |
lennartgroen | 0:ec163fd43fec | 44 | PwmOut pin_blauw; |
lennartgroen | 0:ec163fd43fec | 45 | }; |
lennartgroen | 0:ec163fd43fec | 46 | |
lennartgroen | 0:ec163fd43fec | 47 | int main() |
lennartgroen | 0:ec163fd43fec | 48 | { |
lennartgroen | 0:ec163fd43fec | 49 | enum State stoplicht_state = STATE_ROOD; // State machine status wegschrijven |
lennartgroen | 0:ec163fd43fec | 50 | |
lennartgroen | 0:ec163fd43fec | 51 | stoplicht stoplicht_nz(D11, D10, D9); // defineren stoplicht noord zuid (pin_rood, pin_groen, pin_blauw) |
lennartgroen | 0:ec163fd43fec | 52 | stoplicht stoplicht_ow(D6, D5, D3); // defineren stoplicht oost west (pin_rood, pin_groen, pin_blauw) |
lennartgroen | 0:ec163fd43fec | 53 | enum State prev_state = STATE_OW_ORANJE; // bijhouden van vorige state om te bepalen welke stoplicht aan gaat na rood |
lennartgroen | 0:ec163fd43fec | 54 | |
lennartgroen | 0:ec163fd43fec | 55 | Timer timer1; // timer voor beheren van tijd interrupt |
lennartgroen | 0:ec163fd43fec | 56 | timer1.start(); |
lennartgroen | 0:ec163fd43fec | 57 | |
lennartgroen | 0:ec163fd43fec | 58 | while(1) { |
lennartgroen | 0:ec163fd43fec | 59 | |
lennartgroen | 0:ec163fd43fec | 60 | |
lennartgroen | 0:ec163fd43fec | 61 | switch (stoplicht_state) { |
lennartgroen | 0:ec163fd43fec | 62 | case STATE_ROOD: |
lennartgroen | 0:ec163fd43fec | 63 | stoplicht_nz.set_rood(); |
lennartgroen | 0:ec163fd43fec | 64 | stoplicht_ow.set_rood(); |
lennartgroen | 0:ec163fd43fec | 65 | if(prev_state == STATE_OW_ORANJE && timer1.read() >= 1) { |
lennartgroen | 0:ec163fd43fec | 66 | stoplicht_state = STATE_NZ_GROEN; |
lennartgroen | 0:ec163fd43fec | 67 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 68 | } else if(prev_state == STATE_NZ_ORANJE && timer1.read() >= 1) { |
lennartgroen | 0:ec163fd43fec | 69 | stoplicht_state = STATE_OW_GROEN; |
lennartgroen | 0:ec163fd43fec | 70 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 71 | } |
lennartgroen | 0:ec163fd43fec | 72 | break; |
lennartgroen | 0:ec163fd43fec | 73 | case STATE_NZ_GROEN: |
lennartgroen | 0:ec163fd43fec | 74 | stoplicht_nz.set_groen(); |
lennartgroen | 1:879991cde999 | 75 | if(timer1.read() >= 19) { |
lennartgroen | 0:ec163fd43fec | 76 | stoplicht_state = STATE_NZ_ORANJE; |
lennartgroen | 0:ec163fd43fec | 77 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 78 | } |
lennartgroen | 0:ec163fd43fec | 79 | break; |
lennartgroen | 0:ec163fd43fec | 80 | case STATE_NZ_ORANJE: |
lennartgroen | 0:ec163fd43fec | 81 | stoplicht_nz.set_geel(); |
lennartgroen | 0:ec163fd43fec | 82 | if(timer1.read() >= 1) { |
lennartgroen | 0:ec163fd43fec | 83 | prev_state = STATE_NZ_ORANJE; |
lennartgroen | 0:ec163fd43fec | 84 | stoplicht_state = STATE_ROOD; |
lennartgroen | 0:ec163fd43fec | 85 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 86 | } |
lennartgroen | 0:ec163fd43fec | 87 | break; |
lennartgroen | 0:ec163fd43fec | 88 | case STATE_OW_GROEN: |
lennartgroen | 0:ec163fd43fec | 89 | stoplicht_ow.set_groen(); |
lennartgroen | 1:879991cde999 | 90 | if(timer1.read() >= 19) { |
lennartgroen | 0:ec163fd43fec | 91 | stoplicht_state = STATE_OW_ORANJE; |
lennartgroen | 0:ec163fd43fec | 92 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 93 | } |
lennartgroen | 0:ec163fd43fec | 94 | break; |
lennartgroen | 0:ec163fd43fec | 95 | case STATE_OW_ORANJE: |
lennartgroen | 0:ec163fd43fec | 96 | stoplicht_ow.set_geel(); |
lennartgroen | 0:ec163fd43fec | 97 | if(timer1.read() >= 1) { |
lennartgroen | 0:ec163fd43fec | 98 | prev_state = STATE_OW_ORANJE; |
lennartgroen | 0:ec163fd43fec | 99 | stoplicht_state = STATE_ROOD; |
lennartgroen | 0:ec163fd43fec | 100 | timer1.reset(); |
lennartgroen | 0:ec163fd43fec | 101 | } |
lennartgroen | 0:ec163fd43fec | 102 | break; |
lennartgroen | 1:879991cde999 | 103 | case STATE_RING_NZ: |
lennartgroen | 1:879991cde999 | 104 | |
lennartgroen | 1:879991cde999 | 105 | if(timer1.read() >= 3) { |
lennartgroen | 1:879991cde999 | 106 | stoplicht_state = STATE_OW_ORANJE; |
lennartgroen | 1:879991cde999 | 107 | timer1.reset(); |
lennartgroen | 1:879991cde999 | 108 | } |
lennartgroen | 1:879991cde999 | 109 | case STATE_RING_OW: |
lennartgroen | 1:879991cde999 | 110 | |
lennartgroen | 1:879991cde999 | 111 | if(timer1.read() >= 3) { |
lennartgroen | 1:879991cde999 | 112 | stoplicht_state = STATE_NZ_ORANJE; |
lennartgroen | 1:879991cde999 | 113 | timer1.reset(); |
lennartgroen | 1:879991cde999 | 114 | } |
lennartgroen | 1:879991cde999 | 115 | break; |
lennartgroen | 0:ec163fd43fec | 116 | default: |
lennartgroen | 0:ec163fd43fec | 117 | stoplicht_state = STATE_ROOD; |
lennartgroen | 0:ec163fd43fec | 118 | break; |
lennartgroen | 0:ec163fd43fec | 119 | } |
lennartgroen | 1:879991cde999 | 120 | if (ring_NZ == 1 && stoplicht_state == STATE_OW_GROEN) { |
lennartgroen | 1:879991cde999 | 121 | timer1.reset(); |
lennartgroen | 1:879991cde999 | 122 | stoplicht_state = STATE_RING_NZ; |
lennartgroen | 1:879991cde999 | 123 | } |
lennartgroen | 1:879991cde999 | 124 | if (ring_OW == 1 && stoplicht_state == STATE_NZ_GROEN){ |
lennartgroen | 1:879991cde999 | 125 | timer1.reset(); |
lennartgroen | 1:879991cde999 | 126 | stoplicht_state = STATE_RING_OW; |
lennartgroen | 1:879991cde999 | 127 | } |
lennartgroen | 0:ec163fd43fec | 128 | |
lennartgroen | 0:ec163fd43fec | 129 | } |
lennartgroen | 0:ec163fd43fec | 130 | |
lennartgroen | 0:ec163fd43fec | 131 | } |
lennartgroen | 0:ec163fd43fec | 132 | |
lennartgroen | 0:ec163fd43fec | 133 | stoplicht::stoplicht(PinName p_rood, PinName p_groen, PinName p_blauw) |
lennartgroen | 0:ec163fd43fec | 134 | :pin_rood(p_rood), pin_groen(p_groen), pin_blauw(p_blauw) |
lennartgroen | 0:ec163fd43fec | 135 | { |
lennartgroen | 0:ec163fd43fec | 136 | |
lennartgroen | 0:ec163fd43fec | 137 | } |
lennartgroen | 0:ec163fd43fec | 138 | |
lennartgroen | 0:ec163fd43fec | 139 | // Functies voor stoplicht class // |
lennartgroen | 0:ec163fd43fec | 140 | void stoplicht::set_groen() |
lennartgroen | 0:ec163fd43fec | 141 | { |
lennartgroen | 0:ec163fd43fec | 142 | pin_rood = groen.val_rood; |
lennartgroen | 0:ec163fd43fec | 143 | pin_groen = groen.val_groen; |
lennartgroen | 0:ec163fd43fec | 144 | pin_blauw = groen.val_blauw; |
lennartgroen | 0:ec163fd43fec | 145 | } |
lennartgroen | 0:ec163fd43fec | 146 | |
lennartgroen | 0:ec163fd43fec | 147 | |
lennartgroen | 0:ec163fd43fec | 148 | void stoplicht::set_geel() |
lennartgroen | 0:ec163fd43fec | 149 | { |
lennartgroen | 0:ec163fd43fec | 150 | pin_rood = geel.val_rood; |
lennartgroen | 0:ec163fd43fec | 151 | pin_groen = geel.val_groen; |
lennartgroen | 0:ec163fd43fec | 152 | pin_blauw = geel.val_blauw; |
lennartgroen | 0:ec163fd43fec | 153 | } |
lennartgroen | 0:ec163fd43fec | 154 | |
lennartgroen | 0:ec163fd43fec | 155 | |
lennartgroen | 0:ec163fd43fec | 156 | void stoplicht::set_rood() |
lennartgroen | 0:ec163fd43fec | 157 | { |
lennartgroen | 0:ec163fd43fec | 158 | pin_rood = rood.val_rood; |
lennartgroen | 0:ec163fd43fec | 159 | pin_groen = rood.val_groen; |
lennartgroen | 0:ec163fd43fec | 160 | pin_blauw = rood.val_blauw; |
lennartgroen | 0:ec163fd43fec | 161 | } |
lennartgroen | 0:ec163fd43fec | 162 |