ロボカップのブロック大会2014で使用したプログラムです。 ロボットには、mbedを2台使ってI2C通信しています。 これはSlave側です。 ※独自規格を使用しています。

Dependencies:   ACM1602NI Ping mbed-rtos mbed

RotarySW.h

Committer:
denden
Date:
2014-03-10
Revision:
0:b9cd980ee324

File content as of revision 0:b9cd980ee324:

// Slave



// "0"攻撃モード
void FW(void) {
    MBED_MASTER();
}

// "1"防御モード
void DF(void) {
    MBED_MASTER();
    int count = 0;
    for(int i=0; i<8; i++) {
        count += (IR_data[1] % 2)?1:0;
        IR_data[1] = 2;
    }
    Angle_char[3] = 100.0 / 8.0 * count;
}

// "2"IRデバッグモード
void DEBUG_IR(void) {
    int debug_mode = I2C_master.receive();
    int j = I2C_avr.receive();
    switch(debug_mode) {
        case I2CSlave::ReadAddressed:   // データ送信要求
            do val = I2C_master.write(IR_data, 2); while(val);
            break;
        // 基本的に使わない処理
            case I2CSlave::WriteAddressed:  // データ受信
                break;
            case I2CSlave::WriteGeneral:
                break;
    }
    switch (j) {
        case I2CSlave::WriteAddressed:
            val = I2C_avr.read(IR_data, 2);     // 0:near  1:long
            if(!val) led4=1;
            break;
        // 基本的に使わない処理
            case I2CSlave::ReadAddressed:
                break;
            case I2CSlave::WriteGeneral:
                break;
    }
}


// "3"PINGデバッグモード
void DEBUG_PING(void) {
    int debug_mode = I2C_master.receive();
    switch(debug_mode) {
        case I2CSlave::ReadAddressed:   // データ送信要求
            PING_slots.wait();
                val = I2C_master.write(Ping_data, 4);
            PING_slots.release();
            break;
        // 基本的に使わない処理
            case I2CSlave::WriteAddressed:  // データ受信
                break;
            case I2CSlave::WriteGeneral:
                break;
    }
}

// "4"ANGLEデバッグモード
void DEBUG_ANGLE(void) {
    int debug_mode = I2C_master.receive();
    switch(debug_mode) {
        // 基本的に使わない処理
            case I2CSlave::ReadAddressed:   // データ送信要求
                break;
            case I2CSlave::WriteAddressed:  // データ受信
                break;
            case I2CSlave::WriteGeneral:
                break;
    }
}

// "5"KICKERデバッグモード
void DEBUG_KICKER(void) {
    int debug_mode = I2C_master.receive();
    switch(debug_mode) {
        // 基本的に使わない処理
            case I2CSlave::ReadAddressed:   // データ送信要求
                break;
            case I2CSlave::WriteAddressed:  // データ受信
                break;
            case I2CSlave::WriteGeneral:
                break;
    }
}

// "6"MOTERデバッグモード
void DEBUG_MOTER(void) {
    int debug_mode = I2C_master.receive();
    switch(debug_mode) {
        // 基本的に使わない処理
            case I2CSlave::ReadAddressed:   // データ送信要求
                break;
            case I2CSlave::WriteAddressed:  // データ受信
                break;
            case I2CSlave::WriteGeneral:
                break;
    }
}

// "7"LINEデバッグモード
void DEBUG_LINE(void) {
    int debug_mode = I2C_master.receive();
    switch(debug_mode) {
        // 基本的に使わない処理
            case I2CSlave::ReadAddressed:   // データ送信要求
                break;
            case I2CSlave::WriteAddressed:  // データ受信
                break;
            case I2CSlave::WriteGeneral:
                break;
    }
}



void (*Debug_Mode[])(void) = {FW, DF, DEBUG_IR, DEBUG_PING, DEBUG_ANGLE, DEBUG_KICKER, DEBUG_MOTER, DEBUG_LINE};