a

Dependencies:   ColorSensor1 TextLCD mbed

main.cpp

Committer:
yusuke_robocup
Date:
2013-10-09
Revision:
0:5b6831d50173

File content as of revision 0:5b6831d50173:

#include "mbed.h"
#include "ColorSensor.h"
#include "TextLCD.h"

#include "main.h"


void tic_sensor()
{

    colorUpdate(1);
    //pc.printf("R:%d G:%d B:%d\n", redp[0], greenp[0], bluep[0]);
    /*lcd.cls();
    lcd.locate(0,0);
    lcd.printf("R:%d G:%d B:%d\n", redp[0], greenp[0], bluep[0]);
    */
}



////////////////////////////////////////カラーセンサの////////////////////////////////////////
////////////////////////////////////////補正プログラム////////////////////////////////////////
void rivisedate()
{
    unsigned long red = 0,green = 0,blue =0;
    static unsigned R[COLOR_NUM], G[COLOR_NUM], B[COLOR_NUM];
    
    //最初の20回だけ平均を取る
    for (int i=0;i<=20;i++){
         color0.getRGB(R[0],G[0],B[0]);
         red       += R[0] ;
         green     += G[0] ;
         blue      += B[0] ;
         //pc.printf(" %d  %d\n",ptm(sum),sum);
    }
    
    rir = (double)green/ red ;
    rib = (double)green/ blue ;
}

void colorUpdate(uint8_t mode)
{
    double colorSum[COLOR_NUM];
    unsigned R[COLOR_NUM], G[COLOR_NUM], B[COLOR_NUM];


    for (int i=0; i<COLOR_NUM; i++){
        R[i] = 0;
        G[i] = 0;
        B[i] = 0;
        redp[i]   = 0;
        greenp[i] = 0;
        bluep[i]  = 0;
    }
    
    //カラーセンサの切り替え    
    if(mode == 1){
        color0.getRGB(R[0],G[0],B[0]);
        color1.getRGB(R[1],G[1],B[1]);
        color2.getRGB(R[2],G[2],B[2]);
    }else{
        color3.getRGB(R[3],G[3],B[3]);
        color4.getRGB(R[4],G[4],B[4]);
        color5.getRGB(R[5],G[5],B[5]);
    }
    
    /*for (int i=0; i<COLOR_NUM; i++){
        colorSum[i] = R[i]*rir + G[i] + B[i]*rib ;
        redp[i]   = R[i]* rir * 100 / colorSum[i];
        greenp[i] = G[i]      * 100 / colorSum[i];
        bluep[i]  = B[i]* rib * 100 / colorSum[i];
    }*/ 
 
    for (int i=0; i<COLOR_NUM; i++){
        colorSum[i] = R[i]*0.65 + G[i] + B[i] *1.3;
        redp[i]   = R[i]*0.65 * 100 / colorSum[i];
        greenp[i] = G[i]      * 100 / colorSum[i];
        bluep[i]  = B[i]*1.3 * 100 / colorSum[i];
    }
}

////////////////////////////////////////ジャンププログラム////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
uint8_t jumpcondition()
{
    uint8_t threshold = 0, t[COLOR_NUM] = {0};
    
    //青から赤に0.5秒以内に反応したらジャンプ
    for(int i=0; i<COLOR_NUM; i++){
        if(bluep[i] >= B_THR){
            color_t[i].reset();
            color_t[i].start();
            t[i] = 0;
        }else if(redp[i] >= R_THR){
            t[i] = color_t[i].read_ms();
        }else{
            t[i] = 0;
        }
 
        if((t[i] <= 500) && (t[i] != 0)){
            threshold++;
        }
    }
    
    return threshold;
}
/*
void jumping(uint8_t threshold)
{
    //超音波でジャンプのタイミング合わせる
    if(threshold >= 1){
            jump_t.reset();
            jump_t.start();
            while(ultrasonicVal[0] < 1700){
                led[0] = 1; led[1] = 1; led[2] = 0; led[3] = 0;
                air[0] = 1;  air[1] = 0;
                
                if(jump_t.read_ms() > 1000)break;
            }
            led[0] = 0; led[1] = 0; led[2] = 1; led[3] = 1;
            air[0] = 0;  air[1] = 1;
            wait(0.5);
    }else{
            led[0] = 0; led[1] = 0; led[2] = 0; led[3] = 0;
    }
}*/

uint8_t robostop()
{
    if(bluep[1] >= B_THR){
        return 1;
    }else{
        return 0;
    }
}

#define SEND_DATA_NUM       7
#define RECEIVE_DATA_NUM    7

#define KEYCODE             120

Serial device(p28,p27);

static uint8_t SendData0[SEND_DATA_NUM];

void dev_tx()
{
    static uint8_t count = 0;
    
    SendData0[0] = KEYCODE;

    device.putc(SendData0[count]);
     
    count++;
    
    if(count > SEND_DATA_NUM){
        count = 0;
    }
    
    led[4] = 1;
}


int main() {
    //init

    device.baud(9600);
    device.printf("START");
    device.attach(&dev_tx,Serial::TxIrq);

    //rivisedate();
    wait(3);
    
    
        
    //air[0] = 0; air[1] = 1;    

    interrupt0.attach(&tic_sensor, 0.1/*sec*/);//0.04sec以上じゃないとmain動かない
    
    //uint8_t button, state=0;
    
    //init end

    while(1) {
        SendData0[1] = jumpcondition();    
        
        pc.printf("R:%d G:%d B:%d\n", redp[0], greenp[0], bluep[0]);
        if(jumpcondition()>=1){
            led[0] = 1; led[1] = 1; led[2] = 1; led[3] = 1;
        }else{
            led[0] = 0; led[1] = 0; led[2] = 0; led[3] = 0;
        }
    }
}