test

Dependencies:   PID USBDevice mbed

main.cpp

Committer:
NT32
Date:
2014-09-12
Revision:
0:3115bcc751cb

File content as of revision 0:3115bcc751cb:

#include "mbed.h"
#include "USBSerial.h"
#include "PID.h"

#define WHITE 0.6

Ticker      tick;

DigitalOut  airdiode(P1_27);
AnalogIn    aphotoref(P0_22);
DigitalOut  birdiode(P1_20);
AnalogIn    bphotoref(P0_11);
DigitalOut  cirdiode(P1_26);
AnalogIn    cphotoref(P0_12);
DigitalOut  dirdiode(P1_21);
AnalogIn    dphotoref(P0_13);
DigitalOut  eirdiode(P0_22);
AnalogIn    ephotoref(P0_14);

DigitalOut  myled(P1_28);
DigitalIn   sw(P0_1);

USBSerial   vcom;

void systeminit(void);

float   asens, bsens, csens, dsens, esens;


void flip(){
    static uint8_t cycle;
    static float asenson, asensoff, bsenson, bsensoff, csenson, csensoff, dsenson, dsensoff, esenson, esensoff;
    switch(cycle){
        case 0:
            asensoff = aphotoref.read();
            bsensoff = bphotoref.read();
            csensoff = cphotoref.read();
            dsensoff = dphotoref.read();
            esensoff = ephotoref.read();
//            airdiode = 1;
            cycle++;
            break;
        case 1:
            asenson = aphotoref.read();
//            airdiode = 0;
//            birdiode = 1;
            cycle++;
            break;
        case 2:
            bsenson = bphotoref.read();
//            birdiode = 0;
//            cirdiode = 1;
            cycle++;
            break;
        case 3:
            csenson = cphotoref.read();
//            cirdiode = 0;
//            dirdiode = 1;
            cycle++;
            break;
        case 4:
            dsenson = dphotoref.read();
//            dirdiode = 0;
//            eirdiode = 1;
            cycle++;
            break;
        case 5:
            esenson = ephotoref.read();
//            eirdiode = 0;
            cycle++;
            break;
        case 6:
/*            asens = (asenson - asensoff) * 1.4;
            bsens = (bsenson - bsensoff) * 0.95;
            csens = csenson - csensoff;
            dsens = dsenson - dsensoff;
            esens = esenson - esensoff;
*/
            asens = (asenson) * 1.4;
            bsens = (bsenson) * 0.95;
            csens = csenson;
            dsens = dsenson;
            esens = esenson;
            cycle = 0;
            break;
        default:
            cycle = 0;
            break;
    }
    myled = !myled;
}

int main(){  
    float position = 0, gposition = 0;     //細かい分け方と全体の位置
    uint8_t lineblock = 0;  //大雑把な分け方
    systeminit();
    while(1){
        vcom.printf("\033[%d;%dH" ,0,0);
        vcom.printf("%7.6f\n", asens);
        vcom.printf("%7.6f\n", bsens);
        vcom.printf("%7.6f\n", csens);
        vcom.printf("%7.6f\n", dsens);
        vcom.printf("position = %7.6f\n", position);
        vcom.printf("lineblock = %d\n", lineblock);
        vcom.printf("gposition = %8.6f\n", gposition);

        if((asens < WHITE) && (bsens > WHITE)){
            /*一番 左*/
            position = asens - bsens;
            lineblock = 0;
        }else if((asens < WHITE) && (bsens < WHITE)){
            /*結構 左*/
            position = asens - bsens;
            lineblock = 1;
        }else if((bsens < WHITE) && (csens > WHITE)){
            /*ちょっと左*/
            position = bsens - csens;
            lineblock = 2;
        }else if((bsens < WHITE) && (csens < WHITE)){
            /*真ん中*/
            position = bsens - csens;
            lineblock = 3;
        }else if((csens < WHITE) && (dsens > WHITE)){
            /*ちょっと右*/
            position = bsens - csens;
            lineblock = 4;
        }else if((csens < WHITE) && (dsens < WHITE)){
            /*結構右*/
            position = csens - dsens;
            lineblock = 5;
        }else if((csens > WHITE) && (dsens < WHITE)){
            /*一番 右*/
            position = csens - dsens;
            lineblock = 6;
        }
        gposition = (position + 0.6) * 14;      //値1につき12mm
        if(lineblock < 2){
            /*左 16.8mm*/
        }else if(lineblock < 5){
            /*真ん中 16.8mm*/
            gposition += 16.8;
        }else if(lineblock < 7){
            /*右 16.8mm*/
            gposition += 33.6;
        }
        wait(0.012);
    }
}

void systeminit(void){
    sw.mode(PullUp);
    tick.attach(&flip, 0.005);
    airdiode = 1;
    birdiode = 1;
    cirdiode = 1;
    dirdiode = 1;
    wait(0.3);
}