ジャパンオープン用のメインプログラム

Dependencies:   mbed AQM1602 HMC6352 PID

main_processing/strategy_parts/input.cpp

Committer:
lilac0112_1
Date:
2016-03-14
Revision:
16:4fadb7a87497
Parent:
10:6df631c39f9b
Child:
19:967207de919d

File content as of revision 16:4fadb7a87497:

#include "mbed.h"
#include "extern.h"

//line
void ReadLine(void){
    static uint8_t line_buf[3]={0,0,0};
    wait_us(100);
    if(Line[0].read()==1) line_buf[0] = 100;
    if(line_buf[0]==0)  data.lnFlag[0]=0;
    else                data.lnFlag[0]=1;
    if(line_buf[0]>0) line_buf[0]--;
    
    if(Line[1].read()==1) line_buf[1] = 100;
    if(line_buf[1]==0)  data.lnFlag[1]=0;
    else                data.lnFlag[1]=1;
    if(line_buf[1]>0) line_buf[1]--;
    
    if(Line[2].read()==1) line_buf[2] = 100;
    if(line_buf[2]==0)  data.lnFlag[2]=0;
    else                data.lnFlag[2]=1;
    if(line_buf[2]>0) line_buf[2]--;
}
//line_hold
void LineRanking_A(void){
    if(data.lnOrder[0]==LINE_EMPTY){
        data.lnOrder[0]=A_SPOT;
    }
    else if(data.lnOrder[1]==LINE_EMPTY){
        data.lnOrder[1]=A_SPOT;
    }
    else if(data.lnOrder[2]==LINE_EMPTY){
        data.lnOrder[2]=A_SPOT;
    }
}
void LineRanking_B(void){
    if(data.lnOrder[0]==LINE_EMPTY){
        data.lnOrder[0]=B_SPOT;
    }
    else if(data.lnOrder[1]==LINE_EMPTY){
        data.lnOrder[1]=B_SPOT;
    }
    else if(data.lnOrder[2]==LINE_EMPTY){
        data.lnOrder[2]=B_SPOT;
    }
}
void LineRanking_C(void){
    if(data.lnOrder[0]==LINE_EMPTY){
        data.lnOrder[0]=C_SPOT;
    }
    else if(data.lnOrder[1]==LINE_EMPTY){
        data.lnOrder[1]=C_SPOT;
    }
    else if(data.lnOrder[2]==LINE_EMPTY){
        data.lnOrder[2]=C_SPOT;
    }
}
void LineRankClear(void){
    data.lnOrder[0]=LINE_EMPTY;
    data.lnOrder[1]=LINE_EMPTY;
    data.lnOrder[2]=LINE_EMPTY;
    
    if((LineHold==1)||(LineHold==2)||(LineHold==4)){
        if(LineHolding[A_SPOT].read()==1){
            data.lnOrder[0] = A_SPOT;
        }
        else if(LineHolding[B_SPOT].read()==1){
            data.lnOrder[0] = B_SPOT;
        }
        else if(LineHolding[C_SPOT].read()==1){
            data.lnOrder[0] = C_SPOT;
        }
    }
}
//ball
uint8_t ReadBall(void){//1or0
    data.ball = !BallChecker;
    return (data.ball>0); 
}
void ReadGyro(void){
    //Data can be got by interrupt.
}
void ReadCmps(void){
    cmps_set.cmps = hmc.sample()/10.0;
}
void ValidPing(void){
    if(sys.UswFlag==0){
        sys.UswFlag=1;
    }
}
void ValidPing2(void){
    if(sys.UswFlag2==0){
        sys.UswFlag2=1;
    }
}
void ReadPing(void){
    uint16_t spi_data;
    //Ultra Sonic Wave
    spi_ss[1]=0;
    wait_us(200);
    
    spi_data = spi.write(0xABCD);
    
    wait_us(200);
    spi_ss[1]=1;
    
    data.ping[0] = (spi_data&0x00FF)>>0;
    data.ping[1] = (spi_data&0xFF00)>>8;
}
void ReadPing2(void){
    uint16_t spi_data;
    //Ultra Sonic Wave
    spi_ss[0]=0;
    wait_us(200);
    
    spi_data = spi.write(0xABCD);
    
    wait_us(200);
    spi_ss[0]=1;
    
    data.ping[2] = (spi_data&0x00FF)>>0;
    data.ping[3] = (spi_data&0xFF00)>>8;
}
void ValidIr(void){
    if(sys.IrFlag==0){
        sys.IrFlag=1;
    }
}
void ReadIr(void){
    uint16_t spi_data;
    
    //Ir
    spi_ss[3]=0;
    wait_us(200);
    
    spi_data = spi.write(0xABCD);
    
    wait_us(200);
    spi_ss[3]=1;
    /*
    //key/phaseL/phaseS/long/short/
    // 2/     3/     3/   4/    4/
    data.irKey                  = (spi_data&0xC000)>>14;//1100000000000000
    data.irValPhase[IR_LONG]    = (spi_data&0x3800)>>11;//0011100000000000
    data.irValPhase[IR_SHORT]   = (spi_data&0x0700)>>8;///0000011100000000
    data.irSpot[IR_LONG]        = (spi_data&0x00F0)>>4;///0000000011110000
    data.irSpot[IR_SHORT]       = (spi_data&0x000F)>>0;///0000000000001111
    */
    
    //key/phaseL/phaseS/diffL/position/
    // 2/     3/     3/    3/       5/
    data.irKey                  = (spi_data&0xC000)>>14;//1100000000000000
    data.irValPhase[IR_LONG]    = (spi_data&0x3800)>>11;//0011100000000000
    data.irValPhase[IR_SHORT]   = (spi_data&0x0700)>>8;///0000011100000000
    data.irDif[IR_LONG]         = (spi_data&0x00E0)>>5;///0000000011100000
    data.irPosition             = (spi_data&0x001F)>>0;///0000000000011111
    
    if(data.irKey!=0x2) data.irNotice=IR_NONE;
    
    
    if(data.irValPhase[IR_SHORT]>=DIS_7){
        if(data.irValPhase[IR_LONG]>=DIS_5){
            data.irNotice=IR_NONE;
        }
        else{
            if(data.irDif[IR_LONG]<=DIS_6){
                data.irNotice=IR_NONE;
            }
            else{
                data.irNotice=IR_FAR;
            }
        }
    }
    else{
        if(data.irValPhase[IR_SHORT]>=DIS_3){
            data.irNotice = IR_CLOSE;
        }
        else{
            data.irNotice = IR_CLOSER;
        }
    }
    
    /*if(data.irValPhase[IR_LONG]>=DIS_7){
        data.irNotice=IR_NONE;
    }
    else{
        if(data.irValPhase[IR_SHORT]>=DIS_7){
            data.irNotice=IR_FAR;
        }
        else{
            if(data.irValPhase[IR_LONG]>=DIS_4){
                data.irNotice = IR_CLOSE;
            }
            else{
                data.irNotice = IR_CLOSER;
            }
        }
    }*/
    /*
    if(data.irNotice == IR_NONE) data.irPosition=11;
    if(data.irNotice == IR_FAR) data.irPosition=data.irSpot[IR_LONG]-1;
    if(data.irNotice == IR_CLOSE) data.irPosition=data.irSpot[IR_SHORT]+7;
    if(data.irNotice == IR_CLOSER) data.irPosition=data.irSpot[IR_SHORT]+7;
    */
    //LED[1] = LED[0];
    //LED[0] = !LED[0];
}
void ReadInfo(void){
    
}