khalil Ahmed / Mbed 2 deprecated Elevator

Dependencies:   mbed

Committer:
khalooool
Date:
Tue Jan 18 12:16:48 2011 +0000
Revision:
0:98c1cd7cd6b7

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
khalooool 0:98c1cd7cd6b7 1 #include "mbed.h"
khalooool 0:98c1cd7cd6b7 2
khalooool 0:98c1cd7cd6b7 3 #define get_event
khalooool 0:98c1cd7cd6b7 4 #define ev
khalooool 0:98c1cd7cd6b7 5 #define green 1
khalooool 0:98c1cd7cd6b7 6 #define red 0
khalooool 0:98c1cd7cd6b7 7 #define off 0
khalooool 0:98c1cd7cd6b7 8 #define on 1
khalooool 0:98c1cd7cd6b7 9 #define flashing 2
khalooool 0:98c1cd7cd6b7 10
khalooool 0:98c1cd7cd6b7 11 enum state {st_GND_DC,st_GND_DO,st_GND_closing,st_DSING_at1,st_GU_closing,st_GND_opening,st_Top_DC,st_Top_DO,st_waiting_for_GND,st_waiting_for_Top,st_DC_moving_up,st_DC_moving_dwn,};
khalooool 0:98c1cd7cd6b7 12 enum event {ev_no_event,ev_Top,ev_GND,ev_near_top,ev_near_GND,ev_swt_up,ev_swt_dwn,ev_LVL1_swt,ev_LVL2_swt,ev_mtr_finish,ev_time_out};
khalooool 0:98c1cd7cd6b7 13
khalooool 0:98c1cd7cd6b7 14 int green_flashing, red_flashing;
khalooool 0:98c1cd7cd6b7 15
khalooool 0:98c1cd7cd6b7 16 DigitalOut green_led(LED1);
khalooool 0:98c1cd7cd6b7 17 DigitalOut red_led(LED4);
khalooool 0:98c1cd7cd6b7 18 Ticker led_flasher;
khalooool 0:98c1cd7cd6b7 19 Ticker timer;
khalooool 0:98c1cd7cd6b7 20
khalooool 0:98c1cd7cd6b7 21 void led(int colour, int mode) {
khalooool 0:98c1cd7cd6b7 22 switch (colour) {
khalooool 0:98c1cd7cd6b7 23 case green:
khalooool 0:98c1cd7cd6b7 24 switch (mode) {
khalooool 0:98c1cd7cd6b7 25 case off:
khalooool 0:98c1cd7cd6b7 26 green_led = off;
khalooool 0:98c1cd7cd6b7 27 green_flashing = off;
khalooool 0:98c1cd7cd6b7 28 break;
khalooool 0:98c1cd7cd6b7 29 case on:
khalooool 0:98c1cd7cd6b7 30 green_led = on;
khalooool 0:98c1cd7cd6b7 31 green_flashing = off;
khalooool 0:98c1cd7cd6b7 32 break;
khalooool 0:98c1cd7cd6b7 33 case flashing:
khalooool 0:98c1cd7cd6b7 34 green_led = on;
khalooool 0:98c1cd7cd6b7 35 green_flashing = on;
khalooool 0:98c1cd7cd6b7 36 break;
khalooool 0:98c1cd7cd6b7 37 }
khalooool 0:98c1cd7cd6b7 38 switch (colour) {
khalooool 0:98c1cd7cd6b7 39 case red:
khalooool 0:98c1cd7cd6b7 40 switch (mode) {
khalooool 0:98c1cd7cd6b7 41 case off:
khalooool 0:98c1cd7cd6b7 42 red_led = off;
khalooool 0:98c1cd7cd6b7 43 red_flashing = off;
khalooool 0:98c1cd7cd6b7 44 break;
khalooool 0:98c1cd7cd6b7 45 case on:
khalooool 0:98c1cd7cd6b7 46 red_led = on;
khalooool 0:98c1cd7cd6b7 47 red_flashing = off;
khalooool 0:98c1cd7cd6b7 48 break;
khalooool 0:98c1cd7cd6b7 49 case flashing:
khalooool 0:98c1cd7cd6b7 50 red_led = on;
khalooool 0:98c1cd7cd6b7 51 red_flashing = on;
khalooool 0:98c1cd7cd6b7 52 break;
khalooool 0:98c1cd7cd6b7 53 }
khalooool 0:98c1cd7cd6b7 54 }
khalooool 0:98c1cd7cd6b7 55
khalooool 0:98c1cd7cd6b7 56 }
khalooool 0:98c1cd7cd6b7 57
khalooool 0:98c1cd7cd6b7 58 void new_event(int ev) {
khalooool 0:98c1cd7cd6b7 59 event_queue[ev_load] = ev;
khalooool 0:98c1cd7cd6b7 60 ev_load++;
khalooool 0:98c1cd7cd6b7 61 if (ev_load == 8)
khalooool 0:98c1cd7cd6b7 62 ev_load = 0;
khalooool 0:98c1cd7cd6b7 63 }
khalooool 0:98c1cd7cd6b7 64
khalooool 0:98c1cd7cd6b7 65 int get_event(void) {
khalooool 0:98c1cd7cd6b7 66 int ev;
khalooool 0:98c1cd7cd6b7 67 if (ev_load != ev_unload) {
khalooool 0:98c1cd7cd6b7 68 ev = event_queue[ev_unload];
khalooool 0:98c1cd7cd6b7 69 ev_unload++;
khalooool 0:98c1cd7cd6b7 70 if (ev_unload ==8)
khalooool 0:98c1cd7cd6b7 71 ev_unload = 0;
khalooool 0:98c1cd7cd6b7 72 } else ev = no_event;
khalooool 0:98c1cd7cd6b7 73 return ev;
khalooool 0:98c1cd7cd6b7 74 }
khalooool 0:98c1cd7cd6b7 75
khalooool 0:98c1cd7cd6b7 76 void flash(void) {
khalooool 0:98c1cd7cd6b7 77 if (green_flashing)
khalooool 0:98c1cd7cd6b7 78 green_led = !green_led;
khalooool 0:98c1cd7cd6b7 79 if (red_flashing)
khalooool 0:98c1cd7cd6b7 80 red_led = !red_led;
khalooool 0:98c1cd7cd6b7 81 }
khalooool 0:98c1cd7cd6b7 82
khalooool 0:98c1cd7cd6b7 83 void update_timeout(void) {
khalooool 0:98c1cd7cd6b7 84 if (time_out) {
khalooool 0:98c1cd7cd6b7 85 time_out --;
khalooool 0:98c1cd7cd6b7 86 if (time_out==0)
khalooool 0:98c1cd7cd6b7 87 new_event(ev_time_out);
khalooool 0:98c1cd7cd6b7 88 }
khalooool 0:98c1cd7cd6b7 89 }
khalooool 0:98c1cd7cd6b7 90
khalooool 0:98c1cd7cd6b7 91
khalooool 0:98c1cd7cd6b7 92
khalooool 0:98c1cd7cd6b7 93
khalooool 0:98c1cd7cd6b7 94
khalooool 0:98c1cd7cd6b7 95
khalooool 0:98c1cd7cd6b7 96 int main() {
khalooool 0:98c1cd7cd6b7 97
khalooool 0:98c1cd7cd6b7 98 int state;
khalooool 0:98c1cd7cd6b7 99 led_flasher.attach(&flash,0.15);
khalooool 0:98c1cd7cd6b7 100 timer.attach(&update_timeout,0.1);
khalooool 0:98c1cd7cd6b7 101 switch (state) {
khalooool 0:98c1cd7cd6b7 102 case st_GND_DC:
khalooool 0:98c1cd7cd6b7 103 ev = get_event();
khalooool 0:98c1cd7cd6b7 104 if (ev!=no_event) {
khalooool 0:98c1cd7cd6b7 105 switch (ev) {
khalooool 0:98c1cd7cd6b7 106 case ev_swt_up:
khalooool 0:98c1cd7cd6b7 107 led(green,flashing);
khalooool 0:98c1cd7cd6b7 108 led(red,off);
khalooool 0:98c1cd7cd6b7 109 time_out = 20;
khalooool 0:98c1cd7cd6b7 110 state = st_GND_opening;
khalooool 0:98c1cd7cd6b7 111 break;
khalooool 0:98c1cd7cd6b7 112 case ev_swt_dwn:
khalooool 0:98c1cd7cd6b7 113 motor(up,1.0,20);
khalooool 0:98c1cd7cd6b7 114 state = st_DC_moving_up;
khalooool 0:98c1cd7cd6b7 115 break;
khalooool 0:98c1cd7cd6b7 116 }
khalooool 0:98c1cd7cd6b7 117 }
khalooool 0:98c1cd7cd6b7 118 break;
khalooool 0:98c1cd7cd6b7 119 case st_GND_DO:
khalooool 0:98c1cd7cd6b7 120 ev = get_event();
khalooool 0:98c1cd7cd6b7 121 if (ev!=no_event) {
khalooool 0:98c1cd7cd6b7 122 switch (ev) {
khalooool 0:98c1cd7cd6b7 123 case ev_time_out:
khalooool 0:98c1cd7cd6b7 124 led(green,off);
khalooool 0:98c1cd7cd6b7 125 led(red,flashing);
khalooool 0:98c1cd7cd6b7 126 time_out = 20;
khalooool 0:98c1cd7cd6b7 127 state = st_GND_closing;
khalooool 0:98c1cd7cd6b7 128 break;
khalooool 0:98c1cd7cd6b7 129 case ev_LVL2_swt:
khalooool 0:98c1cd7cd6b7 130 led(red,flashing);
khalooool 0:98c1cd7cd6b7 131 led(green,off);
khalooool 0:98c1cd7cd6b7 132 time_out = 20;
khalooool 0:98c1cd7cd6b7 133 state = st_GU_closing;
khalooool 0:98c1cd7cd6b7 134 break;
khalooool 0:98c1cd7cd6b7 135
khalooool 0:98c1cd7cd6b7 136 }
khalooool 0:98c1cd7cd6b7 137 }
khalooool 0:98c1cd7cd6b7 138 break;
khalooool 0:98c1cd7cd6b7 139 case st_GND_closing:
khalooool 0:98c1cd7cd6b7 140 ev = get_event();
khalooool 0:98c1cd7cd6b7 141 if (ev!=no_event) {
khalooool 0:98c1cd7cd6b7 142 switch (ev) {
khalooool 0:98c1cd7cd6b7 143 case ev_time_out:
khalooool 0:98c1cd7cd6b7 144 led(red,on);
khalooool 0:98c1cd7cd6b7 145 state = st_GND_DC;
khalooool 0:98c1cd7cd6b7 146 break;
khalooool 0:98c1cd7cd6b7 147 }
khalooool 0:98c1cd7cd6b7 148 }
khalooool 0:98c1cd7cd6b7 149 break;
khalooool 0:98c1cd7cd6b7 150 case st_GND_opening:
khalooool 0:98c1cd7cd6b7 151 ev = get_event();
khalooool 0:98c1cd7cd6b7 152 if (ev!=no_event) {
khalooool 0:98c1cd7cd6b7 153 switch (ev) {
khalooool 0:98c1cd7cd6b7 154 case ev_time_out:
khalooool 0:98c1cd7cd6b7 155 led(green,on);
khalooool 0:98c1cd7cd6b7 156 time_out = 20;
khalooool 0:98c1cd7cd6b7 157 state = st_GND_DC;
khalooool 0:98c1cd7cd6b7 158 break;
khalooool 0:98c1cd7cd6b7 159 }
khalooool 0:98c1cd7cd6b7 160 }
khalooool 0:98c1cd7cd6b7 161 break;
khalooool 0:98c1cd7cd6b7 162 case st_Top_DC:
khalooool 0:98c1cd7cd6b7 163 ev = get_event();
khalooool 0:98c1cd7cd6b7 164 if (ev!=no_event) {
khalooool 0:98c1cd7cd6b7 165 switch (ev) {
khalooool 0:98c1cd7cd6b7 166 case st_Top_DC:
khalooool 0:98c1cd7cd6b7 167 led(red, of);
khalooool 0:98c1cd7cd6b7 168 time_out = 20;
khalooool 0:98c1cd7cd6b7 169 state = st_GND_DC;
khalooool 0:98c1cd7cd6b7 170 break;
khalooool 0:98c1cd7cd6b7 171 }
khalooool 0:98c1cd7cd6b7 172 }
khalooool 0:98c1cd7cd6b7 173 break;
khalooool 0:98c1cd7cd6b7 174 case st_Top_DO:
khalooool 0:98c1cd7cd6b7 175 ev = get_event();
khalooool 0:98c1cd7cd6b7 176 if (ev!=no_event) {
khalooool 0:98c1cd7cd6b7 177 switch (ev) {
khalooool 0:98c1cd7cd6b7 178 case ev_time_out:
khalooool 0:98c1cd7cd6b7 179 time_out = 50;
khalooool 0:98c1cd7cd6b7 180 led(green, off);
khalooool 0:98c1cd7cd6b7 181 led(red,flashing);
khalooool 0:98c1cd7cd6b7 182 state= st_DSING_at1,
khalooool 0:98c1cd7cd6b7 183 break;
khalooool 0:98c1cd7cd6b7 184
khalooool 0:98c1cd7cd6b7 185 }
khalooool 0:98c1cd7cd6b7 186
khalooool 0:98c1cd7cd6b7 187 }
khalooool 0:98c1cd7cd6b7 188 break;
khalooool 0:98c1cd7cd6b7 189 case st_DSING_at1:
khalooool 0:98c1cd7cd6b7 190 ev = get_event();
khalooool 0:98c1cd7cd6b7 191 if (ev!=no_event)
khalooool 0:98c1cd7cd6b7 192 switch (ev) {
khalooool 0:98c1cd7cd6b7 193 case ev_time_out:
khalooool 0:98c1cd7cd6b7 194 time_out= 20;
khalooool 0:98c1cd7cd6b7 195 led(red, off);
khalooool 0:98c1cd7cd6b7 196 state = st_Top_DC;
khalooool 0:98c1cd7cd6b7 197 break;
khalooool 0:98c1cd7cd6b7 198 }
khalooool 0:98c1cd7cd6b7 199 break;
khalooool 0:98c1cd7cd6b7 200 case st_waiting_for_GND:
khalooool 0:98c1cd7cd6b7 201
khalooool 0:98c1cd7cd6b7 202 break;
khalooool 0:98c1cd7cd6b7 203 case st_waiting_for_Top:
khalooool 0:98c1cd7cd6b7 204 ev= get_event();
khalooool 0:98c1cd7cd6b7 205 if (ev!=no_event) {
khalooool 0:98c1cd7cd6b7 206 switch (ev) {
khalooool 0:98c1cd7cd6b7 207 case ev_Top:
khalooool 0:98c1cd7cd6b7 208 motor(up,0.0,0.0);
khalooool 0:98c1cd7cd6b7 209 led(green,flashing);
khalooool 0:98c1cd7cd6b7 210 led(red, off);
khalooool 0:98c1cd7cd6b7 211 state= st_Top_DO;
khalooool 0:98c1cd7cd6b7 212 break;
khalooool 0:98c1cd7cd6b7 213
khalooool 0:98c1cd7cd6b7 214 }
khalooool 0:98c1cd7cd6b7 215 }
khalooool 0:98c1cd7cd6b7 216
khalooool 0:98c1cd7cd6b7 217 break;
khalooool 0:98c1cd7cd6b7 218 case st_DC_moving_up:
khalooool 0:98c1cd7cd6b7 219 ev= get_event();
khalooool 0:98c1cd7cd6b7 220 if (ev!=no_event) {
khalooool 0:98c1cd7cd6b7 221 switch (ev) {
khalooool 0:98c1cd7cd6b7 222 case ev_near_top:
khalooool 0:98c1cd7cd6b7 223 motor(up,1.0,1.0);
khalooool 0:98c1cd7cd6b7 224 state= st_waiting_for_Top;
khalooool 0:98c1cd7cd6b7 225 break;
khalooool 0:98c1cd7cd6b7 226 }
khalooool 0:98c1cd7cd6b7 227 }
khalooool 0:98c1cd7cd6b7 228
khalooool 0:98c1cd7cd6b7 229 break;
khalooool 0:98c1cd7cd6b7 230 case DC_moving_dwn:
khalooool 0:98c1cd7cd6b7 231 ev= get_event();
khalooool 0:98c1cd7cd6b7 232 if (ev!=no_event) {
khalooool 0:98c1cd7cd6b7 233 switch {
khalooool 0:98c1cd7cd6b7 234 case ev_near_GND:
khalooool 0:98c1cd7cd6b7 235 motor(dwn,0.1,2);
khalooool 0:98c1cd7cd6b7 236 state= st_waiting_for_GND;
khalooool 0:98c1cd7cd6b7 237 break;
khalooool 0:98c1cd7cd6b7 238 }
khalooool 0:98c1cd7cd6b7 239 }
khalooool 0:98c1cd7cd6b7 240 break;
khalooool 0:98c1cd7cd6b7 241
khalooool 0:98c1cd7cd6b7 242
khalooool 0:98c1cd7cd6b7 243 }
khalooool 0:98c1cd7cd6b7 244 }