Mohammed Alshiekh
/
elevator_with_queue
course work
elevator.cpp@0:69be3faae0a0, 2015-10-06 (annotated)
- Committer:
- sahabi
- Date:
- Tue Oct 06 00:58:39 2015 +0000
- Revision:
- 0:69be3faae0a0
- Child:
- 1:28120714ad80
checkpoint
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sahabi | 0:69be3faae0a0 | 1 | #include "mbed.h" |
sahabi | 0:69be3faae0a0 | 2 | |
sahabi | 0:69be3faae0a0 | 3 | PwmOut servo1(p21); |
sahabi | 0:69be3faae0a0 | 4 | PwmOut servo2(p22); |
sahabi | 0:69be3faae0a0 | 5 | PwmOut dc_motor(p23); |
sahabi | 0:69be3faae0a0 | 6 | DigitalInOut in1(p5); |
sahabi | 0:69be3faae0a0 | 7 | DigitalInOut in2(p6); |
sahabi | 0:69be3faae0a0 | 8 | InterruptIn firstfloor(p7); |
sahabi | 0:69be3faae0a0 | 9 | InterruptIn secondfloor(p8); |
sahabi | 0:69be3faae0a0 | 10 | InterruptIn thirdfloor(p9); |
sahabi | 0:69be3faae0a0 | 11 | InterruptIn fourthfloor(p10); |
sahabi | 0:69be3faae0a0 | 12 | InterruptIn fifthfloor(p11); |
sahabi | 0:69be3faae0a0 | 13 | InterruptIn afloor(p12); |
sahabi | 0:69be3faae0a0 | 14 | |
sahabi | 0:69be3faae0a0 | 15 | Timeout timeout; |
sahabi | 0:69be3faae0a0 | 16 | |
sahabi | 0:69be3faae0a0 | 17 | Timer time1; |
sahabi | 0:69be3faae0a0 | 18 | |
sahabi | 0:69be3faae0a0 | 19 | float stationary = 0.075; |
sahabi | 0:69be3faae0a0 | 20 | int closed; |
sahabi | 0:69be3faae0a0 | 21 | float ccw = 0.085; // counter clock-wise |
sahabi | 0:69be3faae0a0 | 22 | float cw = 0.065; // clock-wise |
sahabi | 0:69be3faae0a0 | 23 | int location = 1; |
sahabi | 0:69be3faae0a0 | 24 | int reached = 0; |
sahabi | 0:69be3faae0a0 | 25 | float frequency; |
sahabi | 0:69be3faae0a0 | 26 | int requested_floor; |
sahabi | 0:69be3faae0a0 | 27 | int busy = 0; |
sahabi | 0:69be3faae0a0 | 28 | |
sahabi | 0:69be3faae0a0 | 29 | void startTimer(){ |
sahabi | 0:69be3faae0a0 | 30 | reached = 0; |
sahabi | 0:69be3faae0a0 | 31 | time1.start(); |
sahabi | 0:69be3faae0a0 | 32 | } |
sahabi | 0:69be3faae0a0 | 33 | |
sahabi | 0:69be3faae0a0 | 34 | void serve(){ |
sahabi | 0:69be3faae0a0 | 35 | time1.stop(); |
sahabi | 0:69be3faae0a0 | 36 | frequency = 1./time1.read(); |
sahabi | 0:69be3faae0a0 | 37 | int floor; |
sahabi | 0:69be3faae0a0 | 38 | if (frequency == 100){floor = 1;} |
sahabi | 0:69be3faae0a0 | 39 | if (frequency == 250){floor = 2;} |
sahabi | 0:69be3faae0a0 | 40 | if (frequency == 500){floor = 3;} |
sahabi | 0:69be3faae0a0 | 41 | if (frequency == 750){floor = 4;} |
sahabi | 0:69be3faae0a0 | 42 | if (frequency == 1000){floor = 5;} |
sahabi | 0:69be3faae0a0 | 43 | if (floor == requested_floor){ |
sahabi | 0:69be3faae0a0 | 44 | reached = 1; |
sahabi | 0:69be3faae0a0 | 45 | } |
sahabi | 0:69be3faae0a0 | 46 | else{ |
sahabi | 0:69be3faae0a0 | 47 | reached = 0; |
sahabi | 0:69be3faae0a0 | 48 | } |
sahabi | 0:69be3faae0a0 | 49 | if (reached == 1){ |
sahabi | 0:69be3faae0a0 | 50 | in1 = 0; |
sahabi | 0:69be3faae0a0 | 51 | in2 = 0; |
sahabi | 0:69be3faae0a0 | 52 | servo1.write(cw); |
sahabi | 0:69be3faae0a0 | 53 | servo2.write(ccw); |
sahabi | 0:69be3faae0a0 | 54 | wait(0.5); |
sahabi | 0:69be3faae0a0 | 55 | servo1.write(stationary); |
sahabi | 0:69be3faae0a0 | 56 | servo2.write(stationary); |
sahabi | 0:69be3faae0a0 | 57 | busy = 0; |
sahabi | 0:69be3faae0a0 | 58 | } |
sahabi | 0:69be3faae0a0 | 59 | } |
sahabi | 0:69be3faae0a0 | 60 | |
sahabi | 0:69be3faae0a0 | 61 | |
sahabi | 0:69be3faae0a0 | 62 | void moveUp(){ |
sahabi | 0:69be3faae0a0 | 63 | dc_motor.write(0.02f); |
sahabi | 0:69be3faae0a0 | 64 | in1 = 1; |
sahabi | 0:69be3faae0a0 | 65 | in2 = 0; |
sahabi | 0:69be3faae0a0 | 66 | } |
sahabi | 0:69be3faae0a0 | 67 | |
sahabi | 0:69be3faae0a0 | 68 | void moveDown(){ |
sahabi | 0:69be3faae0a0 | 69 | dc_motor.write(0.02f); |
sahabi | 0:69be3faae0a0 | 70 | in1 = 0; |
sahabi | 0:69be3faae0a0 | 71 | in2 = 1; |
sahabi | 0:69be3faae0a0 | 72 | } |
sahabi | 0:69be3faae0a0 | 73 | |
sahabi | 0:69be3faae0a0 | 74 | void stop(){ |
sahabi | 0:69be3faae0a0 | 75 | in1 = 0; |
sahabi | 0:69be3faae0a0 | 76 | in2 = 0; |
sahabi | 0:69be3faae0a0 | 77 | } |
sahabi | 0:69be3faae0a0 | 78 | |
sahabi | 0:69be3faae0a0 | 79 | void closeDoor(){ |
sahabi | 0:69be3faae0a0 | 80 | servo1.write(ccw); |
sahabi | 0:69be3faae0a0 | 81 | servo2.write(cw); |
sahabi | 0:69be3faae0a0 | 82 | wait(0.5); |
sahabi | 0:69be3faae0a0 | 83 | servo1.write(stationary); |
sahabi | 0:69be3faae0a0 | 84 | servo2.write(stationary); |
sahabi | 0:69be3faae0a0 | 85 | } |
sahabi | 0:69be3faae0a0 | 86 | |
sahabi | 0:69be3faae0a0 | 87 | void openDoor(){ |
sahabi | 0:69be3faae0a0 | 88 | servo1.write(cw); |
sahabi | 0:69be3faae0a0 | 89 | servo2.write(ccw); |
sahabi | 0:69be3faae0a0 | 90 | wait(0.5); |
sahabi | 0:69be3faae0a0 | 91 | servo1.write(stationary); |
sahabi | 0:69be3faae0a0 | 92 | servo2.write(stationary); |
sahabi | 0:69be3faae0a0 | 93 | } |
sahabi | 0:69be3faae0a0 | 94 | |
sahabi | 0:69be3faae0a0 | 95 | void call(int next) { |
sahabi | 0:69be3faae0a0 | 96 | busy = 1; |
sahabi | 0:69be3faae0a0 | 97 | requested_floor = next; |
sahabi | 0:69be3faae0a0 | 98 | if (location > next){ |
sahabi | 0:69be3faae0a0 | 99 | closeDoor(); |
sahabi | 0:69be3faae0a0 | 100 | moveUp(); |
sahabi | 0:69be3faae0a0 | 101 | } |
sahabi | 0:69be3faae0a0 | 102 | |
sahabi | 0:69be3faae0a0 | 103 | else if (location < next){ |
sahabi | 0:69be3faae0a0 | 104 | closeDoor(); |
sahabi | 0:69be3faae0a0 | 105 | moveDown(); |
sahabi | 0:69be3faae0a0 | 106 | } |
sahabi | 0:69be3faae0a0 | 107 | location = next; |
sahabi | 0:69be3faae0a0 | 108 | } |
sahabi | 0:69be3faae0a0 | 109 | |
sahabi | 0:69be3faae0a0 | 110 | void call1(void) { call(1); } |
sahabi | 0:69be3faae0a0 | 111 | void call2(void) { call(2); } |
sahabi | 0:69be3faae0a0 | 112 | void call3(void) { call(3); } |
sahabi | 0:69be3faae0a0 | 113 | void call4(void) { call(4); } |
sahabi | 0:69be3faae0a0 | 114 | void call5(void) { call(5); } |
sahabi | 0:69be3faae0a0 | 115 | |
sahabi | 0:69be3faae0a0 | 116 | |
sahabi | 0:69be3faae0a0 | 117 | int main() { |
sahabi | 0:69be3faae0a0 | 118 | servo1.period(0.02f); |
sahabi | 0:69be3faae0a0 | 119 | servo2.period(0.02f); |
sahabi | 0:69be3faae0a0 | 120 | dc_motor.period(0.02f); |
sahabi | 0:69be3faae0a0 | 121 | servo1.write(stationary); |
sahabi | 0:69be3faae0a0 | 122 | servo2.write(stationary); |
sahabi | 0:69be3faae0a0 | 123 | dc_motor.write(0); |
sahabi | 0:69be3faae0a0 | 124 | in1.output(); |
sahabi | 0:69be3faae0a0 | 125 | in1 = 0; |
sahabi | 0:69be3faae0a0 | 126 | in2.output(); |
sahabi | 0:69be3faae0a0 | 127 | in2 = 0; |
sahabi | 0:69be3faae0a0 | 128 | firstfloor.rise(&call1); |
sahabi | 0:69be3faae0a0 | 129 | secondfloor.rise(&call2); |
sahabi | 0:69be3faae0a0 | 130 | thirdfloor.rise(&call3); |
sahabi | 0:69be3faae0a0 | 131 | fourthfloor.rise(&call4); |
sahabi | 0:69be3faae0a0 | 132 | fifthfloor.rise(&call5); |
sahabi | 0:69be3faae0a0 | 133 | afloor.fall(&startTimer); |
sahabi | 0:69be3faae0a0 | 134 | afloor.rise(&serve); |
sahabi | 0:69be3faae0a0 | 135 | |
sahabi | 0:69be3faae0a0 | 136 | while(1){ |
sahabi | 0:69be3faae0a0 | 137 | } |
sahabi | 0:69be3faae0a0 | 138 | } |
sahabi | 0:69be3faae0a0 | 139 | |
sahabi | 0:69be3faae0a0 | 140 |