/*タグの座標は十進or16進?*/ /*タグの座標は1からor0から?*/ /*交互にやる場合、autoやrepeatは難しい*/ /*RFIDNUM仕様 … 0:NONE 1:RIGHT 2:LEFT*/ /* 書き込みデータ格納用バッファ */ static char data_write[65] = "V720"; /* 読み出しデータ格納用バッファ */ static char data_read[65] = ""; static char main_home_data[5] = " "; static char sub_home_data[5] = ""; static unsigned char RFID_CROSS_MODE = 0; static unsigned char RUN_RFID_NUM = 0; static unsigned char NEXT_RFID_NUM = 0; static unsigned char LAST_RFID_X = -1; static unsigned char LAST_RFID_Y = -1; /*ビン位置格納。自分の位置から時計回りに0,1,2,3の順で割り振られる*/ static unsigned char BIN_NUMBER = -1; static unsigned char state_RFID = 0; /* 読み出し中データ種類 */ enum RFID_read {HOME, BIN, WRITE, NONE}; static enum RFID_read RFID_READING = NONE; /*タイマで一定間隔で繰り返す関数*/ void loop_RFID(void){ /*RFID動作更新処理*/ if(NEXT_RFID_NUM == 0){ /*0:NONE*/ } else{   if(NEXT_RFID_NUM != RUN_RFID_NUM){ stop_RFID();/*実行中のRFIDを停止する*/ RFID_switch(NEXT_RFID_NUM); if(RFID_test() == 0 ){ /*成功*/ } else{ /*失敗*/ } } } /*ここにコマンドを記述*/ if(RFID_SEND == 1){ RFID_SEND = 0; switch(RFID_read){ case BIN: case HOME: ecode_transmit = v720s_putcmd_read(V720S_MODE_SA,V720S_DATA_POS_HB, 0); break; case WRITE: ecode_transmit = v720s_putcmd_write(V720S_MODE_SR,V720S_DATA_OT,data_write); default: } } /*以上、RFID動作更新処理*/ /* レスポンス受信 */ if (v720s_res_received == 1) { /* 受信データをメモリに格納 */ printf("v720s_getdata(data_read)...\n"); ecode_receive = v720s_getdata(data_read); /* 受信データの表示・解釈 */ if (ecode_receive == 0){ /*交互モード判定*/ if(RFID_CROSS_MODE == 1){ if(RUN_RFID_NUM == 1) NEXT_RFID_NUM = 2; else NEXT_RFID_NUM = 1; RFID_SEND = 1; } switch(RFID_READING){ case HOME: case BIN: /*最初の文字が0か1だったら座標データだと判定*/ if(data_read[0]=='0' || data_read[1]=='1'){ RFID_GET_DIRHB(); } break; case WRITE: RFID_DISP(); break; } } else{ /*レシーブエラー発生 printf("return %d\n\n", ecode_receive); */ } } } void RFID_DISP(void){ /*ディスプレイを行います。未実装*/ } void RFID_GET_DIRHB(void){ int x,y,i; GET_XY(&x,&y); if(RFID_READING == HOME){ RFID_READING = NONE; RFID_STRCOPY(main_home_data , (data_read + 4) , 4); stop_RFID(); state_RFID = 1; } else if(RFID_READING == BIN){ RFID_READING = NONE; for(i=0;i<4;i++){ if(RFID_STRCHECK( main_home_data , (data_read + 4*(i+1) ) , 4 ) == 1){ BIN_NUMBER=i; } } stop_RFID(); state_RFID = 2; } else{ /*error*/ } LAST_RFID_X = x; LAST_RFID_Y = y; } void GET_XY(int *x,int *y){ *x = (data_read[0]+0)*10+(data_read[1]+0); *y = (data_read[2]+0)*10+(data_read[3]+0); } /*文字コピー関数*/ void RFID_STRCOPY(char *ca,char *cb,int num){ int i; for(i=0;iRFID_INIT_RETRY_COUNT) break; } while (ecode_init != 0); return ecode_init; }