Versie 2 - Vorm state machine aangenomen

Dependencies:   mbed

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?

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