2015_robocon_bteam / Mbed 2 deprecated 2015robot_main

Dependencies:   PID QEI mbed

Fork of 2015robot_main by Naoto Deguchi

Committer:
unicore32
Date:
Wed Oct 07 09:03:55 2015 +0000
Revision:
67:658a54be9212
Parent:
59:9d66edf3e734
RS485?8bit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DeguNaoto 0:bd4719e15f7e 1 /***RS485 Communication.***/
DeguNaoto 18:526124eef0d1 2 #define RS485_TX p13
DeguNaoto 18:526124eef0d1 3 #define RS485_RX p14
DeguNaoto 0:bd4719e15f7e 4 Serial RS485(RS485_TX, RS485_RX);
DeguNaoto 26:8e6c736b6791 5 #define EnablePin p7
DeguNaoto 26:8e6c736b6791 6 DigitalOut Enable(EnablePin);
DeguNaoto 59:9d66edf3e734 7 inline void initializeRS485(){
DeguNaoto 59:9d66edf3e734 8 RS485.format(8,Serial::Even);
DeguNaoto 59:9d66edf3e734 9 }
unicore32 67:658a54be9212 10 /*
DeguNaoto 4:51d87d2b698c 11 inline void sendData(int address, int data5) {
DeguNaoto 4:51d87d2b698c 12 unsigned int data;
DeguNaoto 4:51d87d2b698c 13 if (data5 <= 31) {
DeguNaoto 4:51d87d2b698c 14 data = ((address << 5) | data5);
DeguNaoto 4:51d87d2b698c 15 RS485.putc(data);
DeguNaoto 4:51d87d2b698c 16 }
DeguNaoto 4:51d87d2b698c 17 }
unicore32 67:658a54be9212 18 */
unicore32 67:658a54be9212 19 inline void sendData(int address, unsigned int data8) {
unicore32 67:658a54be9212 20 int i;
unicore32 67:658a54be9212 21 unsigned int data;
unicore32 67:658a54be9212 22 if (data8 <= 15) {
unicore32 67:658a54be9212 23 data = (1 << 7) | (address << 4) | (data8 & 15);
unicore32 67:658a54be9212 24 RS485.putc(data);
unicore32 67:658a54be9212 25 }
unicore32 67:658a54be9212 26 else if (data8 <= 255) {
unicore32 67:658a54be9212 27 data = (i << 7) | (address << 4) | (data8 >> 4);
unicore32 67:658a54be9212 28 RS485.putc(data);
unicore32 67:658a54be9212 29 wait(0.0001);
unicore32 67:658a54be9212 30 data = (1 << 7) | (address << 4) | (data8 & 15);
unicore32 67:658a54be9212 31 RS485.putc(data);
unicore32 67:658a54be9212 32 }
unicore32 67:658a54be9212 33 }
DeguNaoto 0:bd4719e15f7e 34
DeguNaoto 57:3fbd487e055e 35 #ifdef IM920
DeguNaoto 44:315d5960f18c 36 /***IM920 Communication.***/
DeguNaoto 51:cb430192b28b 37 char rcvBUFF_IM920[40], rcvBUFF_SBDBT[40];
DeguNaoto 44:315d5960f18c 38 int rcvCOUNT_IM920 = 0, rcvCOUNT_SBDBT = 0;
DeguNaoto 44:315d5960f18c 39 int rcvFLAG = 0;
DeguNaoto 44:315d5960f18c 40 int sendFLAG = 0;
DeguNaoto 44:315d5960f18c 41 int deadCOUNT = 0;
DeguNaoto 51:cb430192b28b 42 int deadflag = 0;
DeguNaoto 44:315d5960f18c 43 int oldDATA;
DeguNaoto 44:315d5960f18c 44 unsigned int cm, a2, b, X, Y;
DeguNaoto 51:cb430192b28b 45 unsigned int sendDATA = 0;
DeguNaoto 44:315d5960f18c 46 int LED = 0;
DeguNaoto 51:cb430192b28b 47 unsigned long outDATA[4];
DeguNaoto 44:315d5960f18c 48
DeguNaoto 44:315d5960f18c 49 Serial IM920_USART(p9, p10);
DeguNaoto 51:cb430192b28b 50 Serial SBDBT_USART(p28, p27);
DeguNaoto 44:315d5960f18c 51 DigitalIn BUSY(p8);
DeguNaoto 44:315d5960f18c 52
DeguNaoto 44:315d5960f18c 53 Ticker DTimer;
DeguNaoto 44:315d5960f18c 54
DeguNaoto 44:315d5960f18c 55 void DEVICE_TX(int DATA, int DEVICE = 0) {
DeguNaoto 44:315d5960f18c 56 char sDATA[2];
DeguNaoto 44:315d5960f18c 57 if (DATA <= 15)
DeguNaoto 44:315d5960f18c 58 sprintf(sDATA, "0%X", DATA);
DeguNaoto 44:315d5960f18c 59 else
DeguNaoto 44:315d5960f18c 60 sprintf(sDATA, "%X", DATA);
DeguNaoto 44:315d5960f18c 61
DeguNaoto 44:315d5960f18c 62 if (DEVICE == 1) {
DeguNaoto 44:315d5960f18c 63 IM920_USART.printf("TXDA %s\r\n", sDATA);
DeguNaoto 44:315d5960f18c 64 }
DeguNaoto 44:315d5960f18c 65 else if (DEVICE == 2) {
DeguNaoto 44:315d5960f18c 66 SBDBT_USART.printf("00000000000%s\r\n", sDATA);
DeguNaoto 44:315d5960f18c 67 }
DeguNaoto 44:315d5960f18c 68 else {
DeguNaoto 44:315d5960f18c 69 IM920_USART.printf("TXDA %s\r\n", sDATA);
DeguNaoto 44:315d5960f18c 70 SBDBT_USART.printf("00000000000%s\r\n", sDATA);
DeguNaoto 44:315d5960f18c 71 }
DeguNaoto 44:315d5960f18c 72 }
DeguNaoto 44:315d5960f18c 73
DeguNaoto 51:cb430192b28b 74 int cvsendDATA(int Buzzer, int LED) {
DeguNaoto 44:315d5960f18c 75 if (Buzzer > 1)
DeguNaoto 44:315d5960f18c 76 Buzzer = 1;
DeguNaoto 44:315d5960f18c 77 else if (Buzzer < 0)
DeguNaoto 44:315d5960f18c 78 Buzzer = 0;
DeguNaoto 44:315d5960f18c 79 if (LED < 0)
DeguNaoto 44:315d5960f18c 80 LED = 0;
DeguNaoto 44:315d5960f18c 81 else if (LED >= 16)
DeguNaoto 44:315d5960f18c 82 LED = 15;
DeguNaoto 44:315d5960f18c 83 return (Buzzer << 6) | (LED << 2);
DeguNaoto 44:315d5960f18c 84 }
DeguNaoto 44:315d5960f18c 85
DeguNaoto 44:315d5960f18c 86 void cvrecvDATA(char *buffDATA, unsigned long *outputDATA) {
DeguNaoto 44:315d5960f18c 87 char s1[2], s2[2], s3[2], s4[2];
DeguNaoto 44:315d5960f18c 88 strncpy(s1, buffDATA+11, 2);
DeguNaoto 44:315d5960f18c 89 strncpy(s2, buffDATA+14, 2);
DeguNaoto 44:315d5960f18c 90 strncpy(s3, buffDATA+17, 2);
DeguNaoto 44:315d5960f18c 91 strncpy(s4, buffDATA+20, 2);
DeguNaoto 44:315d5960f18c 92 outputDATA[0] = strtoul(s1, (char **) NULL, 16);
DeguNaoto 44:315d5960f18c 93 outputDATA[1] = strtoul(s2, (char **) NULL, 16);
DeguNaoto 44:315d5960f18c 94 outputDATA[2] = strtoul(s3, (char **) NULL, 16);
DeguNaoto 44:315d5960f18c 95 outputDATA[3] = strtoul(s4, (char **) NULL, 16);
DeguNaoto 44:315d5960f18c 96 }
DeguNaoto 44:315d5960f18c 97
DeguNaoto 44:315d5960f18c 98 void cvrecvDATAsbdbt(char *buffDATA, unsigned long *outputDATA) {
DeguNaoto 44:315d5960f18c 99 char s1[2], s2[2];
DeguNaoto 44:315d5960f18c 100 strncpy(s1, buffDATA+5, 2);
DeguNaoto 44:315d5960f18c 101 strncpy(s2, buffDATA+7, 2);
DeguNaoto 44:315d5960f18c 102 outputDATA[0] = strtoul(s1, (char **) NULL, 16);
DeguNaoto 44:315d5960f18c 103 outputDATA[1] = strtoul(s2, (char **) NULL, 16);
DeguNaoto 44:315d5960f18c 104 }
DeguNaoto 44:315d5960f18c 105
DeguNaoto 44:315d5960f18c 106 void readDATA(unsigned long* outDATA) {
DeguNaoto 44:315d5960f18c 107 cm = (outDATA[0] & 128) >> 7;
DeguNaoto 44:315d5960f18c 108 a2 = (outDATA[0] & 64) >> 6;
DeguNaoto 44:315d5960f18c 109 X = (outDATA[0] & 56) >> 3;
DeguNaoto 44:315d5960f18c 110 Y = outDATA[0] & 7;
DeguNaoto 44:315d5960f18c 111 b = outDATA[1];
DeguNaoto 44:315d5960f18c 112 }
DeguNaoto 44:315d5960f18c 113
DeguNaoto 44:315d5960f18c 114 void SBDBT_RX() {
DeguNaoto 44:315d5960f18c 115 char rcvDATA;
DeguNaoto 44:315d5960f18c 116 rcvDATA = SBDBT_USART.getc();
DeguNaoto 44:315d5960f18c 117 rcvBUFF_SBDBT[rcvCOUNT_SBDBT] = rcvDATA;
DeguNaoto 44:315d5960f18c 118 rcvCOUNT_SBDBT++;
DeguNaoto 44:315d5960f18c 119 if (rcvDATA == 0x0A) {
DeguNaoto 44:315d5960f18c 120 rcvCOUNT_SBDBT = 0;
DeguNaoto 44:315d5960f18c 121 rcvFLAG = 2;
DeguNaoto 44:315d5960f18c 122 }
DeguNaoto 44:315d5960f18c 123 else if (rcvCOUNT_SBDBT >= 40) {
DeguNaoto 44:315d5960f18c 124 rcvCOUNT_SBDBT = 0;
DeguNaoto 44:315d5960f18c 125 memset(rcvBUFF_SBDBT, '\0', 40);
DeguNaoto 44:315d5960f18c 126 }
DeguNaoto 44:315d5960f18c 127 }
DeguNaoto 44:315d5960f18c 128
DeguNaoto 44:315d5960f18c 129 void IM920_RX() {
DeguNaoto 44:315d5960f18c 130 char rcvDATA;
DeguNaoto 44:315d5960f18c 131 rcvDATA = IM920_USART.getc();
DeguNaoto 44:315d5960f18c 132 rcvBUFF_IM920[rcvCOUNT_IM920] = rcvDATA;
DeguNaoto 44:315d5960f18c 133 rcvCOUNT_IM920++;
DeguNaoto 44:315d5960f18c 134 if (rcvDATA == 0x0A) {
DeguNaoto 44:315d5960f18c 135 rcvCOUNT_IM920 = 0;
DeguNaoto 44:315d5960f18c 136 rcvFLAG = 1;
DeguNaoto 44:315d5960f18c 137 }
DeguNaoto 44:315d5960f18c 138 else if (rcvCOUNT_IM920 >= 40) {
DeguNaoto 44:315d5960f18c 139 rcvCOUNT_IM920 = 0;
DeguNaoto 44:315d5960f18c 140 memset(rcvBUFF_IM920, '\0', 40);
DeguNaoto 44:315d5960f18c 141 }
DeguNaoto 44:315d5960f18c 142 }
DeguNaoto 44:315d5960f18c 143
DeguNaoto 44:315d5960f18c 144 void deadCheck() {
DeguNaoto 44:315d5960f18c 145 if (rcvFLAG == 0 && deadCOUNT >= 5) {
DeguNaoto 51:cb430192b28b 146 deadflag = 1;
DeguNaoto 44:315d5960f18c 147 deadCOUNT = 0;
DeguNaoto 44:315d5960f18c 148 }
DeguNaoto 44:315d5960f18c 149 else if (rcvFLAG == 0 && deadCOUNT >= 2) {
DeguNaoto 44:315d5960f18c 150 deadCOUNT++;
DeguNaoto 51:cb430192b28b 151 DEVICE_TX(sendDATA);
DeguNaoto 44:315d5960f18c 152 }
DeguNaoto 44:315d5960f18c 153 else if (rcvFLAG == 0) {
DeguNaoto 44:315d5960f18c 154 deadCOUNT++;
DeguNaoto 44:315d5960f18c 155 }
DeguNaoto 51:cb430192b28b 156 sendDATA = cvsendDATA(0, LED);
DeguNaoto 44:315d5960f18c 157 }
DeguNaoto 44:315d5960f18c 158
DeguNaoto 44:315d5960f18c 159 inline void initializeIM920(){
DeguNaoto 44:315d5960f18c 160 IM920_USART.baud(9600);
DeguNaoto 44:315d5960f18c 161 IM920_USART.format(8, Serial::None, 1);
DeguNaoto 44:315d5960f18c 162 IM920_USART.attach(IM920_RX, Serial::RxIrq);
DeguNaoto 44:315d5960f18c 163 SBDBT_USART.baud(9600);
DeguNaoto 44:315d5960f18c 164 SBDBT_USART.format(8, Serial::None, 1);
DeguNaoto 44:315d5960f18c 165 SBDBT_USART.attach(SBDBT_RX, Serial::RxIrq);
DeguNaoto 44:315d5960f18c 166 DTimer.attach(deadCheck, 0.3);
DeguNaoto 51:cb430192b28b 167 sendDATA = cvsendDATA(0, 0);
DeguNaoto 44:315d5960f18c 168 }
DeguNaoto 44:315d5960f18c 169
DeguNaoto 44:315d5960f18c 170 inline void readIM920(){
DeguNaoto 44:315d5960f18c 171 if (rcvFLAG == 1) {
DeguNaoto 44:315d5960f18c 172 if (strlen(rcvBUFF_IM920) > 8) {
DeguNaoto 44:315d5960f18c 173 cvrecvDATA(rcvBUFF_IM920, outDATA);
DeguNaoto 44:315d5960f18c 174 readDATA(outDATA);
DeguNaoto 44:315d5960f18c 175 deadCOUNT = 0;
DeguNaoto 51:cb430192b28b 176 deadflag = 0;
DeguNaoto 51:cb430192b28b 177 DEVICE_TX(sendDATA, 1);
DeguNaoto 44:315d5960f18c 178 }
DeguNaoto 44:315d5960f18c 179 memset(rcvBUFF_IM920, '\0', 40);
DeguNaoto 44:315d5960f18c 180 rcvFLAG = 0;
DeguNaoto 44:315d5960f18c 181 }
DeguNaoto 44:315d5960f18c 182 else if (rcvFLAG == 2) {
DeguNaoto 44:315d5960f18c 183 if (strlen(rcvBUFF_SBDBT) > 4) {
DeguNaoto 44:315d5960f18c 184 cvrecvDATAsbdbt(rcvBUFF_SBDBT, outDATA);
DeguNaoto 44:315d5960f18c 185 readDATA(outDATA);
DeguNaoto 44:315d5960f18c 186 deadCOUNT = 0;
DeguNaoto 51:cb430192b28b 187 deadflag = 0;
DeguNaoto 51:cb430192b28b 188 DEVICE_TX(sendDATA, 2);
DeguNaoto 44:315d5960f18c 189 }
DeguNaoto 44:315d5960f18c 190 memset(rcvBUFF_SBDBT, '\0', 40);
DeguNaoto 44:315d5960f18c 191 rcvFLAG = 0;
DeguNaoto 44:315d5960f18c 192 }
DeguNaoto 51:cb430192b28b 193 }
DeguNaoto 57:3fbd487e055e 194 #else
DeguNaoto 0:bd4719e15f7e 195 /***Get state ps3con.***/
DeguNaoto 57:3fbd487e055e 196 #define SBDBT_TX p28
DeguNaoto 18:526124eef0d1 197 #define SBDBT_RX p27
DeguNaoto 0:bd4719e15f7e 198 Serial SBDBT(SBDBT_TX, SBDBT_RX);
DeguNaoto 0:bd4719e15f7e 199 #define ps3_start 0x80
DeguNaoto 18:526124eef0d1 200 short toggle = 0;
DeguNaoto 18:526124eef0d1 201 short edge_circle = 0;
DeguNaoto 18:526124eef0d1 202 short edge_triangle = 0;
DeguNaoto 21:79b94cb922f0 203 short edge_square = 0;
DeguNaoto 18:526124eef0d1 204 short edge_r1 = 0;
DeguNaoto 18:526124eef0d1 205 short edge_l1 = 0;
DeguNaoto 57:3fbd487e055e 206 short edge_r2 = 0;
DeguNaoto 57:3fbd487e055e 207 short edge_l2 = 0;
DeguNaoto 18:526124eef0d1 208 short edge_l_up = 0;
DeguNaoto 18:526124eef0d1 209 short edge_l_down = 0;
DeguNaoto 18:526124eef0d1 210 short edge_r_up = 0;
DeguNaoto 18:526124eef0d1 211 short edge_r_down = 0;
DeguNaoto 18:526124eef0d1 212 short edge_right = 0;
DeguNaoto 18:526124eef0d1 213 short edge_left = 0;
DeguNaoto 18:526124eef0d1 214 short edge_up = 0;
DeguNaoto 18:526124eef0d1 215 short square = 0;
DeguNaoto 18:526124eef0d1 216 short triangle = 0;
DeguNaoto 18:526124eef0d1 217 short circle = 0;
DeguNaoto 18:526124eef0d1 218 short cross = 0;
DeguNaoto 18:526124eef0d1 219 short up = 0;
DeguNaoto 18:526124eef0d1 220 short down = 0;
DeguNaoto 18:526124eef0d1 221 short right = 0;
DeguNaoto 18:526124eef0d1 222 short left = 0;
DeguNaoto 18:526124eef0d1 223 short l1 = 0;
DeguNaoto 18:526124eef0d1 224 short l2 = 0;
DeguNaoto 18:526124eef0d1 225 short r1 = 0;
DeguNaoto 18:526124eef0d1 226 short r2 = 0;
DeguNaoto 18:526124eef0d1 227 signed int analog_lx = 0;
DeguNaoto 18:526124eef0d1 228 signed int analog_ly = 0;
DeguNaoto 18:526124eef0d1 229 signed int analog_rx = 0;
DeguNaoto 18:526124eef0d1 230 signed int analog_ry = 0;
DeguNaoto 18:526124eef0d1 231 int count = 0;
DeguNaoto 18:526124eef0d1 232 int sample = 0;
DeguNaoto 0:bd4719e15f7e 233 int ps3_data[7];
DeguNaoto 18:526124eef0d1 234 inline void data_clear();
DeguNaoto 18:526124eef0d1 235 inline void data_check();
DeguNaoto 18:526124eef0d1 236 inline void SBDBT_interrupt();
DeguNaoto 18:526124eef0d1 237 inline void initializeSBDBT();
DeguNaoto 18:526124eef0d1 238
DeguNaoto 2:cf8ca6742db9 239 inline void data_clear()
DeguNaoto 2:cf8ca6742db9 240 {
DeguNaoto 2:cf8ca6742db9 241 for(int i=0; i<7; i++) ps3_data[i]=0;
DeguNaoto 0:bd4719e15f7e 242 }
DeguNaoto 2:cf8ca6742db9 243 inline void data_check()
DeguNaoto 2:cf8ca6742db9 244 {
DeguNaoto 0:bd4719e15f7e 245 square=0,triangle=0,circle=0,cross=0,up=0,down=0,right=0,left=0,l1=0,l2=0,r1=0,r2=0;
DeguNaoto 0:bd4719e15f7e 246 analog_lx=0,analog_ly=0,analog_rx=0,analog_ry=0;
DeguNaoto 0:bd4719e15f7e 247 if((ps3_data[0]==0x00)&&(ps3_data[1]==0x01)) up=1;
DeguNaoto 0:bd4719e15f7e 248 else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x02)) down=1;
DeguNaoto 0:bd4719e15f7e 249 else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x04)) right=1;
DeguNaoto 0:bd4719e15f7e 250 else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x08)) left=1;
DeguNaoto 0:bd4719e15f7e 251 else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x10)) triangle=1;
DeguNaoto 0:bd4719e15f7e 252 else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x20)) cross=1;
DeguNaoto 0:bd4719e15f7e 253 else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x40)) circle=1;
DeguNaoto 0:bd4719e15f7e 254 else if((ps3_data[0]==0x01)&&(ps3_data[1]==0x00)) square=1;
DeguNaoto 0:bd4719e15f7e 255 else if((ps3_data[0]==0x02)&&(ps3_data[1]==0x00)) l1=1;
DeguNaoto 0:bd4719e15f7e 256 else if((ps3_data[0]==0x04)&&(ps3_data[1]==0x00)) l2=1;
DeguNaoto 0:bd4719e15f7e 257 else if((ps3_data[0]==0x08)&&(ps3_data[1]==0x00)) r1=1;
DeguNaoto 0:bd4719e15f7e 258 else if((ps3_data[0]==0x10)&&(ps3_data[1]==0x00)) r2=1;
DeguNaoto 8:1638e8c8ca93 259 analog_lx=64-(signed int)ps3_data[2];
DeguNaoto 8:1638e8c8ca93 260 analog_ly=64-(signed int)ps3_data[3];
DeguNaoto 8:1638e8c8ca93 261 analog_rx=64-(signed int)ps3_data[4];
DeguNaoto 8:1638e8c8ca93 262 analog_ry=64-(signed int)ps3_data[5];
DeguNaoto 4:51d87d2b698c 263 if(!circle) edge_circle=1;
DeguNaoto 4:51d87d2b698c 264 if(!triangle) edge_triangle=1;
DeguNaoto 4:51d87d2b698c 265 if(!r1) edge_r1=1;
DeguNaoto 4:51d87d2b698c 266 if(!l1) edge_l1=1;
DeguNaoto 57:3fbd487e055e 267 if(!r2) edge_r2=1;
DeguNaoto 57:3fbd487e055e 268 if(!l2) edge_l2=1;
DeguNaoto 25:e591b9fa5796 269 if(!right) edge_right=1;
DeguNaoto 25:e591b9fa5796 270 if(!left) edge_left=1;
DeguNaoto 25:e591b9fa5796 271 if(!up) edge_up=1;
DeguNaoto 25:e591b9fa5796 272 if(!square) edge_square=1;
DeguNaoto 0:bd4719e15f7e 273 }
DeguNaoto 0:bd4719e15f7e 274 ///interrupt SBDBT RX.
DeguNaoto 2:cf8ca6742db9 275 inline void SBDBT_interrupt()
DeguNaoto 2:cf8ca6742db9 276 {
DeguNaoto 0:bd4719e15f7e 277 sample=SBDBT.getc();
DeguNaoto 0:bd4719e15f7e 278 if(count==7) data_clear();
DeguNaoto 0:bd4719e15f7e 279 if(sample==ps3_start) count=0;
DeguNaoto 2:cf8ca6742db9 280 else {
DeguNaoto 0:bd4719e15f7e 281 ps3_data[count]=sample;
DeguNaoto 0:bd4719e15f7e 282 count++;
DeguNaoto 0:bd4719e15f7e 283 }
DeguNaoto 0:bd4719e15f7e 284 if(count==6) data_check();
DeguNaoto 0:bd4719e15f7e 285 }
DeguNaoto 2:cf8ca6742db9 286 inline void initializeSBDBT()
DeguNaoto 2:cf8ca6742db9 287 {
DeguNaoto 22:3996c3f41922 288 wait(0.1);
DeguNaoto 22:3996c3f41922 289 while(analog_ly==-64)
DeguNaoto 2:cf8ca6742db9 290 for(int i=0; i<7; i++) ps3_data[i]=0;
DeguNaoto 0:bd4719e15f7e 291 SBDBT.baud(2400);
DeguNaoto 0:bd4719e15f7e 292 SBDBT.format(8, Serial::None, 1);
DeguNaoto 0:bd4719e15f7e 293 SBDBT.attach(SBDBT_interrupt, Serial::RxIrq);
DeguNaoto 57:3fbd487e055e 294 }
DeguNaoto 57:3fbd487e055e 295 #endif