ese519

Dependencies:   Servo mbed

main.cpp

Committer:
mfrede
Date:
2015-10-07
Revision:
1:c37400704a2f
Parent:
0:3009a71333b6
Child:
2:27a9092dcc6c

File content as of revision 1:c37400704a2f:

#include "mbed.h"
#include "PwmOut.h"

unsigned int freqcnt=0;
unsigned int floorat = 1;
PwmOut servo1(p22);
PwmOut servo2(p23);
Serial pc(USBTX, USBRX); // tx, rx
DigitalOut DCenable(p21);

void freq_counter() {
    freqcnt++;
    DCenable = 0;
    pc.printf("%d cnt\r\n",freqcnt);
}

void timerfunc() {  // what it does
    
    floorat = 0;
    if (freqcnt != 0) {
        if (freqcnt <= 1 && freqcnt>0)
            floorat = 1;
        else if (freqcnt <= 3)
            floorat = 2;
        else if (freqcnt <= 5)
            floorat = 3;
        else if (freqcnt <= 7)
            floorat = 4;
        else if (freqcnt <= 10)
            floorat = 5;
    }    
    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);
}
    

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);
    AnalogIn floor2(p17);
    
    
    
    Ticker check_floor; //?
    check_floor.attach(&timerfunc,0.01f);
    floor.fall(&freq_counter);
    
   close_door();

   
    while(1){
        pc.printf("%d floor\n\r",floorat);
        pc.printf("%f requested\n\r",request.read());
        if(DCenable == 0 && floorat == 0) {     //if we are not starting on a known floor
            motor1 = 1;         //just go up until you get to a floor
            motor2 = 0;
            DCenable = 1;
            pc.printf("go up to start \r\n");
        }
        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 = 1;
            } 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 = 1;
            } else if (floorat < 2) {
                //set DC motor to go up
                motor1 = 0;
                motor2 = 1;
                DCenable = 1;
            } 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 = 1;
            } else if (floorat < 3) {
                //set DC motor to go up
                motor1 = 0;
                motor2 = 1;
                DCenable = 1;
            } 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 = 1;
            } else if (floorat < 4) {
                //set DC motor to go up
                motor1 = 0;
                motor2 = 1;
                DCenable = 1;
            } 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 = 1;
            } else {
                DCenable = 0;
                open_door();
                wait(10);
                close_door();
            }
        }   //end floor checks
        wait(10);
    }
        //while (floorat == 0) {    //wait endlessly until we're on a floor
//            if(DCenable == 0 || freqcnt != 0)
//                break;
//            wait(1);
//        }
    while(1)    {
        
    }

    
    return 0;
}