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

Dependencies:   ACM1602NI Ping mbed-rtos mbed

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?

UserRevisionLine numberNew 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