ロボカップのブロック大会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};