int main(int argc, char **argv){ struct sensor_desc *input; struct sensor *s1; struct deviceInput *dev; input = (struct sensor_desc *)malloc(sizeof(struct sensor_desc)); s1 = (struct sensor*)malloc(sizeof(struct sensor)); dev = (struct deviceInput*)malloc(sizeof(struct deviceInput)); init(argv,dev); input->out = dev->output; input->in = dev->input; input->name_in = dev->inputName; input->name_out = dev->outputName; readsensor(input,s1); printstruct(s1,sizeof(struct sensor)); while(0 == 0){ //printf("%d\n",(int)time(NULL) - (int)s1->curtime ); if((time(NULL) - s1->curtime) == 5){ readsensor(input,s1); printstruct(s1,sizeof(struct sensor)); } } }
// report sensor value when change was detected static void sensorfunc (osjob_t* j) { // read sensor u2_t val = readsensor(); debug_val("val = ", val); // prepare and schedule data for transmission LMIC.frame[0] = val << 8; LMIC.frame[1] = val; LMIC_setTxData2(1, LMIC.frame, 2, 0); // (port 1, 2 bytes, unconfirmed) }
main(){ int potential[FIELDY][FIELDX];//ポテンシャル値は最悪の場合(うずまき迷路が最悪),FIELDY*FIELDXの値を保持する必要がある.2byteの変数をつかったほうがよい. int nowmaze[FIELDY][FIELDX];//マウスが覚えている迷路情報 int i,t;//for文などで使う汎用変数 int command;//0:1マス進む 1:左90度ターンしてから1マス進む,2:右90度ターンしてから1マス進む,3:180度ターンしてから1マス進む int todirec;//0:北のマスへ進む,1:東のマスへ進む,2:南のマスに進む,3:西のマスに進む int mousex,mousey;//マウスの現在位置,左上のマスをmousex=0,mousey=0とする int moused;//マウスの現在の方向,北向きを0,東向きを1,南向きを2,西向きを3とする. ReadMaze("maze.dat");//迷路の真の情報を保持する //初期化:ロボットは最初北向きで左下にいる mousex=0; mousey=FIELDX-1; moused=0; //初期化:最初ロボットは迷路情報を何も知らない for(i = 0;i < FIELDY;i++) for(t = 0;t < FIELDX;t++) nowmaze[i][t]=0x00;//16進法表示で0を意味する while(!(mousex==7 && mousey==FIELDY-8)){//足立法ループ:マウスがゴールに到着するまで無限ループを行う printmaze(mousex,mousey,moused,nowmaze);//現在状態をターミナル(コマンドプロンプト)に表示 getchar();//キーボードから入力があるまで待つ readsensor(mousex,mousey,moused,nowmaze);//センサー値を読んで迷路情報を更新する関数(実機に実装する場合はこの関数を書き換えてください makepotential(mousex, mousey, 7, FIELDY-8,potential,nowmaze);//更新された迷路情報を用いてポテンシャル値を計算 todirec=decidetodirec(mousex,mousey,potential,nowmaze);//四方のマスの中で一番値が小さいものを探す(0:北,1:東,2:南,3:西) command=decidecommand(todirec,moused);//指定したマスに動くためのコマンドを決定(指定されたマスに進むには,どの向きに回転すればいいか?) switch(command){//指定したコマンドの通り動く case 0:break;//ターンしない case 1:moused+=3;moused%=4;/*マウスをその場左90度ターンする関数*/break; case 2:moused+=1;moused%=4;/*マウスをその場右90度ターンする関数*/break; case 3:moused+=2;moused%=4;/*マウスをその場180度ターンする関数*/break; } switch(moused){//1マス進む case 0:mousey--;/*マウスをその場から1マス進ませる関数*/break;//マウスが現在北向きの場合 case 1:mousex++;/*マウスをその場から1マス進ませる関数*/break;//マウスが現在東向きの場合 case 2:mousey++;/*マウスをその場から1マス進ませる関数*/break;//マウスが現在南向きの場合 case 3:mousex--;/*マウスをその場から1マス進ませる関数*/break;//マウスが現在西向きの場合 } } puts("マウスがゴールにつきました."); return 0; }