![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ese519
main.cpp@3:4f15d12f0ac0, 2015-10-10 (annotated)
- Committer:
- mfrede
- Date:
- Sat Oct 10 01:16:27 2015 +0000
- Revision:
- 3:4f15d12f0ac0
- Parent:
- 2:27a9092dcc6c
- Child:
- 4:a5a7611a8d25
maybe this works??
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; |
mfrede | 3:4f15d12f0ac0 | 5 | unsigned short floorat = 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 |
mfrede | 3:4f15d12f0ac0 | 18 | if(freqcnt >10) { |
suneet | 2:27a9092dcc6c | 19 | onFloor = true; |
mfrede | 3:4f15d12f0ac0 | 20 | //pc.printf("on floor\r\n"); |
mfrede | 3:4f15d12f0ac0 | 21 | } |
mfrede | 3:4f15d12f0ac0 | 22 | else |
suneet | 2:27a9092dcc6c | 23 | onFloor = false; |
mfrede | 3:4f15d12f0ac0 | 24 | // if(DCenable.read() > 0.0f && freqcnt< 200) { |
mfrede | 3:4f15d12f0ac0 | 25 | // if (freqcnt>90 && freqcnt<110) { //fifth floor |
mfrede | 3:4f15d12f0ac0 | 26 | // floorat = 5; |
mfrede | 3:4f15d12f0ac0 | 27 | // } else if (freqcnt>60) { //fourth floor |
mfrede | 3:4f15d12f0ac0 | 28 | // floorat = 4; |
mfrede | 3:4f15d12f0ac0 | 29 | // } else if (freqcnt>40) { //third floor |
mfrede | 3:4f15d12f0ac0 | 30 | // floorat = 3; |
mfrede | 3:4f15d12f0ac0 | 31 | // } else if (freqcnt>20) { //second floor |
mfrede | 3:4f15d12f0ac0 | 32 | // floorat = 2; |
mfrede | 3:4f15d12f0ac0 | 33 | // } else if(freqcnt > 0) { //at first floor |
mfrede | 3:4f15d12f0ac0 | 34 | // floorat = 1; |
mfrede | 3:4f15d12f0ac0 | 35 | // } |
mfrede | 3:4f15d12f0ac0 | 36 | // pc.printf("floor: %d\r\n",floorat); |
mfrede | 3:4f15d12f0ac0 | 37 | // } |
mfrede | 3:4f15d12f0ac0 | 38 | // pc.printf("freqcnt: %d\r\n",freqcnt); |
mfrede | 3:4f15d12f0ac0 | 39 | // freqcnt = 0; |
ashrekhi | 0:3009a71333b6 | 40 | } |
ashrekhi | 0:3009a71333b6 | 41 | |
mfrede | 1:c37400704a2f | 42 | void open_door() |
mfrede | 1:c37400704a2f | 43 | { |
mfrede | 1:c37400704a2f | 44 | servo1 = 0.03f; // right |
mfrede | 1:c37400704a2f | 45 | servo2 = 0.10f; // left |
mfrede | 1:c37400704a2f | 46 | wait(1); |
mfrede | 1:c37400704a2f | 47 | } |
mfrede | 1:c37400704a2f | 48 | |
mfrede | 1:c37400704a2f | 49 | void close_door() |
mfrede | 1:c37400704a2f | 50 | { |
mfrede | 1:c37400704a2f | 51 | servo1 = 0.08f; //right |
mfrede | 1:c37400704a2f | 52 | servo2 = 0.05f; //left |
mfrede | 1:c37400704a2f | 53 | wait(1); |
mfrede | 1:c37400704a2f | 54 | } |
mfrede | 3:4f15d12f0ac0 | 55 | |
mfrede | 3:4f15d12f0ac0 | 56 | short get_requested(float voltage){ |
mfrede | 3:4f15d12f0ac0 | 57 | if(voltage < 0.25f) |
mfrede | 3:4f15d12f0ac0 | 58 | return 1; |
mfrede | 3:4f15d12f0ac0 | 59 | else if (voltage < 0.45f) |
mfrede | 3:4f15d12f0ac0 | 60 | return 2; |
mfrede | 3:4f15d12f0ac0 | 61 | else if (voltage < 0.65f) |
mfrede | 3:4f15d12f0ac0 | 62 | return 3; |
mfrede | 3:4f15d12f0ac0 | 63 | else if (voltage < 0.85f) |
mfrede | 3:4f15d12f0ac0 | 64 | return 4; |
mfrede | 3:4f15d12f0ac0 | 65 | else |
mfrede | 3:4f15d12f0ac0 | 66 | return 5; |
mfrede | 3:4f15d12f0ac0 | 67 | } |
suneet | 2:27a9092dcc6c | 68 | |
mfrede | 3:4f15d12f0ac0 | 69 | short get_floor() { |
mfrede | 3:4f15d12f0ac0 | 70 | DCenable = 0; |
mfrede | 3:4f15d12f0ac0 | 71 | wait(2); |
mfrede | 3:4f15d12f0ac0 | 72 | float avg=0; |
mfrede | 3:4f15d12f0ac0 | 73 | short floorat=0; |
mfrede | 3:4f15d12f0ac0 | 74 | freqcnt=0; |
mfrede | 3:4f15d12f0ac0 | 75 | wait(0.1f); |
mfrede | 3:4f15d12f0ac0 | 76 | avg+=freqcnt; |
mfrede | 3:4f15d12f0ac0 | 77 | freqcnt=0; |
mfrede | 3:4f15d12f0ac0 | 78 | wait(0.1f); |
mfrede | 3:4f15d12f0ac0 | 79 | avg+=freqcnt; |
mfrede | 3:4f15d12f0ac0 | 80 | freqcnt=0; |
mfrede | 3:4f15d12f0ac0 | 81 | wait(0.1f); |
mfrede | 3:4f15d12f0ac0 | 82 | avg+=freqcnt; |
mfrede | 3:4f15d12f0ac0 | 83 | pc.printf("%f\r\n",avg); |
mfrede | 3:4f15d12f0ac0 | 84 | if (avg>270 && avg < 300) { //fifth floor |
suneet | 2:27a9092dcc6c | 85 | floorat = 5; |
mfrede | 3:4f15d12f0ac0 | 86 | } else if (avg>180) { //fourth floor |
suneet | 2:27a9092dcc6c | 87 | floorat = 4; |
mfrede | 3:4f15d12f0ac0 | 88 | } else if (avg>120) { //third floor |
suneet | 2:27a9092dcc6c | 89 | floorat = 3; |
mfrede | 3:4f15d12f0ac0 | 90 | } else if (avg>60) { //second floor |
suneet | 2:27a9092dcc6c | 91 | floorat = 2; |
mfrede | 3:4f15d12f0ac0 | 92 | } else if(avg > 0) { //at first floor |
suneet | 2:27a9092dcc6c | 93 | floorat = 1; |
suneet | 2:27a9092dcc6c | 94 | } |
mfrede | 3:4f15d12f0ac0 | 95 | |
suneet | 2:27a9092dcc6c | 96 | return floorat; |
suneet | 2:27a9092dcc6c | 97 | } |
ashrekhi | 0:3009a71333b6 | 98 | |
ashrekhi | 0:3009a71333b6 | 99 | int main() { |
mfrede | 1:c37400704a2f | 100 | |
mfrede | 1:c37400704a2f | 101 | |
ashrekhi | 0:3009a71333b6 | 102 | InterruptIn floor(p17); |
ashrekhi | 0:3009a71333b6 | 103 | AnalogIn request(p18); |
ashrekhi | 0:3009a71333b6 | 104 | servo1.period(0.020f); //set 20ms period |
ashrekhi | 0:3009a71333b6 | 105 | servo2.period(0.020f); //set 20ms period |
mfrede | 1:c37400704a2f | 106 | DigitalOut motor1(p19); |
mfrede | 1:c37400704a2f | 107 | DigitalOut motor2(p20); |
mfrede | 3:4f15d12f0ac0 | 108 | //int floorat; |
suneet | 2:27a9092dcc6c | 109 | DCenable.period(0.0002f); |
ashrekhi | 0:3009a71333b6 | 110 | |
mfrede | 1:c37400704a2f | 111 | |
mfrede | 1:c37400704a2f | 112 | |
mfrede | 1:c37400704a2f | 113 | Ticker check_floor; //? |
suneet | 2:27a9092dcc6c | 114 | check_floor.attach(&timerfunc,0.1f); |
mfrede | 1:c37400704a2f | 115 | floor.fall(&freq_counter); |
ashrekhi | 0:3009a71333b6 | 116 | |
mfrede | 1:c37400704a2f | 117 | close_door(); |
suneet | 2:27a9092dcc6c | 118 | //pc.print |
mfrede | 1:c37400704a2f | 119 | |
suneet | 2:27a9092dcc6c | 120 | while(!onFloor) { //go to the first floor below us |
suneet | 2:27a9092dcc6c | 121 | motor1 = 1; |
suneet | 2:27a9092dcc6c | 122 | motor2 = 0; |
suneet | 2:27a9092dcc6c | 123 | DCenable = 0.8f; |
suneet | 2:27a9092dcc6c | 124 | } |
mfrede | 3:4f15d12f0ac0 | 125 | wait(0.5f); |
mfrede | 3:4f15d12f0ac0 | 126 | DCenable = 0; |
suneet | 2:27a9092dcc6c | 127 | |
mfrede | 3:4f15d12f0ac0 | 128 | pc.printf("at floor: %d\r\n",get_floor()); |
mfrede | 3:4f15d12f0ac0 | 129 | pc.printf("go to floor: %d\r\n",get_requested(request)); |
mfrede | 3:4f15d12f0ac0 | 130 | while(1) { |
mfrede | 3:4f15d12f0ac0 | 131 | if(get_requested(request) > get_floor()) |
mfrede | 3:4f15d12f0ac0 | 132 | { |
mfrede | 3:4f15d12f0ac0 | 133 | pc.printf("go up\r\n"); |
mfrede | 3:4f15d12f0ac0 | 134 | motor1 = 0; |
mfrede | 3:4f15d12f0ac0 | 135 | motor2 = 1; |
mfrede | 3:4f15d12f0ac0 | 136 | DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 137 | } else if(get_requested(request) < get_floor()) { |
mfrede | 3:4f15d12f0ac0 | 138 | pc.printf("go down\r\n"); |
mfrede | 3:4f15d12f0ac0 | 139 | motor1 = 1; |
mfrede | 3:4f15d12f0ac0 | 140 | motor2 = 0; |
mfrede | 3:4f15d12f0ac0 | 141 | DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 142 | } else { |
mfrede | 3:4f15d12f0ac0 | 143 | motor1=0; |
mfrede | 3:4f15d12f0ac0 | 144 | motor2=0; |
mfrede | 3:4f15d12f0ac0 | 145 | DCenable = 0; |
mfrede | 3:4f15d12f0ac0 | 146 | } |
suneet | 2:27a9092dcc6c | 147 | |
mfrede | 3:4f15d12f0ac0 | 148 | while(onFloor) { |
mfrede | 3:4f15d12f0ac0 | 149 | wait(1); |
mfrede | 3:4f15d12f0ac0 | 150 | pc.printf("at floor: %d\r\n",get_floor()); |
mfrede | 3:4f15d12f0ac0 | 151 | DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 152 | } |
mfrede | 3:4f15d12f0ac0 | 153 | pc.printf("off current floor\r\n"); |
mfrede | 3:4f15d12f0ac0 | 154 | |
mfrede | 3:4f15d12f0ac0 | 155 | while(!onFloor) { //go to the first floor below us |
mfrede | 3:4f15d12f0ac0 | 156 | DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 157 | } |
mfrede | 3:4f15d12f0ac0 | 158 | wait(0.5f); |
mfrede | 3:4f15d12f0ac0 | 159 | DCenable = 0; |
suneet | 2:27a9092dcc6c | 160 | |
mfrede | 3:4f15d12f0ac0 | 161 | wait(2); |
mfrede | 3:4f15d12f0ac0 | 162 | |
mfrede | 3:4f15d12f0ac0 | 163 | pc.printf("at floor: %d\r\n",get_floor()); |
mfrede | 3:4f15d12f0ac0 | 164 | pc.printf("go to floor: %d\r\n",get_requested(request)); |
mfrede | 3:4f15d12f0ac0 | 165 | |
mfrede | 3:4f15d12f0ac0 | 166 | } |
mfrede | 3:4f15d12f0ac0 | 167 | |
mfrede | 3:4f15d12f0ac0 | 168 | // floorat = get_floor(); |
mfrede | 3:4f15d12f0ac0 | 169 | |
mfrede | 3:4f15d12f0ac0 | 170 | //pc.printf("floor %d\r\n",floorat); |
mfrede | 3:4f15d12f0ac0 | 171 | |
mfrede | 3:4f15d12f0ac0 | 172 | |
suneet | 2:27a9092dcc6c | 173 | wait(5); |
suneet | 2:27a9092dcc6c | 174 | open_door(); |
suneet | 2:27a9092dcc6c | 175 | close_door(); |
suneet | 2:27a9092dcc6c | 176 | |
suneet | 2:27a9092dcc6c | 177 | |
mfrede | 3:4f15d12f0ac0 | 178 | // while(1){ |
mfrede | 3:4f15d12f0ac0 | 179 | // pc.printf("%d floor\n\r",floorat); |
mfrede | 3:4f15d12f0ac0 | 180 | // pc.printf("%f requested\n\r",request.read()); |
mfrede | 3:4f15d12f0ac0 | 181 | // if(request <= 0.25f) { //first floor |
mfrede | 3:4f15d12f0ac0 | 182 | // pc.printf("go to the first floor\r\n"); |
mfrede | 3:4f15d12f0ac0 | 183 | // if(floorat > 1) { //if we're above the first floor |
mfrede | 3:4f15d12f0ac0 | 184 | // //set DC motor to go down |
mfrede | 3:4f15d12f0ac0 | 185 | // motor1 = 1; |
mfrede | 3:4f15d12f0ac0 | 186 | // motor2 = 0; |
mfrede | 3:4f15d12f0ac0 | 187 | // DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 188 | // |
mfrede | 3:4f15d12f0ac0 | 189 | // } else if (floorat == 1) { |
mfrede | 3:4f15d12f0ac0 | 190 | // DCenable = 0; |
mfrede | 3:4f15d12f0ac0 | 191 | // open_door(); |
mfrede | 3:4f15d12f0ac0 | 192 | // wait(10); |
mfrede | 3:4f15d12f0ac0 | 193 | // close_door(); |
mfrede | 3:4f15d12f0ac0 | 194 | // } |
mfrede | 3:4f15d12f0ac0 | 195 | // |
mfrede | 3:4f15d12f0ac0 | 196 | // } else if (request <= 0.41f) { // second floor |
mfrede | 3:4f15d12f0ac0 | 197 | // pc.printf("go to the second floor\r\n"); |
mfrede | 3:4f15d12f0ac0 | 198 | // if (floorat > 2) { |
mfrede | 3:4f15d12f0ac0 | 199 | // //set DC motor to go down |
mfrede | 3:4f15d12f0ac0 | 200 | // motor1 = 1; |
mfrede | 3:4f15d12f0ac0 | 201 | // motor2 = 0; |
mfrede | 3:4f15d12f0ac0 | 202 | // DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 203 | // |
mfrede | 3:4f15d12f0ac0 | 204 | // } else if (floorat < 2) { |
mfrede | 3:4f15d12f0ac0 | 205 | // //set DC motor to go up |
mfrede | 3:4f15d12f0ac0 | 206 | // motor1 = 0; |
mfrede | 3:4f15d12f0ac0 | 207 | // motor2 = 1; |
mfrede | 3:4f15d12f0ac0 | 208 | // DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 209 | // |
mfrede | 3:4f15d12f0ac0 | 210 | // } else { |
mfrede | 3:4f15d12f0ac0 | 211 | // DCenable = 0; |
mfrede | 3:4f15d12f0ac0 | 212 | // open_door(); |
mfrede | 3:4f15d12f0ac0 | 213 | // wait(10); |
mfrede | 3:4f15d12f0ac0 | 214 | // close_door(); |
mfrede | 3:4f15d12f0ac0 | 215 | // } |
mfrede | 3:4f15d12f0ac0 | 216 | // } else if (request <= 0.62f) { // third floor |
mfrede | 3:4f15d12f0ac0 | 217 | // pc.printf("go to the third floor\r\n"); |
mfrede | 3:4f15d12f0ac0 | 218 | // if (floorat > 3) { |
mfrede | 3:4f15d12f0ac0 | 219 | // //set DC motor to go down |
mfrede | 3:4f15d12f0ac0 | 220 | // motor1 = 1; |
mfrede | 3:4f15d12f0ac0 | 221 | // motor2 = 0; |
mfrede | 3:4f15d12f0ac0 | 222 | // DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 223 | // |
mfrede | 3:4f15d12f0ac0 | 224 | // } else if (floorat < 3) { |
mfrede | 3:4f15d12f0ac0 | 225 | // //set DC motor to go up |
mfrede | 3:4f15d12f0ac0 | 226 | // motor1 = 0; |
mfrede | 3:4f15d12f0ac0 | 227 | // motor2 = 1; |
mfrede | 3:4f15d12f0ac0 | 228 | // DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 229 | // } else { |
mfrede | 3:4f15d12f0ac0 | 230 | // DCenable = 0; |
mfrede | 3:4f15d12f0ac0 | 231 | // open_door(); |
mfrede | 3:4f15d12f0ac0 | 232 | // wait(10); |
mfrede | 3:4f15d12f0ac0 | 233 | // close_door(); |
mfrede | 3:4f15d12f0ac0 | 234 | // } |
mfrede | 3:4f15d12f0ac0 | 235 | // } else if (request <= 0.85f) { // fourth floor |
mfrede | 3:4f15d12f0ac0 | 236 | // pc.printf("go to the fourth floor\r\n"); |
mfrede | 3:4f15d12f0ac0 | 237 | // if (floorat > 4) { |
mfrede | 3:4f15d12f0ac0 | 238 | // //set DC motor to go down |
mfrede | 3:4f15d12f0ac0 | 239 | // motor1 = 1; |
mfrede | 3:4f15d12f0ac0 | 240 | // motor2 = 0; |
mfrede | 3:4f15d12f0ac0 | 241 | // DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 242 | // } else if (floorat < 4) { |
mfrede | 3:4f15d12f0ac0 | 243 | // //set DC motor to go up |
mfrede | 3:4f15d12f0ac0 | 244 | // motor1 = 0; |
mfrede | 3:4f15d12f0ac0 | 245 | // motor2 = 1; |
mfrede | 3:4f15d12f0ac0 | 246 | // DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 247 | // |
mfrede | 3:4f15d12f0ac0 | 248 | // } else { |
mfrede | 3:4f15d12f0ac0 | 249 | // DCenable = 0; |
mfrede | 3:4f15d12f0ac0 | 250 | // open_door(); |
mfrede | 3:4f15d12f0ac0 | 251 | // wait(10); |
mfrede | 3:4f15d12f0ac0 | 252 | // close_door(); |
mfrede | 3:4f15d12f0ac0 | 253 | // } |
mfrede | 3:4f15d12f0ac0 | 254 | // } else { //fifth floor |
mfrede | 3:4f15d12f0ac0 | 255 | // pc.printf("go to the fifth floor\r\n"); |
mfrede | 3:4f15d12f0ac0 | 256 | // if (floorat < 5) { |
mfrede | 3:4f15d12f0ac0 | 257 | // //set DC motor to go up |
mfrede | 3:4f15d12f0ac0 | 258 | // motor1 = 0; |
mfrede | 3:4f15d12f0ac0 | 259 | // motor2 = 1; |
mfrede | 3:4f15d12f0ac0 | 260 | // DCenable = 0.8f; |
mfrede | 3:4f15d12f0ac0 | 261 | // } else { |
mfrede | 3:4f15d12f0ac0 | 262 | // DCenable = 0; |
mfrede | 3:4f15d12f0ac0 | 263 | // open_door(); |
mfrede | 3:4f15d12f0ac0 | 264 | // wait(10); |
mfrede | 3:4f15d12f0ac0 | 265 | // close_door(); |
mfrede | 3:4f15d12f0ac0 | 266 | // } |
mfrede | 3:4f15d12f0ac0 | 267 | // } //end floor checks |
mfrede | 3:4f15d12f0ac0 | 268 | // |
mfrede | 3:4f15d12f0ac0 | 269 | // wait(1); |
mfrede | 3:4f15d12f0ac0 | 270 | // if(freqcnt > 120){ |
mfrede | 3:4f15d12f0ac0 | 271 | // DCenable = 0; |
mfrede | 3:4f15d12f0ac0 | 272 | // wait(2); |
mfrede | 3:4f15d12f0ac0 | 273 | // } |
mfrede | 3:4f15d12f0ac0 | 274 | //while(1) { |
mfrede | 3:4f15d12f0ac0 | 275 | // //DCenable = 0; |
mfrede | 3:4f15d12f0ac0 | 276 | // wait(5); |
mfrede | 3:4f15d12f0ac0 | 277 | // pc.printf("floor %d\r\n",floorat); |
mfrede | 3:4f15d12f0ac0 | 278 | // } //wait til we get to the next floor |
mfrede | 3:4f15d12f0ac0 | 279 | |
mfrede | 3:4f15d12f0ac0 | 280 | |
mfrede | 3:4f15d12f0ac0 | 281 | //} |
suneet | 2:27a9092dcc6c | 282 | |
ashrekhi | 0:3009a71333b6 | 283 | |
ashrekhi | 0:3009a71333b6 | 284 | |
ashrekhi | 0:3009a71333b6 | 285 | return 0; |
ashrekhi | 0:3009a71333b6 | 286 | } |