ロボカップのブロック大会2014で使用したプログラムです。 ロボットには、mbedを2台使ってI2C通信しています。 これはSlave側です。 ※独自規格を使用しています。
Dependencies: ACM1602NI Ping mbed-rtos mbed
Diff: RotarySW.h
- Revision:
- 0:b9cd980ee324
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RotarySW.h Mon Mar 10 07:58:40 2014 +0000 @@ -0,0 +1,139 @@ +// 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}; + + + + + + + + + + + + + + +