Ashmeet Singh Rekhi
/
mbed_elevator
ese519
main.cpp@8:ae5df9496557, 2015-10-15 (annotated)
- Committer:
- mfrede
- Date:
- Thu Oct 15 07:21:21 2015 +0000
- Revision:
- 8:ae5df9496557
- Parent:
- 7:1ccdc92259f4
this works better
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 | 5:8e2b7caedd1d | 4 | Timer freq; |
mfrede | 5:8e2b7caedd1d | 5 | unsigned int edge1=0; |
mfrede | 3:4f15d12f0ac0 | 6 | unsigned short floorat = 0; |
mfrede | 5:8e2b7caedd1d | 7 | unsigned short edge = 2; |
suneet | 2:27a9092dcc6c | 8 | bool onFloor = false; |
mfrede | 1:c37400704a2f | 9 | PwmOut servo1(p22); |
mfrede | 1:c37400704a2f | 10 | PwmOut servo2(p23); |
mfrede | 1:c37400704a2f | 11 | Serial pc(USBTX, USBRX); // tx, rx |
suneet | 2:27a9092dcc6c | 12 | PwmOut DCenable(p21); |
ashrekhi | 0:3009a71333b6 | 13 | |
mfrede | 5:8e2b7caedd1d | 14 | void edgecnter() { |
mfrede | 5:8e2b7caedd1d | 15 | edge--; |
mfrede | 7:1ccdc92259f4 | 16 | if(edge > 0) { |
mfrede | 5:8e2b7caedd1d | 17 | freq.start(); |
mfrede | 7:1ccdc92259f4 | 18 | freq.reset(); |
mfrede | 7:1ccdc92259f4 | 19 | } else { |
mfrede | 5:8e2b7caedd1d | 20 | int diff = freq.read_us(); |
mfrede | 8:ae5df9496557 | 21 | // pc.printf("edgediff: %d\r\n",diff); |
ashrekhi | 0:3009a71333b6 | 22 | |
mfrede | 7:1ccdc92259f4 | 23 | if(diff < 10100 && diff> 9900) |
mfrede | 5:8e2b7caedd1d | 24 | floorat = 1; |
mfrede | 5:8e2b7caedd1d | 25 | else if (diff < 4050 && diff > 3950) |
mfrede | 5:8e2b7caedd1d | 26 | floorat = 2; |
mfrede | 7:1ccdc92259f4 | 27 | else if (diff < 2100 && diff > 1900) |
mfrede | 5:8e2b7caedd1d | 28 | floorat = 3; |
mfrede | 5:8e2b7caedd1d | 29 | else if (diff < 1500 && diff > 1300) |
mfrede | 5:8e2b7caedd1d | 30 | floorat = 4; |
mfrede | 5:8e2b7caedd1d | 31 | else if (diff < 1100 && diff > 900) |
mfrede | 5:8e2b7caedd1d | 32 | floorat = 5; |
mfrede | 5:8e2b7caedd1d | 33 | edge = 2; |
mfrede | 5:8e2b7caedd1d | 34 | // if(floorat==0) |
mfrede | 5:8e2b7caedd1d | 35 | // pc.printf("edgediff: %d\r\n",diff); |
mfrede | 7:1ccdc92259f4 | 36 | freq.stop(); |
mfrede | 3:4f15d12f0ac0 | 37 | } |
mfrede | 5:8e2b7caedd1d | 38 | } |
ashrekhi | 0:3009a71333b6 | 39 | |
mfrede | 1:c37400704a2f | 40 | void open_door() |
mfrede | 1:c37400704a2f | 41 | { |
mfrede | 1:c37400704a2f | 42 | servo1 = 0.03f; // right |
mfrede | 1:c37400704a2f | 43 | servo2 = 0.10f; // left |
mfrede | 1:c37400704a2f | 44 | wait(1); |
mfrede | 1:c37400704a2f | 45 | } |
mfrede | 1:c37400704a2f | 46 | |
mfrede | 1:c37400704a2f | 47 | void close_door() |
mfrede | 1:c37400704a2f | 48 | { |
mfrede | 1:c37400704a2f | 49 | servo1 = 0.08f; //right |
mfrede | 1:c37400704a2f | 50 | servo2 = 0.05f; //left |
mfrede | 1:c37400704a2f | 51 | wait(1); |
mfrede | 1:c37400704a2f | 52 | } |
mfrede | 3:4f15d12f0ac0 | 53 | |
mfrede | 3:4f15d12f0ac0 | 54 | short get_requested(float voltage){ |
mfrede | 7:1ccdc92259f4 | 55 | // pc.printf("voltage: %f\r\n",voltage); |
mfrede | 8:ae5df9496557 | 56 | if(voltage < 0.30f) |
mfrede | 3:4f15d12f0ac0 | 57 | return 1; |
mfrede | 7:1ccdc92259f4 | 58 | else if (voltage < 0.55f) |
mfrede | 3:4f15d12f0ac0 | 59 | return 2; |
mfrede | 7:1ccdc92259f4 | 60 | else if (voltage < 0.75f) |
mfrede | 3:4f15d12f0ac0 | 61 | return 3; |
mfrede | 7:1ccdc92259f4 | 62 | else if (voltage < 0.9f) |
mfrede | 3:4f15d12f0ac0 | 63 | return 4; |
mfrede | 3:4f15d12f0ac0 | 64 | else |
mfrede | 3:4f15d12f0ac0 | 65 | return 5; |
mfrede | 3:4f15d12f0ac0 | 66 | } |
ashrekhi | 0:3009a71333b6 | 67 | |
ashrekhi | 0:3009a71333b6 | 68 | int main() { |
mfrede | 1:c37400704a2f | 69 | |
mfrede | 1:c37400704a2f | 70 | |
ashrekhi | 0:3009a71333b6 | 71 | InterruptIn floor(p17); |
ashrekhi | 0:3009a71333b6 | 72 | AnalogIn request(p18); |
ashrekhi | 0:3009a71333b6 | 73 | servo1.period(0.020f); //set 20ms period |
ashrekhi | 0:3009a71333b6 | 74 | servo2.period(0.020f); //set 20ms period |
mfrede | 1:c37400704a2f | 75 | DigitalOut motor1(p19); |
mfrede | 1:c37400704a2f | 76 | DigitalOut motor2(p20); |
mfrede | 3:4f15d12f0ac0 | 77 | //int floorat; |
mfrede | 8:ae5df9496557 | 78 | DCenable.period(0.02f); |
ashrekhi | 0:3009a71333b6 | 79 | |
mfrede | 1:c37400704a2f | 80 | |
mfrede | 5:8e2b7caedd1d | 81 | floor.rise(&edgecnter); |
mfrede | 1:c37400704a2f | 82 | |
mfrede | 7:1ccdc92259f4 | 83 | // while(1) { |
mfrede | 7:1ccdc92259f4 | 84 | // pc.printf("floor: %d\r\n",floorat); |
mfrede | 7:1ccdc92259f4 | 85 | // } |
mfrede | 5:8e2b7caedd1d | 86 | close_door(); |
mfrede | 5:8e2b7caedd1d | 87 | //pc.print |
mfrede | 5:8e2b7caedd1d | 88 | //go up until you find a floor |
mfrede | 5:8e2b7caedd1d | 89 | motor1 = 0; |
mfrede | 5:8e2b7caedd1d | 90 | motor2 = 1; |
mfrede | 8:ae5df9496557 | 91 | DCenable = 0.5f; |
mfrede | 5:8e2b7caedd1d | 92 | |
mfrede | 5:8e2b7caedd1d | 93 | |
mfrede | 5:8e2b7caedd1d | 94 | short current_floor = floorat; |
mfrede | 5:8e2b7caedd1d | 95 | pc.printf("at floor: %d\r\n",current_floor); |
mfrede | 3:4f15d12f0ac0 | 96 | pc.printf("go to floor: %d\r\n",get_requested(request)); |
mfrede | 3:4f15d12f0ac0 | 97 | while(1) { |
mfrede | 5:8e2b7caedd1d | 98 | while(get_requested(request) != floorat) { |
mfrede | 7:1ccdc92259f4 | 99 | if(floorat!= 0) |
mfrede | 7:1ccdc92259f4 | 100 | current_floor = floorat; |
mfrede | 7:1ccdc92259f4 | 101 | pc.printf("at floor: %d\r\n",floorat); |
mfrede | 7:1ccdc92259f4 | 102 | pc.printf("\t\tgo to floor: %d\r\n",get_requested(request)); |
mfrede | 5:8e2b7caedd1d | 103 | if(get_requested(request) > current_floor) { |
mfrede | 5:8e2b7caedd1d | 104 | pc.printf("go up\r\n"); |
mfrede | 5:8e2b7caedd1d | 105 | motor1 = 0; |
mfrede | 5:8e2b7caedd1d | 106 | motor2 = 1; |
mfrede | 8:ae5df9496557 | 107 | DCenable = 0.5f; |
mfrede | 5:8e2b7caedd1d | 108 | } else if(get_requested(request) < current_floor) { |
mfrede | 5:8e2b7caedd1d | 109 | pc.printf("go down\r\n"); |
mfrede | 5:8e2b7caedd1d | 110 | motor1 = 1; |
mfrede | 5:8e2b7caedd1d | 111 | motor2 = 0; |
mfrede | 8:ae5df9496557 | 112 | DCenable = 0.5f; |
mfrede | 5:8e2b7caedd1d | 113 | } else { |
mfrede | 5:8e2b7caedd1d | 114 | motor1=0; |
mfrede | 5:8e2b7caedd1d | 115 | motor2=0; |
mfrede | 5:8e2b7caedd1d | 116 | DCenable = 0; |
mfrede | 5:8e2b7caedd1d | 117 | } |
mfrede | 7:1ccdc92259f4 | 118 | |
mfrede | 3:4f15d12f0ac0 | 119 | } |
mfrede | 5:8e2b7caedd1d | 120 | pc.printf("at requested floor\r\n"); |
mfrede | 6:652229327102 | 121 | DCenable = 0; |
mfrede | 5:8e2b7caedd1d | 122 | open_door(); |
mfrede | 5:8e2b7caedd1d | 123 | wait(5); |
mfrede | 5:8e2b7caedd1d | 124 | close_door(); |
mfrede | 5:8e2b7caedd1d | 125 | while(get_requested(request) == floorat); |
mfrede | 5:8e2b7caedd1d | 126 | |
mfrede | 3:4f15d12f0ac0 | 127 | } |
mfrede | 3:4f15d12f0ac0 | 128 | |
suneet | 2:27a9092dcc6c | 129 | |
ashrekhi | 0:3009a71333b6 | 130 | |
ashrekhi | 0:3009a71333b6 | 131 | |
ashrekhi | 0:3009a71333b6 | 132 | return 0; |
ashrekhi | 0:3009a71333b6 | 133 | } |