course work

Dependencies:   LinkedList mbed

Committer:
sahabi
Date:
Thu Oct 08 17:31:08 2015 +0000
Revision:
1:28120714ad80
Parent:
0:69be3faae0a0
Child:
2:07f2fe858dbd
old

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 1:28120714ad80 13 InterruptIn sensor(p12);
sahabi 1:28120714ad80 14 DigitalOut led4(LED4);
sahabi 1:28120714ad80 15 DigitalOut led3(LED3);
sahabi 1:28120714ad80 16 DigitalOut led2(LED2);
sahabi 1:28120714ad80 17 DigitalOut led1(LED1);
sahabi 0:69be3faae0a0 18 Timeout timeout;
sahabi 0:69be3faae0a0 19
sahabi 0:69be3faae0a0 20 Timer time1;
sahabi 0:69be3faae0a0 21
sahabi 0:69be3faae0a0 22 float stationary = 0.075;
sahabi 0:69be3faae0a0 23 int closed;
sahabi 0:69be3faae0a0 24 float ccw = 0.085; // counter clock-wise
sahabi 0:69be3faae0a0 25 float cw = 0.065; // clock-wise
sahabi 1:28120714ad80 26 int reached = 0;
sahabi 0:69be3faae0a0 27 int location = 1;
sahabi 1:28120714ad80 28 int frequency;
sahabi 0:69be3faae0a0 29 int requested_floor;
sahabi 0:69be3faae0a0 30 int busy = 0;
sahabi 0:69be3faae0a0 31
sahabi 1:28120714ad80 32 void startTimer(){
sahabi 1:28120714ad80 33 if(busy == 1){
sahabi 0:69be3faae0a0 34 reached = 0;
sahabi 0:69be3faae0a0 35 time1.start();
sahabi 0:69be3faae0a0 36 }
sahabi 1:28120714ad80 37 }
sahabi 0:69be3faae0a0 38
sahabi 0:69be3faae0a0 39 void serve(){
sahabi 1:28120714ad80 40
sahabi 1:28120714ad80 41 if(busy == 1){
sahabi 0:69be3faae0a0 42 time1.stop();
sahabi 1:28120714ad80 43
sahabi 1:28120714ad80 44 frequency = 1/(time1.read()*2);
sahabi 0:69be3faae0a0 45 int floor;
sahabi 1:28120714ad80 46 if (frequency >= 900 && frequency <= 1100){floor = 5;}
sahabi 1:28120714ad80 47 else if (frequency >= 700 && frequency <= 800){floor = 4;led4 = !led4;}
sahabi 1:28120714ad80 48 else if (frequency >= 450 && frequency <= 550){floor = 3;led3 = !led3;}
sahabi 1:28120714ad80 49 else if (frequency >= 220 && frequency <= 290){floor = 2;led2 = !led2;}
sahabi 1:28120714ad80 50 else if (frequency >= 70 && frequency <= 150){floor = 1;led1 = !led1;}
sahabi 1:28120714ad80 51
sahabi 0:69be3faae0a0 52 if (floor == requested_floor){
sahabi 1:28120714ad80 53 reached = 1;
sahabi 0:69be3faae0a0 54 }
sahabi 0:69be3faae0a0 55 else{
sahabi 0:69be3faae0a0 56 reached = 0;
sahabi 0:69be3faae0a0 57 }
sahabi 0:69be3faae0a0 58 if (reached == 1){
sahabi 0:69be3faae0a0 59 in1 = 0;
sahabi 0:69be3faae0a0 60 in2 = 0;
sahabi 0:69be3faae0a0 61 servo1.write(cw);
sahabi 0:69be3faae0a0 62 servo2.write(ccw);
sahabi 1:28120714ad80 63 wait(0.33);
sahabi 0:69be3faae0a0 64 servo1.write(stationary);
sahabi 0:69be3faae0a0 65 servo2.write(stationary);
sahabi 0:69be3faae0a0 66 busy = 0;
sahabi 1:28120714ad80 67 location = requested_floor;
sahabi 0:69be3faae0a0 68 }
sahabi 1:28120714ad80 69 }
sahabi 0:69be3faae0a0 70 }
sahabi 1:28120714ad80 71
sahabi 0:69be3faae0a0 72 void moveUp(){
sahabi 1:28120714ad80 73 dc_motor.write(0.6f);
sahabi 0:69be3faae0a0 74 in1 = 1;
sahabi 0:69be3faae0a0 75 in2 = 0;
sahabi 0:69be3faae0a0 76 }
sahabi 0:69be3faae0a0 77
sahabi 0:69be3faae0a0 78 void moveDown(){
sahabi 1:28120714ad80 79 dc_motor.write(0.6f);
sahabi 0:69be3faae0a0 80 in1 = 0;
sahabi 0:69be3faae0a0 81 in2 = 1;
sahabi 0:69be3faae0a0 82 }
sahabi 0:69be3faae0a0 83
sahabi 0:69be3faae0a0 84 void stop(){
sahabi 0:69be3faae0a0 85 in1 = 0;
sahabi 0:69be3faae0a0 86 in2 = 0;
sahabi 0:69be3faae0a0 87 }
sahabi 0:69be3faae0a0 88
sahabi 0:69be3faae0a0 89 void closeDoor(){
sahabi 0:69be3faae0a0 90 servo1.write(ccw);
sahabi 0:69be3faae0a0 91 servo2.write(cw);
sahabi 1:28120714ad80 92 wait(0.33);
sahabi 0:69be3faae0a0 93 servo1.write(stationary);
sahabi 0:69be3faae0a0 94 servo2.write(stationary);
sahabi 0:69be3faae0a0 95 }
sahabi 0:69be3faae0a0 96
sahabi 0:69be3faae0a0 97 void openDoor(){
sahabi 0:69be3faae0a0 98 servo1.write(cw);
sahabi 0:69be3faae0a0 99 servo2.write(ccw);
sahabi 1:28120714ad80 100 wait(0.33);
sahabi 0:69be3faae0a0 101 servo1.write(stationary);
sahabi 0:69be3faae0a0 102 servo2.write(stationary);
sahabi 0:69be3faae0a0 103 }
sahabi 0:69be3faae0a0 104
sahabi 0:69be3faae0a0 105 void call(int next) {
sahabi 1:28120714ad80 106 if (busy == 0){
sahabi 1:28120714ad80 107 requested_floor = next;
sahabi 1:28120714ad80 108 if (location > next){
sahabi 1:28120714ad80 109 closeDoor();
sahabi 1:28120714ad80 110 moveDown();
sahabi 1:28120714ad80 111 busy = 1;
sahabi 1:28120714ad80 112 }
sahabi 1:28120714ad80 113
sahabi 1:28120714ad80 114 else if (location < next){
sahabi 1:28120714ad80 115 closeDoor();
sahabi 1:28120714ad80 116 moveUp();
sahabi 1:28120714ad80 117 busy = 1;
sahabi 1:28120714ad80 118 }
sahabi 0:69be3faae0a0 119 }
sahabi 1:28120714ad80 120 }
sahabi 0:69be3faae0a0 121
sahabi 0:69be3faae0a0 122 void call1(void) { call(1); }
sahabi 0:69be3faae0a0 123 void call2(void) { call(2); }
sahabi 0:69be3faae0a0 124 void call3(void) { call(3); }
sahabi 0:69be3faae0a0 125 void call4(void) { call(4); }
sahabi 0:69be3faae0a0 126 void call5(void) { call(5); }
sahabi 0:69be3faae0a0 127
sahabi 0:69be3faae0a0 128
sahabi 0:69be3faae0a0 129 int main() {
sahabi 0:69be3faae0a0 130 servo1.period(0.02f);
sahabi 0:69be3faae0a0 131 servo2.period(0.02f);
sahabi 0:69be3faae0a0 132 dc_motor.period(0.02f);
sahabi 0:69be3faae0a0 133 servo1.write(stationary);
sahabi 0:69be3faae0a0 134 servo2.write(stationary);
sahabi 0:69be3faae0a0 135 dc_motor.write(0);
sahabi 0:69be3faae0a0 136 in1.output();
sahabi 0:69be3faae0a0 137 in1 = 0;
sahabi 0:69be3faae0a0 138 in2.output();
sahabi 0:69be3faae0a0 139 in2 = 0;
sahabi 0:69be3faae0a0 140 firstfloor.rise(&call1);
sahabi 0:69be3faae0a0 141 secondfloor.rise(&call2);
sahabi 0:69be3faae0a0 142 thirdfloor.rise(&call3);
sahabi 0:69be3faae0a0 143 fourthfloor.rise(&call4);
sahabi 0:69be3faae0a0 144 fifthfloor.rise(&call5);
sahabi 1:28120714ad80 145 sensor.rise(&startTimer);
sahabi 1:28120714ad80 146 sensor.fall(&serve);
sahabi 0:69be3faae0a0 147
sahabi 0:69be3faae0a0 148 while(1){
sahabi 0:69be3faae0a0 149 }
sahabi 0:69be3faae0a0 150 }
sahabi 0:69be3faae0a0 151
sahabi 0:69be3faae0a0 152