Driver para movimiento de una pierna electronica

Dependencies:   TSI mbed

main.cpp

Committer:
JAgustinOtero
Date:
2018-04-20
Revision:
0:fc3d2482b2f7

File content as of revision 0:fc3d2482b2f7:

#include "mbed.h"
#include "TSISensor.h"
#define ADE 0.7
#define ATR 0.3


DigitalOut LR(LED1);
DigitalOut LG(LED2);
DigitalOut LA(LED3);
PwmOut O1 (PTB0);
PwmOut O2 (PTB1);
AnalogIn AnalogicoXY(PTB2);
Ticker servo1;


char DIRE=0;
char HABO1=0;
char HABO2=0;


void servo1f (void);

void ME_servocontrol(void);

enum {PM,LEV_PATA,ADE_PATA,BAJAR_PATA,ATR_PATA};

char ME_servocontrol_estado=0;

TSISensor tsi;

int main()
{

    servo1.attach(&servo1f,0.05);
    //  servo1.attach(&ME_servocontrol,1);
//    myled.period(200);
//    myled=0.05;
    O1=0.025;
    O2=0.025;
    while(1) {
        ME_servocontrol();
    }
}

void servo1f ()
{
    if(HABO1==1 && DIRE==1)
        O1=O1+(0.005);
    if(HABO2==1 && DIRE==1)
        O2=O2+(0.005);
    if(HABO1==1 && DIRE==0)
        O1=O1-(0.005);
    if(HABO2==1 && DIRE==0)
        O2=O2-(0.005);
}

void ME_servocontrol()
{
    switch(ME_servocontrol_estado) {
        case PM:
            O1=0.04625;
            O2=0.0025;
            HABO1=0;
            HABO2=0;
            LR=0;
            LG=1;
            LA=1;
            if(/*AnalogicoXY>ADE &&*/tsi.readPercentage()>0.65 || /*AnalogicoXY<ATR*/ tsi.readPercentage()<0.35 && tsi.readPercentage()>0) ME_servocontrol_estado=LEV_PATA;
            break;
        case LEV_PATA:
            HABO1=0;
            HABO2=1;
            DIRE=1;
            LR=1;
            LG=0;
            LA=1;
            if(/*AnalogicoXY>ADE &&*/tsi.readPercentage()>0.65 && O2>=0.0625) {
                ME_servocontrol_estado=ADE_PATA;
            }
            if(/*AnalogicoXY<ATR*/tsi.readPercentage()<0.35 && O2>=0.0625) {
                ME_servocontrol_estado=ATR_PATA;
            }
            if(/*AnalogicoXY<ADE && AnalogicoXY>ATR*/tsi.readPercentage()<=0.65 && tsi.readPercentage()>=0.35 || tsi.readPercentage()==0) {
                ME_servocontrol_estado=PM;
            }
            break;
        case ADE_PATA:
            HABO1=1;
            HABO2=0;
            DIRE=1;
            LR=1;
            LG=1;
            LA=0;
            if(/*AnalogicoXY>ADE &&*/ tsi.readPercentage()>0.65 && O1>=0.0625) {
                ME_servocontrol_estado=BAJAR_PATA;
            }
            if(/*AnalogicoXY<ATR*/tsi.readPercentage()<0.35 && O1>=0.0625) {
                ME_servocontrol_estado=LEV_PATA;
            }
            if(/*AnalogicoXY<ADE && AnalogicoXY>ATR*/tsi.readPercentage()<=0.65 && tsi.readPercentage()>=0.35 || tsi.readPercentage()==0) {
                ME_servocontrol_estado=PM;
            }
            break;
        case BAJAR_PATA:
            HABO1=0;
            HABO2=1;
            DIRE=0;
            LR=1;
            LG=0;
            LA=0;
            if(/*AnalogicoXY>ADE &&*/ tsi.readPercentage()>0.65 && O2<=0.025) {
                ME_servocontrol_estado=ATR_PATA;
            }
            if(/*AnalogicoXY<ATR*/tsi.readPercentage()<0.35 && O2<=0.025) {
                ME_servocontrol_estado=ADE_PATA;
            }
            if(/*AnalogicoXY<ADE && AnalogicoXY>ATR*/tsi.readPercentage()<=0.65 && tsi.readPercentage()>=0.35 || tsi.readPercentage()==0) {
                ME_servocontrol_estado=PM;
            }
            break;
        case ATR_PATA:
            HABO1=1;
            HABO2=0;
            DIRE=0;
            LR=0;
            LG=1;
            LA=0;
            if(/*AnalogicoXY>ADE &&*/ tsi.readPercentage()>0.65 && O1<=0.025) {
                ME_servocontrol_estado=LEV_PATA;
            }
            if(/*AnalogicoXY<ATR*/tsi.readPercentage()<0.35 && O1<=0.025) {
                ME_servocontrol_estado=BAJAR_PATA;
            }
            if(/*AnalogicoXY<ADE && AnalogicoXY>ATR*/tsi.readPercentage()<=0.65 && tsi.readPercentage()>=0.35 || tsi.readPercentage()==0) {
                ME_servocontrol_estado=PM;
            }
            break;
    }
}