course work

Dependencies:   LinkedList mbed

Committer:
sahabi
Date:
Tue Oct 06 00:58:39 2015 +0000
Revision:
0:69be3faae0a0
Child:
1:28120714ad80
checkpoint

Who changed what in which revision?

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