Versie 2 - Vorm state machine aangenomen

Dependencies:   mbed

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?

UserRevisionLine numberNew 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