ese519

Dependencies:   Servo mbed

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?

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;
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 }