ese519

Dependencies:   Servo mbed

Committer:
mfrede
Date:
Thu Oct 15 07:09:55 2015 +0000
Revision:
7:1ccdc92259f4
Parent:
6:652229327102
Child:
8:ae5df9496557
mostly working

Who changed what in which revision?

UserRevisionLine numberNew 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 7:1ccdc92259f4 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 7:1ccdc92259f4 56 if(voltage < 0.34f)
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;
suneet 2:27a9092dcc6c 78 DCenable.period(0.0002f);
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 5:8e2b7caedd1d 91 DCenable = 0.8f;
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 5:8e2b7caedd1d 107 DCenable = 0.8f;
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 5:8e2b7caedd1d 112 DCenable = 0.8f;
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 }