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

Dependencies:   ACM1602NI Ping mbed-rtos mbed

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};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+