Ashmeet Singh Rekhi
/
mbed_elevator
ese519
Diff: main.cpp
- Revision:
- 3:4f15d12f0ac0
- Parent:
- 2:27a9092dcc6c
- Child:
- 4:a5a7611a8d25
--- a/main.cpp Fri Oct 09 22:58:27 2015 +0000 +++ b/main.cpp Sat Oct 10 01:16:27 2015 +0000 @@ -2,7 +2,7 @@ #include "PwmOut.h" unsigned int freqcnt=0; -unsigned short floorsPassed = 0; +unsigned short floorat = 0; bool onFloor = false; PwmOut servo1(p22); PwmOut servo2(p23); @@ -15,15 +15,28 @@ } void timerfunc() { // what it does - if (freqcnt > 10) { + if(freqcnt >10) { onFloor = true; - - } else { - if(onFloor) - floorsPassed++; + //pc.printf("on floor\r\n"); + } + else onFloor = false; - } - freqcnt = 0; +// if(DCenable.read() > 0.0f && freqcnt< 200) { +// if (freqcnt>90 && freqcnt<110) { //fifth floor +// floorat = 5; +// } else if (freqcnt>60) { //fourth floor +// floorat = 4; +// } else if (freqcnt>40) { //third floor +// floorat = 3; +// } else if (freqcnt>20) { //second floor +// floorat = 2; +// } else if(freqcnt > 0) { //at first floor +// floorat = 1; +// } +// pc.printf("floor: %d\r\n",floorat); +// } +// pc.printf("freqcnt: %d\r\n",freqcnt); +// freqcnt = 0; } void open_door() @@ -39,28 +52,47 @@ servo2 = 0.05f; //left wait(1); } + +short get_requested(float voltage){ + if(voltage < 0.25f) + return 1; + else if (voltage < 0.45f) + return 2; + else if (voltage < 0.65f) + return 3; + else if (voltage < 0.85f) + return 4; + else + return 5; +} -short get_floor(int i) { - int floorat=0; - wait(0.099f); - if (freqcnt>90) { //fifth floor +short get_floor() { + DCenable = 0; + wait(2); + float avg=0; + short floorat=0; + freqcnt=0; + wait(0.1f); + avg+=freqcnt; + freqcnt=0; + wait(0.1f); + avg+=freqcnt; + freqcnt=0; + wait(0.1f); + avg+=freqcnt; + pc.printf("%f\r\n",avg); + if (avg>270 && avg < 300) { //fifth floor floorat = 5; - } else if (freqcnt>60) { //fourth floor + } else if (avg>180) { //fourth floor floorat = 4; - } else if (freqcnt>40) { //third floor + } else if (avg>120) { //third floor floorat = 3; - } else if (freqcnt>20) { //second floor + } else if (avg>60) { //second floor floorat = 2; - } else if(freqcnt > 0) { //at first floor + } else if(avg > 0) { //at first floor floorat = 1; } - if(i>0) { - int floor2 = get_floor(i-1); - if (floor2 == floorat) - return floorat; - else - return floor2; - } + return floorat; } @@ -73,7 +105,7 @@ servo2.period(0.020f); //set 20ms period DigitalOut motor1(p19); DigitalOut motor2(p20); - int floorat; + //int floorat; DCenable.period(0.0002f); @@ -90,106 +122,163 @@ motor2 = 0; DCenable = 0.8f; } + wait(0.5f); + DCenable = 0; - pc.printf("at floor\r\n"); - floorat = get_floor(1); + pc.printf("at floor: %d\r\n",get_floor()); + pc.printf("go to floor: %d\r\n",get_requested(request)); + while(1) { + if(get_requested(request) > get_floor()) + { + pc.printf("go up\r\n"); + motor1 = 0; + motor2 = 1; + DCenable = 0.8f; + } else if(get_requested(request) < get_floor()) { + pc.printf("go down\r\n"); + motor1 = 1; + motor2 = 0; + DCenable = 0.8f; + } else { + motor1=0; + motor2=0; + DCenable = 0; + } - pc.printf("floor %d\r\n",floorat); + while(onFloor) { + wait(1); + pc.printf("at floor: %d\r\n",get_floor()); + DCenable = 0.8f; + } + pc.printf("off current floor\r\n"); + + while(!onFloor) { //go to the first floor below us + DCenable = 0.8f; + } + wait(0.5f); + DCenable = 0; - DCenable = 0; + wait(2); + + pc.printf("at floor: %d\r\n",get_floor()); + pc.printf("go to floor: %d\r\n",get_requested(request)); + + } + + // floorat = get_floor(); + + //pc.printf("floor %d\r\n",floorat); + + wait(5); open_door(); close_door(); - while(1){ - pc.printf("%d floor\n\r",floorat); - pc.printf("%f requested\n\r",request.read()); - if(request <= 0.2f) { //first floor - pc.printf("go to the first floor\r\n"); - if(floorat > 1) { //if we're above the first floor - //set DC motor to go down - motor1 = 1; - motor2 = 0; - DCenable = 0.8f; - } else if (floorat == 1) { - DCenable = 0; - open_door(); - wait(10); - close_door(); - } - - } else if (request <= 0.4f) { // second floor - pc.printf("go to the second floor\r\n"); - if (floorat > 2) { - //set DC motor to go down - motor1 = 1; - motor2 = 0; - DCenable = 0.8f; - } else if (floorat < 2) { - //set DC motor to go up - motor1 = 0; - motor2 = 1; - DCenable = 0.8f; - } else { - DCenable = 0; - open_door(); - wait(10); - close_door(); - } - } else if (request*5 <= 0.6f) { // third floor - pc.printf("go to the third floor\r\n"); - if (floorat > 3) { - //set DC motor to go down - motor1 = 1; - motor2 = 0; - DCenable = 0.8f; - } else if (floorat < 3) { - //set DC motor to go up - motor1 = 0; - motor2 = 1; - DCenable = 0.8f; - } else { - DCenable = 0; - open_door(); - wait(10); - close_door(); - } - } else if (request <= 0.8f) { // fourth floor - pc.printf("go to the fourth floor\r\n"); - if (floorat > 4) { - //set DC motor to go down - motor1 = 1; - motor2 = 0; - DCenable = 0.8f; - } else if (floorat < 4) { - //set DC motor to go up - motor1 = 0; - motor2 = 1; - DCenable = 0.8f; - } else { - DCenable = 0; - open_door(); - wait(10); - close_door(); - } - } else { //fifth floor - pc.printf("go to the fifth floor\r\n"); - if (floorat < 5) { - //set DC motor to go up - motor1 = 0; - motor2 = 1; - DCenable = 0.8f; - } else { - DCenable = 0; - open_door(); - wait(10); - close_door(); - } - } //end floor checks - while(!onFloor) {} //wait til we get to the next floor - floorat = get_floor(1); - } +// while(1){ +// pc.printf("%d floor\n\r",floorat); +// pc.printf("%f requested\n\r",request.read()); +// if(request <= 0.25f) { //first floor +// pc.printf("go to the first floor\r\n"); +// if(floorat > 1) { //if we're above the first floor +// //set DC motor to go down +// motor1 = 1; +// motor2 = 0; +// DCenable = 0.8f; +// +// } else if (floorat == 1) { +// DCenable = 0; +// open_door(); +// wait(10); +// close_door(); +// } +// +// } else if (request <= 0.41f) { // second floor +// pc.printf("go to the second floor\r\n"); +// if (floorat > 2) { +// //set DC motor to go down +// motor1 = 1; +// motor2 = 0; +// DCenable = 0.8f; +// +// } else if (floorat < 2) { +// //set DC motor to go up +// motor1 = 0; +// motor2 = 1; +// DCenable = 0.8f; +// +// } else { +// DCenable = 0; +// open_door(); +// wait(10); +// close_door(); +// } +// } else if (request <= 0.62f) { // third floor +// pc.printf("go to the third floor\r\n"); +// if (floorat > 3) { +// //set DC motor to go down +// motor1 = 1; +// motor2 = 0; +// DCenable = 0.8f; +// +// } else if (floorat < 3) { +// //set DC motor to go up +// motor1 = 0; +// motor2 = 1; +// DCenable = 0.8f; +// } else { +// DCenable = 0; +// open_door(); +// wait(10); +// close_door(); +// } +// } else if (request <= 0.85f) { // fourth floor +// pc.printf("go to the fourth floor\r\n"); +// if (floorat > 4) { +// //set DC motor to go down +// motor1 = 1; +// motor2 = 0; +// DCenable = 0.8f; +// } else if (floorat < 4) { +// //set DC motor to go up +// motor1 = 0; +// motor2 = 1; +// DCenable = 0.8f; +// +// } else { +// DCenable = 0; +// open_door(); +// wait(10); +// close_door(); +// } +// } else { //fifth floor +// pc.printf("go to the fifth floor\r\n"); +// if (floorat < 5) { +// //set DC motor to go up +// motor1 = 0; +// motor2 = 1; +// DCenable = 0.8f; +// } else { +// DCenable = 0; +// open_door(); +// wait(10); +// close_door(); +// } +// } //end floor checks +// +// wait(1); +// if(freqcnt > 120){ +// DCenable = 0; +// wait(2); +// } + //while(1) { +// //DCenable = 0; +// wait(5); +// pc.printf("floor %d\r\n",floorat); +// } //wait til we get to the next floor + + + //}