![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ese519
main.cpp
- Committer:
- suneet
- Date:
- 2015-10-09
- Revision:
- 2:27a9092dcc6c
- Parent:
- 1:c37400704a2f
- Child:
- 3:4f15d12f0ac0
File content as of revision 2:27a9092dcc6c:
#include "mbed.h" #include "PwmOut.h" unsigned int freqcnt=0; unsigned short floorsPassed = 0; bool onFloor = false; PwmOut servo1(p22); PwmOut servo2(p23); Serial pc(USBTX, USBRX); // tx, rx PwmOut DCenable(p21); void freq_counter() { freqcnt++; //DCenable = 0; } void timerfunc() { // what it does if (freqcnt > 10) { onFloor = true; } else { if(onFloor) floorsPassed++; onFloor = false; } freqcnt = 0; } void open_door() { servo1 = 0.03f; // right servo2 = 0.10f; // left wait(1); } void close_door() { servo1 = 0.08f; //right servo2 = 0.05f; //left wait(1); } short get_floor(int i) { int floorat=0; wait(0.099f); if (freqcnt>90) { //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; } if(i>0) { int floor2 = get_floor(i-1); if (floor2 == floorat) return floorat; else return floor2; } return floorat; } int main() { InterruptIn floor(p17); AnalogIn request(p18); servo1.period(0.020f); //set 20ms period servo2.period(0.020f); //set 20ms period DigitalOut motor1(p19); DigitalOut motor2(p20); int floorat; DCenable.period(0.0002f); Ticker check_floor; //? check_floor.attach(&timerfunc,0.1f); floor.fall(&freq_counter); close_door(); //pc.print while(!onFloor) { //go to the first floor below us motor1 = 1; motor2 = 0; DCenable = 0.8f; } pc.printf("at floor\r\n"); floorat = get_floor(1); pc.printf("floor %d\r\n",floorat); DCenable = 0; 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); } return 0; }