Ashmeet Singh Rekhi
/
mbed_elevator
ese519
main.cpp@2:27a9092dcc6c, 2015-10-09 (annotated)
- Committer:
- suneet
- Date:
- Fri Oct 09 22:58:27 2015 +0000
- Revision:
- 2:27a9092dcc6c
- Parent:
- 1:c37400704a2f
- Child:
- 3:4f15d12f0ac0
latest code;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ashrekhi | 0:3009a71333b6 | 1 | #include "mbed.h" |
ashrekhi | 0:3009a71333b6 | 2 | #include "PwmOut.h" |
ashrekhi | 0:3009a71333b6 | 3 | |
mfrede | 1:c37400704a2f | 4 | unsigned int freqcnt=0; |
suneet | 2:27a9092dcc6c | 5 | unsigned short floorsPassed = 0; |
suneet | 2:27a9092dcc6c | 6 | bool onFloor = false; |
mfrede | 1:c37400704a2f | 7 | PwmOut servo1(p22); |
mfrede | 1:c37400704a2f | 8 | PwmOut servo2(p23); |
mfrede | 1:c37400704a2f | 9 | Serial pc(USBTX, USBRX); // tx, rx |
suneet | 2:27a9092dcc6c | 10 | PwmOut DCenable(p21); |
ashrekhi | 0:3009a71333b6 | 11 | |
ashrekhi | 0:3009a71333b6 | 12 | void freq_counter() { |
ashrekhi | 0:3009a71333b6 | 13 | freqcnt++; |
suneet | 2:27a9092dcc6c | 14 | //DCenable = 0; |
ashrekhi | 0:3009a71333b6 | 15 | } |
ashrekhi | 0:3009a71333b6 | 16 | |
mfrede | 1:c37400704a2f | 17 | void timerfunc() { // what it does |
suneet | 2:27a9092dcc6c | 18 | if (freqcnt > 10) { |
suneet | 2:27a9092dcc6c | 19 | onFloor = true; |
suneet | 2:27a9092dcc6c | 20 | |
suneet | 2:27a9092dcc6c | 21 | } else { |
suneet | 2:27a9092dcc6c | 22 | if(onFloor) |
suneet | 2:27a9092dcc6c | 23 | floorsPassed++; |
suneet | 2:27a9092dcc6c | 24 | onFloor = false; |
suneet | 2:27a9092dcc6c | 25 | } |
ashrekhi | 0:3009a71333b6 | 26 | freqcnt = 0; |
ashrekhi | 0:3009a71333b6 | 27 | } |
ashrekhi | 0:3009a71333b6 | 28 | |
mfrede | 1:c37400704a2f | 29 | void open_door() |
mfrede | 1:c37400704a2f | 30 | { |
mfrede | 1:c37400704a2f | 31 | servo1 = 0.03f; // right |
mfrede | 1:c37400704a2f | 32 | servo2 = 0.10f; // left |
mfrede | 1:c37400704a2f | 33 | wait(1); |
mfrede | 1:c37400704a2f | 34 | } |
mfrede | 1:c37400704a2f | 35 | |
mfrede | 1:c37400704a2f | 36 | void close_door() |
mfrede | 1:c37400704a2f | 37 | { |
mfrede | 1:c37400704a2f | 38 | servo1 = 0.08f; //right |
mfrede | 1:c37400704a2f | 39 | servo2 = 0.05f; //left |
mfrede | 1:c37400704a2f | 40 | wait(1); |
mfrede | 1:c37400704a2f | 41 | } |
suneet | 2:27a9092dcc6c | 42 | |
suneet | 2:27a9092dcc6c | 43 | short get_floor(int i) { |
suneet | 2:27a9092dcc6c | 44 | int floorat=0; |
suneet | 2:27a9092dcc6c | 45 | wait(0.099f); |
suneet | 2:27a9092dcc6c | 46 | if (freqcnt>90) { //fifth floor |
suneet | 2:27a9092dcc6c | 47 | floorat = 5; |
suneet | 2:27a9092dcc6c | 48 | } else if (freqcnt>60) { //fourth floor |
suneet | 2:27a9092dcc6c | 49 | floorat = 4; |
suneet | 2:27a9092dcc6c | 50 | } else if (freqcnt>40) { //third floor |
suneet | 2:27a9092dcc6c | 51 | floorat = 3; |
suneet | 2:27a9092dcc6c | 52 | } else if (freqcnt>20) { //second floor |
suneet | 2:27a9092dcc6c | 53 | floorat = 2; |
suneet | 2:27a9092dcc6c | 54 | } else if(freqcnt > 0) { //at first floor |
suneet | 2:27a9092dcc6c | 55 | floorat = 1; |
suneet | 2:27a9092dcc6c | 56 | } |
suneet | 2:27a9092dcc6c | 57 | if(i>0) { |
suneet | 2:27a9092dcc6c | 58 | int floor2 = get_floor(i-1); |
suneet | 2:27a9092dcc6c | 59 | if (floor2 == floorat) |
suneet | 2:27a9092dcc6c | 60 | return floorat; |
suneet | 2:27a9092dcc6c | 61 | else |
suneet | 2:27a9092dcc6c | 62 | return floor2; |
suneet | 2:27a9092dcc6c | 63 | } |
suneet | 2:27a9092dcc6c | 64 | return floorat; |
suneet | 2:27a9092dcc6c | 65 | } |
ashrekhi | 0:3009a71333b6 | 66 | |
ashrekhi | 0:3009a71333b6 | 67 | int main() { |
mfrede | 1:c37400704a2f | 68 | |
mfrede | 1:c37400704a2f | 69 | |
ashrekhi | 0:3009a71333b6 | 70 | InterruptIn floor(p17); |
ashrekhi | 0:3009a71333b6 | 71 | AnalogIn request(p18); |
ashrekhi | 0:3009a71333b6 | 72 | servo1.period(0.020f); //set 20ms period |
ashrekhi | 0:3009a71333b6 | 73 | servo2.period(0.020f); //set 20ms period |
mfrede | 1:c37400704a2f | 74 | DigitalOut motor1(p19); |
mfrede | 1:c37400704a2f | 75 | DigitalOut motor2(p20); |
suneet | 2:27a9092dcc6c | 76 | int floorat; |
suneet | 2:27a9092dcc6c | 77 | DCenable.period(0.0002f); |
ashrekhi | 0:3009a71333b6 | 78 | |
mfrede | 1:c37400704a2f | 79 | |
mfrede | 1:c37400704a2f | 80 | |
mfrede | 1:c37400704a2f | 81 | Ticker check_floor; //? |
suneet | 2:27a9092dcc6c | 82 | check_floor.attach(&timerfunc,0.1f); |
mfrede | 1:c37400704a2f | 83 | floor.fall(&freq_counter); |
ashrekhi | 0:3009a71333b6 | 84 | |
mfrede | 1:c37400704a2f | 85 | close_door(); |
suneet | 2:27a9092dcc6c | 86 | //pc.print |
mfrede | 1:c37400704a2f | 87 | |
suneet | 2:27a9092dcc6c | 88 | while(!onFloor) { //go to the first floor below us |
suneet | 2:27a9092dcc6c | 89 | motor1 = 1; |
suneet | 2:27a9092dcc6c | 90 | motor2 = 0; |
suneet | 2:27a9092dcc6c | 91 | DCenable = 0.8f; |
suneet | 2:27a9092dcc6c | 92 | } |
suneet | 2:27a9092dcc6c | 93 | |
suneet | 2:27a9092dcc6c | 94 | pc.printf("at floor\r\n"); |
suneet | 2:27a9092dcc6c | 95 | floorat = get_floor(1); |
suneet | 2:27a9092dcc6c | 96 | |
suneet | 2:27a9092dcc6c | 97 | pc.printf("floor %d\r\n",floorat); |
suneet | 2:27a9092dcc6c | 98 | |
suneet | 2:27a9092dcc6c | 99 | DCenable = 0; |
suneet | 2:27a9092dcc6c | 100 | wait(5); |
suneet | 2:27a9092dcc6c | 101 | open_door(); |
suneet | 2:27a9092dcc6c | 102 | close_door(); |
suneet | 2:27a9092dcc6c | 103 | |
suneet | 2:27a9092dcc6c | 104 | |
ashrekhi | 0:3009a71333b6 | 105 | while(1){ |
mfrede | 1:c37400704a2f | 106 | pc.printf("%d floor\n\r",floorat); |
mfrede | 1:c37400704a2f | 107 | pc.printf("%f requested\n\r",request.read()); |
mfrede | 1:c37400704a2f | 108 | if(request <= 0.2f) { //first floor |
mfrede | 1:c37400704a2f | 109 | pc.printf("go to the first floor\r\n"); |
ashrekhi | 0:3009a71333b6 | 110 | if(floorat > 1) { //if we're above the first floor |
ashrekhi | 0:3009a71333b6 | 111 | //set DC motor to go down |
ashrekhi | 0:3009a71333b6 | 112 | motor1 = 1; |
ashrekhi | 0:3009a71333b6 | 113 | motor2 = 0; |
suneet | 2:27a9092dcc6c | 114 | DCenable = 0.8f; |
mfrede | 1:c37400704a2f | 115 | } else if (floorat == 1) { |
mfrede | 1:c37400704a2f | 116 | DCenable = 0; |
mfrede | 1:c37400704a2f | 117 | open_door(); |
mfrede | 1:c37400704a2f | 118 | wait(10); |
mfrede | 1:c37400704a2f | 119 | close_door(); |
ashrekhi | 0:3009a71333b6 | 120 | } |
suneet | 2:27a9092dcc6c | 121 | |
mfrede | 1:c37400704a2f | 122 | } else if (request <= 0.4f) { // second floor |
mfrede | 1:c37400704a2f | 123 | pc.printf("go to the second floor\r\n"); |
ashrekhi | 0:3009a71333b6 | 124 | if (floorat > 2) { |
ashrekhi | 0:3009a71333b6 | 125 | //set DC motor to go down |
ashrekhi | 0:3009a71333b6 | 126 | motor1 = 1; |
ashrekhi | 0:3009a71333b6 | 127 | motor2 = 0; |
suneet | 2:27a9092dcc6c | 128 | DCenable = 0.8f; |
ashrekhi | 0:3009a71333b6 | 129 | } else if (floorat < 2) { |
ashrekhi | 0:3009a71333b6 | 130 | //set DC motor to go up |
ashrekhi | 0:3009a71333b6 | 131 | motor1 = 0; |
ashrekhi | 0:3009a71333b6 | 132 | motor2 = 1; |
suneet | 2:27a9092dcc6c | 133 | DCenable = 0.8f; |
mfrede | 1:c37400704a2f | 134 | } else { |
mfrede | 1:c37400704a2f | 135 | DCenable = 0; |
mfrede | 1:c37400704a2f | 136 | open_door(); |
mfrede | 1:c37400704a2f | 137 | wait(10); |
mfrede | 1:c37400704a2f | 138 | close_door(); |
ashrekhi | 0:3009a71333b6 | 139 | } |
mfrede | 1:c37400704a2f | 140 | } else if (request*5 <= 0.6f) { // third floor |
mfrede | 1:c37400704a2f | 141 | pc.printf("go to the third floor\r\n"); |
ashrekhi | 0:3009a71333b6 | 142 | if (floorat > 3) { |
ashrekhi | 0:3009a71333b6 | 143 | //set DC motor to go down |
ashrekhi | 0:3009a71333b6 | 144 | motor1 = 1; |
ashrekhi | 0:3009a71333b6 | 145 | motor2 = 0; |
suneet | 2:27a9092dcc6c | 146 | DCenable = 0.8f; |
ashrekhi | 0:3009a71333b6 | 147 | } else if (floorat < 3) { |
ashrekhi | 0:3009a71333b6 | 148 | //set DC motor to go up |
ashrekhi | 0:3009a71333b6 | 149 | motor1 = 0; |
ashrekhi | 0:3009a71333b6 | 150 | motor2 = 1; |
suneet | 2:27a9092dcc6c | 151 | DCenable = 0.8f; |
mfrede | 1:c37400704a2f | 152 | } else { |
mfrede | 1:c37400704a2f | 153 | DCenable = 0; |
mfrede | 1:c37400704a2f | 154 | open_door(); |
mfrede | 1:c37400704a2f | 155 | wait(10); |
mfrede | 1:c37400704a2f | 156 | close_door(); |
ashrekhi | 0:3009a71333b6 | 157 | } |
mfrede | 1:c37400704a2f | 158 | } else if (request <= 0.8f) { // fourth floor |
mfrede | 1:c37400704a2f | 159 | pc.printf("go to the fourth floor\r\n"); |
ashrekhi | 0:3009a71333b6 | 160 | if (floorat > 4) { |
ashrekhi | 0:3009a71333b6 | 161 | //set DC motor to go down |
ashrekhi | 0:3009a71333b6 | 162 | motor1 = 1; |
ashrekhi | 0:3009a71333b6 | 163 | motor2 = 0; |
suneet | 2:27a9092dcc6c | 164 | DCenable = 0.8f; |
ashrekhi | 0:3009a71333b6 | 165 | } else if (floorat < 4) { |
ashrekhi | 0:3009a71333b6 | 166 | //set DC motor to go up |
ashrekhi | 0:3009a71333b6 | 167 | motor1 = 0; |
ashrekhi | 0:3009a71333b6 | 168 | motor2 = 1; |
suneet | 2:27a9092dcc6c | 169 | DCenable = 0.8f; |
mfrede | 1:c37400704a2f | 170 | } else { |
mfrede | 1:c37400704a2f | 171 | DCenable = 0; |
mfrede | 1:c37400704a2f | 172 | open_door(); |
mfrede | 1:c37400704a2f | 173 | wait(10); |
mfrede | 1:c37400704a2f | 174 | close_door(); |
ashrekhi | 0:3009a71333b6 | 175 | } |
ashrekhi | 0:3009a71333b6 | 176 | } else { //fifth floor |
mfrede | 1:c37400704a2f | 177 | pc.printf("go to the fifth floor\r\n"); |
ashrekhi | 0:3009a71333b6 | 178 | if (floorat < 5) { |
ashrekhi | 0:3009a71333b6 | 179 | //set DC motor to go up |
ashrekhi | 0:3009a71333b6 | 180 | motor1 = 0; |
ashrekhi | 0:3009a71333b6 | 181 | motor2 = 1; |
suneet | 2:27a9092dcc6c | 182 | DCenable = 0.8f; |
mfrede | 1:c37400704a2f | 183 | } else { |
mfrede | 1:c37400704a2f | 184 | DCenable = 0; |
mfrede | 1:c37400704a2f | 185 | open_door(); |
mfrede | 1:c37400704a2f | 186 | wait(10); |
mfrede | 1:c37400704a2f | 187 | close_door(); |
ashrekhi | 0:3009a71333b6 | 188 | } |
ashrekhi | 0:3009a71333b6 | 189 | } //end floor checks |
suneet | 2:27a9092dcc6c | 190 | while(!onFloor) {} //wait til we get to the next floor |
suneet | 2:27a9092dcc6c | 191 | floorat = get_floor(1); |
mfrede | 1:c37400704a2f | 192 | } |
suneet | 2:27a9092dcc6c | 193 | |
ashrekhi | 0:3009a71333b6 | 194 | |
ashrekhi | 0:3009a71333b6 | 195 | |
ashrekhi | 0:3009a71333b6 | 196 | return 0; |
ashrekhi | 0:3009a71333b6 | 197 | } |