ロボカップのブロック大会2014で使用したプログラムです。 ロボットには、mbedを2台使ってI2C通信しています。 これはSlave側です。 ※独自規格を使用しています。
Dependencies: ACM1602NI Ping mbed-rtos mbed
RotarySW.h@0:b9cd980ee324, 2014-03-10 (annotated)
- Committer:
- denden
- Date:
- Mon Mar 10 07:58:40 2014 +0000
- Revision:
- 0:b9cd980ee324
????????????2014????????????? ???????mbed?2????I2C???????? ???Slave????; ; ??????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
denden | 0:b9cd980ee324 | 1 | // Slave |
denden | 0:b9cd980ee324 | 2 | |
denden | 0:b9cd980ee324 | 3 | |
denden | 0:b9cd980ee324 | 4 | |
denden | 0:b9cd980ee324 | 5 | // "0"攻撃モード |
denden | 0:b9cd980ee324 | 6 | void FW(void) { |
denden | 0:b9cd980ee324 | 7 | MBED_MASTER(); |
denden | 0:b9cd980ee324 | 8 | } |
denden | 0:b9cd980ee324 | 9 | |
denden | 0:b9cd980ee324 | 10 | // "1"防御モード |
denden | 0:b9cd980ee324 | 11 | void DF(void) { |
denden | 0:b9cd980ee324 | 12 | MBED_MASTER(); |
denden | 0:b9cd980ee324 | 13 | int count = 0; |
denden | 0:b9cd980ee324 | 14 | for(int i=0; i<8; i++) { |
denden | 0:b9cd980ee324 | 15 | count += (IR_data[1] % 2)?1:0; |
denden | 0:b9cd980ee324 | 16 | IR_data[1] = 2; |
denden | 0:b9cd980ee324 | 17 | } |
denden | 0:b9cd980ee324 | 18 | Angle_char[3] = 100.0 / 8.0 * count; |
denden | 0:b9cd980ee324 | 19 | } |
denden | 0:b9cd980ee324 | 20 | |
denden | 0:b9cd980ee324 | 21 | // "2"IRデバッグモード |
denden | 0:b9cd980ee324 | 22 | void DEBUG_IR(void) { |
denden | 0:b9cd980ee324 | 23 | int debug_mode = I2C_master.receive(); |
denden | 0:b9cd980ee324 | 24 | int j = I2C_avr.receive(); |
denden | 0:b9cd980ee324 | 25 | switch(debug_mode) { |
denden | 0:b9cd980ee324 | 26 | case I2CSlave::ReadAddressed: // データ送信要求 |
denden | 0:b9cd980ee324 | 27 | do val = I2C_master.write(IR_data, 2); while(val); |
denden | 0:b9cd980ee324 | 28 | break; |
denden | 0:b9cd980ee324 | 29 | // 基本的に使わない処理 |
denden | 0:b9cd980ee324 | 30 | case I2CSlave::WriteAddressed: // データ受信 |
denden | 0:b9cd980ee324 | 31 | break; |
denden | 0:b9cd980ee324 | 32 | case I2CSlave::WriteGeneral: |
denden | 0:b9cd980ee324 | 33 | break; |
denden | 0:b9cd980ee324 | 34 | } |
denden | 0:b9cd980ee324 | 35 | switch (j) { |
denden | 0:b9cd980ee324 | 36 | case I2CSlave::WriteAddressed: |
denden | 0:b9cd980ee324 | 37 | val = I2C_avr.read(IR_data, 2); // 0:near 1:long |
denden | 0:b9cd980ee324 | 38 | if(!val) led4=1; |
denden | 0:b9cd980ee324 | 39 | break; |
denden | 0:b9cd980ee324 | 40 | // 基本的に使わない処理 |
denden | 0:b9cd980ee324 | 41 | case I2CSlave::ReadAddressed: |
denden | 0:b9cd980ee324 | 42 | break; |
denden | 0:b9cd980ee324 | 43 | case I2CSlave::WriteGeneral: |
denden | 0:b9cd980ee324 | 44 | break; |
denden | 0:b9cd980ee324 | 45 | } |
denden | 0:b9cd980ee324 | 46 | } |
denden | 0:b9cd980ee324 | 47 | |
denden | 0:b9cd980ee324 | 48 | |
denden | 0:b9cd980ee324 | 49 | // "3"PINGデバッグモード |
denden | 0:b9cd980ee324 | 50 | void DEBUG_PING(void) { |
denden | 0:b9cd980ee324 | 51 | int debug_mode = I2C_master.receive(); |
denden | 0:b9cd980ee324 | 52 | switch(debug_mode) { |
denden | 0:b9cd980ee324 | 53 | case I2CSlave::ReadAddressed: // データ送信要求 |
denden | 0:b9cd980ee324 | 54 | PING_slots.wait(); |
denden | 0:b9cd980ee324 | 55 | val = I2C_master.write(Ping_data, 4); |
denden | 0:b9cd980ee324 | 56 | PING_slots.release(); |
denden | 0:b9cd980ee324 | 57 | break; |
denden | 0:b9cd980ee324 | 58 | // 基本的に使わない処理 |
denden | 0:b9cd980ee324 | 59 | case I2CSlave::WriteAddressed: // データ受信 |
denden | 0:b9cd980ee324 | 60 | break; |
denden | 0:b9cd980ee324 | 61 | case I2CSlave::WriteGeneral: |
denden | 0:b9cd980ee324 | 62 | break; |
denden | 0:b9cd980ee324 | 63 | } |
denden | 0:b9cd980ee324 | 64 | } |
denden | 0:b9cd980ee324 | 65 | |
denden | 0:b9cd980ee324 | 66 | // "4"ANGLEデバッグモード |
denden | 0:b9cd980ee324 | 67 | void DEBUG_ANGLE(void) { |
denden | 0:b9cd980ee324 | 68 | int debug_mode = I2C_master.receive(); |
denden | 0:b9cd980ee324 | 69 | switch(debug_mode) { |
denden | 0:b9cd980ee324 | 70 | // 基本的に使わない処理 |
denden | 0:b9cd980ee324 | 71 | case I2CSlave::ReadAddressed: // データ送信要求 |
denden | 0:b9cd980ee324 | 72 | break; |
denden | 0:b9cd980ee324 | 73 | case I2CSlave::WriteAddressed: // データ受信 |
denden | 0:b9cd980ee324 | 74 | break; |
denden | 0:b9cd980ee324 | 75 | case I2CSlave::WriteGeneral: |
denden | 0:b9cd980ee324 | 76 | break; |
denden | 0:b9cd980ee324 | 77 | } |
denden | 0:b9cd980ee324 | 78 | } |
denden | 0:b9cd980ee324 | 79 | |
denden | 0:b9cd980ee324 | 80 | // "5"KICKERデバッグモード |
denden | 0:b9cd980ee324 | 81 | void DEBUG_KICKER(void) { |
denden | 0:b9cd980ee324 | 82 | int debug_mode = I2C_master.receive(); |
denden | 0:b9cd980ee324 | 83 | switch(debug_mode) { |
denden | 0:b9cd980ee324 | 84 | // 基本的に使わない処理 |
denden | 0:b9cd980ee324 | 85 | case I2CSlave::ReadAddressed: // データ送信要求 |
denden | 0:b9cd980ee324 | 86 | break; |
denden | 0:b9cd980ee324 | 87 | case I2CSlave::WriteAddressed: // データ受信 |
denden | 0:b9cd980ee324 | 88 | break; |
denden | 0:b9cd980ee324 | 89 | case I2CSlave::WriteGeneral: |
denden | 0:b9cd980ee324 | 90 | break; |
denden | 0:b9cd980ee324 | 91 | } |
denden | 0:b9cd980ee324 | 92 | } |
denden | 0:b9cd980ee324 | 93 | |
denden | 0:b9cd980ee324 | 94 | // "6"MOTERデバッグモード |
denden | 0:b9cd980ee324 | 95 | void DEBUG_MOTER(void) { |
denden | 0:b9cd980ee324 | 96 | int debug_mode = I2C_master.receive(); |
denden | 0:b9cd980ee324 | 97 | switch(debug_mode) { |
denden | 0:b9cd980ee324 | 98 | // 基本的に使わない処理 |
denden | 0:b9cd980ee324 | 99 | case I2CSlave::ReadAddressed: // データ送信要求 |
denden | 0:b9cd980ee324 | 100 | break; |
denden | 0:b9cd980ee324 | 101 | case I2CSlave::WriteAddressed: // データ受信 |
denden | 0:b9cd980ee324 | 102 | break; |
denden | 0:b9cd980ee324 | 103 | case I2CSlave::WriteGeneral: |
denden | 0:b9cd980ee324 | 104 | break; |
denden | 0:b9cd980ee324 | 105 | } |
denden | 0:b9cd980ee324 | 106 | } |
denden | 0:b9cd980ee324 | 107 | |
denden | 0:b9cd980ee324 | 108 | // "7"LINEデバッグモード |
denden | 0:b9cd980ee324 | 109 | void DEBUG_LINE(void) { |
denden | 0:b9cd980ee324 | 110 | int debug_mode = I2C_master.receive(); |
denden | 0:b9cd980ee324 | 111 | switch(debug_mode) { |
denden | 0:b9cd980ee324 | 112 | // 基本的に使わない処理 |
denden | 0:b9cd980ee324 | 113 | case I2CSlave::ReadAddressed: // データ送信要求 |
denden | 0:b9cd980ee324 | 114 | break; |
denden | 0:b9cd980ee324 | 115 | case I2CSlave::WriteAddressed: // データ受信 |
denden | 0:b9cd980ee324 | 116 | break; |
denden | 0:b9cd980ee324 | 117 | case I2CSlave::WriteGeneral: |
denden | 0:b9cd980ee324 | 118 | break; |
denden | 0:b9cd980ee324 | 119 | } |
denden | 0:b9cd980ee324 | 120 | } |
denden | 0:b9cd980ee324 | 121 | |
denden | 0:b9cd980ee324 | 122 | |
denden | 0:b9cd980ee324 | 123 | |
denden | 0:b9cd980ee324 | 124 | void (*Debug_Mode[])(void) = {FW, DF, DEBUG_IR, DEBUG_PING, DEBUG_ANGLE, DEBUG_KICKER, DEBUG_MOTER, DEBUG_LINE}; |
denden | 0:b9cd980ee324 | 125 | |
denden | 0:b9cd980ee324 | 126 | |
denden | 0:b9cd980ee324 | 127 | |
denden | 0:b9cd980ee324 | 128 | |
denden | 0:b9cd980ee324 | 129 | |
denden | 0:b9cd980ee324 | 130 | |
denden | 0:b9cd980ee324 | 131 | |
denden | 0:b9cd980ee324 | 132 | |
denden | 0:b9cd980ee324 | 133 | |
denden | 0:b9cd980ee324 | 134 | |
denden | 0:b9cd980ee324 | 135 | |
denden | 0:b9cd980ee324 | 136 | |
denden | 0:b9cd980ee324 | 137 | |
denden | 0:b9cd980ee324 | 138 | |
denden | 0:b9cd980ee324 | 139 |