ese519

Dependencies:   Servo mbed

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?

UserRevisionLine numberNew 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 }