use for experiment before the demonstration at open-campus

Dependencies:   FEP ikarashiMDC omni PID R1370

Fork of omni_sample by NagaokaRoboticsClub_mbedTeam

main.cpp

Committer:
tknara
Date:
2017-09-01
Revision:
9:8f9607783d2d
Parent:
8:244c057d195c
Child:
10:73148221684e

File content as of revision 9:8f9607783d2d:

#include "mbed.h"
#include "omni.h"
#include "ikarashiMDC.h"
#include "pin_config.h"
#include "FEP.h"
#include "controller.h"

#define stickrange 0.25
#define DEBUG 
Omni omni(4);
Serial RS485(RS485_TX,RS485_RX,38400);
Serial pc(USBTX,USBRX,115200);
Controller con(FEP_TX,FEP_RX,200);
DigitalOut RS485control(D2);
DigitalOut leds[4] = {PC_13,PC_14,PC_15,PA_0};
DigitalOut attack[2] = {PA_10,PC_4};
DigitalOut angle[2] = {PB_3,PB_5};

 
ikarashiMDC wheels[] {
    ikarashiMDC(&RS485control,0,0,SM,&RS485),
    ikarashiMDC(&RS485control,1,3,SM,&RS485),
    ikarashiMDC(&RS485control,1,0,SM,&RS485),
    ikarashiMDC(&RS485control,0,3,SM,&RS485)
};
ikarashiMDC lift[] {
    ikarashiMDC(&RS485control,1,1,SM,&RS485)
};
void init()
{
    int i;
    for(i = 0;i < 4;i++) {
        wheels[i].braking = true;
    }
    lift[0].braking = true;
    omni.setWheelRadian(PI/4,3*PI/4,5*PI/4,7*PI/4);
    for(i = 0;i<4;i++) {
        leds[i] = 0;
    }
}
void AllActuatorStop()
{
#ifdef DEBUG
    pc.printf("All actuators stop\n");
#endif
    for(int i=0;i<1;i++)
    {
        attack[i]=0;
        angle[i]=0;
    }
}
int main()
{   
    bool airFlag1=0,airFlag2=0,airStatus1=0,airStatus2=0;
    int error_val = 0;
    uint8_t fep_temp;
    double pwm = 0.0;
    init();
    while(1) {
        if(con.receiveState()==0) {
            error_val = 0;
            leds[0] = 0;
        } else if(fep_temp==FEP_NO_RESPONSE) {
            leds[0] = 1;
            continue;
        } else {
            leds[0] = 1;
            error_val++;
        }
        if(error_val < 4) {
            omni.computeXY(-1*con.getStick(2),con.getStick(3),con.getStick(0)/-2.0);           
            for(int i = 0; i < 4; i++) {
                pc.printf("%lf,",omni.getOutput(i));
                wheels[i].setSpeed(omni.getOutput(i));
            }
            //昇降
            if(con.getButton1(0) == 1 && con.getButton1(1) == 0) {
                pwm = -0.9;
            } else if(con.getButton1(0) == 0 && con.getButton1(1) == 1) {
                pwm = 0.9;
            } else {
                pwm = 0.0;
            }
            lift[0].setSpeed(pwm);
            //アーム攻撃(toggle)
            if((con.getButton2(1)==0)&&(airFlag1 == 0))
            {
                if(airStatus1==1) {
                    attack[0]=0;
                    attack[1]=1;
                    airFlag1=1;
                    airStatus1=0;
                }else if(airStatus1==0) {
                    attack[0]=1;
                    attack[1]=0;
                    airFlag1=1;
                    airStatus1=1;
                }                   
            }else if(con.getButton2(1)==1){
                airFlag1=0;
                attack[0]=0;
                attack[1]=0;    
            }
            //アーム角度(toggle)
            if((con.getButton2(3)==0)&&(airFlag2 == 0))
            {
                if(airStatus2==1) {
                    angle[0]=0;
                    angle[1]=1;
                    airFlag2=1;
                    airStatus2=0;
                }else if(airStatus2==0) {
                    angle[0]=1;
                    angle[1]=0;
                    airFlag2=1;
                    airStatus2=1;
                }                   
            }else if(con.getButton2(3)==1){
                airFlag2=0;
                angle[0]=0;
                angle[1]=0;    
            }
#ifdef DEBUG
            printf("Status of airFlags %d,%d\r\n",airStatus1,airStatus2);
#endif
        } else if((fep_temp==FEP_NO_RESPONSE)&&(error_val > 4)){
            AllActuatorStop();
        } else {
            AllActuatorStop();
        }
    }
}