ese519

Dependencies:   Servo mbed

Committer:
mfrede
Date:
Thu Oct 15 05:30:53 2015 +0000
Revision:
5:8e2b7caedd1d
Parent:
4:a5a7611a8d25
Child:
6:652229327102
with timer counter and no stopping....

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 5:8e2b7caedd1d 16 if(edge > 0)
mfrede 5:8e2b7caedd1d 17 freq.start();
mfrede 5:8e2b7caedd1d 18 else {
mfrede 5:8e2b7caedd1d 19 int diff = freq.read_us();
mfrede 5:8e2b7caedd1d 20 // pc.printf("edgediff: %d\r\n",diff);
ashrekhi 0:3009a71333b6 21
mfrede 5:8e2b7caedd1d 22 if(diff < 10050 && diff> 9900)
mfrede 5:8e2b7caedd1d 23 floorat = 1;
mfrede 5:8e2b7caedd1d 24 else if (diff < 4050 && diff > 3950)
mfrede 5:8e2b7caedd1d 25 floorat = 2;
mfrede 5:8e2b7caedd1d 26 else if (diff < 2050 && diff > 1950)
mfrede 5:8e2b7caedd1d 27 floorat = 3;
mfrede 5:8e2b7caedd1d 28 else if (diff < 1500 && diff > 1300)
mfrede 5:8e2b7caedd1d 29 floorat = 4;
mfrede 5:8e2b7caedd1d 30 else if (diff < 1100 && diff > 900)
mfrede 5:8e2b7caedd1d 31 floorat = 5;
mfrede 5:8e2b7caedd1d 32 edge = 2;
mfrede 5:8e2b7caedd1d 33 // if(floorat==0)
mfrede 5:8e2b7caedd1d 34 // pc.printf("edgediff: %d\r\n",diff);
mfrede 5:8e2b7caedd1d 35 freq.reset();
mfrede 3:4f15d12f0ac0 36 }
mfrede 5:8e2b7caedd1d 37 }
ashrekhi 0:3009a71333b6 38
mfrede 1:c37400704a2f 39 void open_door()
mfrede 1:c37400704a2f 40 {
mfrede 1:c37400704a2f 41 servo1 = 0.03f; // right
mfrede 1:c37400704a2f 42 servo2 = 0.10f; // left
mfrede 1:c37400704a2f 43 wait(1);
mfrede 1:c37400704a2f 44 }
mfrede 1:c37400704a2f 45
mfrede 1:c37400704a2f 46 void close_door()
mfrede 1:c37400704a2f 47 {
mfrede 1:c37400704a2f 48 servo1 = 0.08f; //right
mfrede 1:c37400704a2f 49 servo2 = 0.05f; //left
mfrede 1:c37400704a2f 50 wait(1);
mfrede 1:c37400704a2f 51 }
mfrede 3:4f15d12f0ac0 52
mfrede 3:4f15d12f0ac0 53 short get_requested(float voltage){
mfrede 5:8e2b7caedd1d 54 if(voltage < 0.3f)
mfrede 3:4f15d12f0ac0 55 return 1;
mfrede 5:8e2b7caedd1d 56 else if (voltage < 0.5f)
mfrede 3:4f15d12f0ac0 57 return 2;
mfrede 5:8e2b7caedd1d 58 else if (voltage < 0.7f)
mfrede 3:4f15d12f0ac0 59 return 3;
mfrede 5:8e2b7caedd1d 60 else if (voltage < 0.7f)
mfrede 3:4f15d12f0ac0 61 return 4;
mfrede 3:4f15d12f0ac0 62 else
mfrede 3:4f15d12f0ac0 63 return 5;
mfrede 3:4f15d12f0ac0 64 }
ashrekhi 0:3009a71333b6 65
ashrekhi 0:3009a71333b6 66 int main() {
mfrede 1:c37400704a2f 67
mfrede 1:c37400704a2f 68
ashrekhi 0:3009a71333b6 69 InterruptIn floor(p17);
ashrekhi 0:3009a71333b6 70 AnalogIn request(p18);
ashrekhi 0:3009a71333b6 71 servo1.period(0.020f); //set 20ms period
ashrekhi 0:3009a71333b6 72 servo2.period(0.020f); //set 20ms period
mfrede 1:c37400704a2f 73 DigitalOut motor1(p19);
mfrede 1:c37400704a2f 74 DigitalOut motor2(p20);
mfrede 3:4f15d12f0ac0 75 //int floorat;
suneet 2:27a9092dcc6c 76 DCenable.period(0.0002f);
ashrekhi 0:3009a71333b6 77
mfrede 1:c37400704a2f 78
mfrede 5:8e2b7caedd1d 79 floor.rise(&edgecnter);
mfrede 1:c37400704a2f 80
mfrede 5:8e2b7caedd1d 81
mfrede 5:8e2b7caedd1d 82 close_door();
mfrede 5:8e2b7caedd1d 83 //pc.print
mfrede 5:8e2b7caedd1d 84 //go up until you find a floor
mfrede 5:8e2b7caedd1d 85 motor1 = 0;
mfrede 5:8e2b7caedd1d 86 motor2 = 1;
mfrede 5:8e2b7caedd1d 87 DCenable = 0.8f;
mfrede 5:8e2b7caedd1d 88
mfrede 5:8e2b7caedd1d 89 while(floorat==0);
mfrede 5:8e2b7caedd1d 90
mfrede 5:8e2b7caedd1d 91 short current_floor = floorat;
mfrede 5:8e2b7caedd1d 92 pc.printf("at floor: %d\r\n",current_floor);
mfrede 3:4f15d12f0ac0 93 pc.printf("go to floor: %d\r\n",get_requested(request));
mfrede 3:4f15d12f0ac0 94 while(1) {
mfrede 5:8e2b7caedd1d 95 while(get_requested(request) != floorat) {
mfrede 5:8e2b7caedd1d 96 pc.printf("at floor: %d\r\n",current_floor);
mfrede 5:8e2b7caedd1d 97 pc.printf("go to floor: %d\r\n",get_requested(request));
mfrede 5:8e2b7caedd1d 98 if(get_requested(request) > current_floor) {
mfrede 5:8e2b7caedd1d 99 pc.printf("go up\r\n");
mfrede 5:8e2b7caedd1d 100 motor1 = 0;
mfrede 5:8e2b7caedd1d 101 motor2 = 1;
mfrede 5:8e2b7caedd1d 102 DCenable = 0.8f;
mfrede 5:8e2b7caedd1d 103 } else if(get_requested(request) < current_floor) {
mfrede 5:8e2b7caedd1d 104 pc.printf("go down\r\n");
mfrede 5:8e2b7caedd1d 105 motor1 = 1;
mfrede 5:8e2b7caedd1d 106 motor2 = 0;
mfrede 5:8e2b7caedd1d 107 DCenable = 0.8f;
mfrede 5:8e2b7caedd1d 108 } else {
mfrede 5:8e2b7caedd1d 109 motor1=0;
mfrede 5:8e2b7caedd1d 110 motor2=0;
mfrede 5:8e2b7caedd1d 111 DCenable = 0;
mfrede 5:8e2b7caedd1d 112
mfrede 5:8e2b7caedd1d 113 }
mfrede 3:4f15d12f0ac0 114 }
mfrede 5:8e2b7caedd1d 115 pc.printf("at requested floor\r\n");
mfrede 5:8e2b7caedd1d 116 open_door();
mfrede 5:8e2b7caedd1d 117 wait(5);
mfrede 5:8e2b7caedd1d 118 close_door();
mfrede 5:8e2b7caedd1d 119 while(get_requested(request) == floorat);
mfrede 5:8e2b7caedd1d 120
mfrede 3:4f15d12f0ac0 121 }
mfrede 3:4f15d12f0ac0 122
suneet 2:27a9092dcc6c 123
ashrekhi 0:3009a71333b6 124
ashrekhi 0:3009a71333b6 125
ashrekhi 0:3009a71333b6 126 return 0;
ashrekhi 0:3009a71333b6 127 }