Exemple #1
0
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));
	}		
}


}	
Exemple #2
0
// 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;
}