2箇所以上交差点のある周回コース(黒い線)をA0版の画用紙上描き、その自作のコースを3周する
ロボットを作成せよ。ただし、速さと正確さを追求すること。
交差点で優先側を走っていない場合には一時停止し、もう一台のロボットが優先道路上にある場
合には行き過ぎるのを待つこと。
前方を進むもう一台のロボットに追いついて接触した時、以下のいずれかの動作をさせること
(重複しないようにひとり一つ選ぶ)
#define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define So 784 task music1(){//タッチセンサ反応中になる音楽 while(1){ PlayTone(Do,20);Wait(20); PlayTone(Re,20);Wait(20); PlayTone(Mi,20);Wait(20); PlayTone(Re,20);Wait(20); PlayTone(Do,20);Wait(40); PlayTone(Do,20);Wait(20); PlayTone(Re,20);Wait(20); PlayTone(Mi,20);Wait(20); PlayTone(Re,20);Wait(20); PlayTone(Do,20);Wait(20); PlayTone(Re,20);Wait(20); } } task music2(){//タッチセンサが反応してないときになる音楽 while(1){ PlayTone(Mi,25);Wait(30); PlayTone(Re,5);Wait(10); PlayTone(Do,15);Wait(20); PlayTone(Re,15);Wait(20); PlayTone(Mi,15);Wait(20); PlayTone(Mi,15);Wait(20); PlayTone(Mi,35);Wait(40); PlayTone(Re,15);Wait(20); PlayTone(Re,15);Wait(20); PlayTone(Re,35);Wait(20); PlayTone(Mi,15);Wait(20); PlayTone(So,15);Wait(20); PlayTone(So,35);Wait(40); PlayTone(Mi,25);Wait(30); PlayTone(Re,5);Wait(10); PlayTone(Do,15);Wait(20); PlayTone(Re,15);Wait(20); PlayTone(Mi,15);Wait(20); PlayTone(Mi,15);Wait(20); PlayTone(Mi,35);Wait(40); PlayTone(Re,15);Wait(20); PlayTone(Re,15);Wait(20); PlayTone(Mi,25);Wait(30); PlayTone(Re,5);Wait(10); PlayTone(Do,55);Wait(60); Wait(20); } } task main (){ int i=0; SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); ClearTimer(0); start music2; while(Timer(0)<=1000){ if(SENSOR_2 == 1){// タッチセンサが反応した場合 stop music2; start music1; Off(OUT_A+OUT_C ); //3秒停止 Wait(300); i=0; stop music1; start music2; } else { // 2 タッチセンサが反応しない場合 if(SENSOR_1 >40){ // 光センサ1が白と判断 if(SENSOR_3 > 40){ //光センサ1、3共に白と判断した場合 if(0==i){ OnFwd(OUT_A+OUT_C); Wait(30); Off(OUT_A+OUT_C); i++; PlaySound(SOUND_CLICK); } if(1==i){ OnFwd(OUT_A+OUT_C); Wait(10); Off(OUT_A+OUT_C); i++; PlaySound(SOUND_CLICK); } if(2<=i){ while(true){//黒線を発見できない場合、黒線を発見するまで回転 OnFwd(OUT_A); OnRev(OUT_C); Wait(1); if(SENSOR_1<40||SENSOR_3<40){ i=0; break; } } } } else { //光センサ1白、3黒の場合 OnFwd(OUT_A); //進行方向左に回転 Off(OUT_C); until(SENSOR_3 > 40); i=0; } } else { //光センサ1が黒のとき if(SENSOR_3 > 40){ //光センサ1黒、3白の場合 Off(OUT_A); //進行方向右に回転 OnFwd(OUT_C); until(SENSOR_1 > 40); i=0; } else{ // 光センサ1、3ともに黒の場合 OnFwd(OUT_A+OUT_C); //直進 i=0; } } }// 2 No Touch }//while stop music2; Off(OUT_A+OUT_C); }
task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); int i=0; while(true){ if(SENSOR_2 == 1){//タッチセンサが反応した場合 Off(OUT_A+OUT_C); Wait(100); repeat(2){//360度回転する命令 OnFwd(OUT_A); OnRev(OUT_C); Wait(140); } i=0; } else{ if(SENSOR_1 > 40){ //光センサ1が白と判断 if(SENSOR_3 > 40){ //光センサ1、3ともに白と判断した場合 if(0==i){ Off(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A+OUT_C); Wait(30); i++; } if(1==i){ Off(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A+OUT_C); Wait(30); i++; } if(2<=i){//二回進んでも線が発見できない場合は回転して線を探せ while(true){ OnFwd(OUT_A); OnRev(OUT_C); Wait(1); if(SENSOR_1<40||SENSOR_3<40){ i=0; break; } } } } else{ //光センサ1白、光センサ3黒と判断した場合 OnFwd(OUT_A); //進行方向左に回転 Off(OUT_C); until(SENSOR_3 > 40); i=0; } } else{ //光センサ1が黒を判断 if(SENSOR_3 > 40){ //光センサ1黒、光センサ3白と判断した場合 OnFwd(OUT_C); //進行方向右に回転 Off(OUT_A); until(SENSOR_1 > 40); i=0; } else{ //光センサ1、3ともに黒と判断した場合 OnFwd(OUT_A+OUT_C); //直進 i=0; } } } } }
#define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define So 784 task music1(){ //タッチセンサが反応しているときの音楽 while(1){ PlayTone(Do,20);Wait(20); PlayTone(Re,20);Wait(20); PlayTone(Mi,20);Wait(20); PlayTone(Re,20);Wait(20); PlayTone(Do,20);Wait(40); PlayTone(Do,20);Wait(20); PlayTone(Re,20);Wait(20); PlayTone(Mi,20);Wait(20); PlayTone(Re,20);Wait(20); PlayTone(Do,20);Wait(20); PlayTone(Re,20);Wait(20); } } task music2(){ //タッチセンサが反応してないときになる音楽 while(1){ PlayTone(Mi,25);Wait(30); PlayTone(Re,5);Wait(10); PlayTone(Do,15);Wait(20); PlayTone(Re,15);Wait(20); PlayTone(Mi,15);Wait(20); PlayTone(Mi,15);Wait(20); PlayTone(Mi,35);Wait(40); PlayTone(Re,15);Wait(20); PlayTone(Re,15);Wait(20); PlayTone(Re,35);Wait(20); PlayTone(Mi,15);Wait(20); PlayTone(So,15);Wait(20); PlayTone(So,35);Wait(40); PlayTone(Mi,25);Wait(30); PlayTone(Re,5);Wait(10); PlayTone(Do,15);Wait(20); PlayTone(Re,15);Wait(20); PlayTone(Mi,15);Wait(20); PlayTone(Mi,15);Wait(20); PlayTone(Mi,35);Wait(40); PlayTone(Re,15);Wait(20); PlayTone(Re,15);Wait(20); PlayTone(Mi,25);Wait(30); PlayTone(Re,5);Wait(10); PlayTone(Do,55);Wait(60); Wait(20); } } task main (){ int i=0,n=0; SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); ClearTimer(0); start music2; while(Timer(0)<=1000){ if(SENSOR_2 == 1){// タッチセンサが反応したときのプログラム stop music2; start music1; Off(OUT_A+OUT_C ); //3秒停止 Wait(300); i=0; stop music1; start music2; } else { // タッチセンサが反応してないときのプログラム if(SENSOR_1 >40){ // 光センサ1が白と判断 if(SENSOR_3 > 40){ //光センサ1、3共に白と判断した場合 if(0==i){ OnFwd(OUT_A+OUT_C); Wait(30); //0.3秒間前進 Off(OUT_A+OUT_C); i++; PlaySound(SOUND_CLICK); } if(1==i){ OnFwd(OUT_A+OUT_C); Wait(10); //0.1秒間前進 Off(OUT_A+OUT_C); i++; PlaySound(SOUND_CLICK); } if(SENSOR_1<40||SENSOR_3<40){ i=0; break; } if(2<=i){ while(true){ if(SENSOR_1<40||SENSOR_3<40){ //黒線を発見したら元の動作をする i=0; break; } if(n<=5){ //nが5になるまで左に首振りをする OnFwd(OUT_A); OnRev(OUT_C); Wait(1); n++; } else if(15<=n&&n<=17){ //nが15から17の間で元の向きに戻る OnFwd(OUT_A); OnRev(OUT_C); Wait(1); n++; } else if(n==18){ //0.1秒間後退 PlaySound(SOUND_CLICK); OnRev(OUT_A+OUT_C); Wait(10); n=0; } else{//nが4以上14以下のとき右に首振り OnFwd(OUT_C); OnRev(OUT_A); Wait(1); n++; } } } } else { //光センサ1、白/光センサ3、黒と判断した場合 OnFwd(OUT_A); //進行方向左に回転 Off(OUT_C); until(SENSOR_3 > 40); i=0; } } else { // 光センサ1が黒と判断 if(SENSOR_3 > 40){ //光センサ1、黒/光センサ3、白と判断した場合 Off(OUT_A); //進行方向右に回転 OnFwd(OUT_C); until(SENSOR_1 > 40); i=0; } else{ // 光センサ1、3共に黒と判断した場合 OnFwd(OUT_A+OUT_C); //直進 i=0; } } }// 2 No Touch }//while stop music2; Off(OUT_A+OUT_C); }
if(SENSOR_2 == 1){// タッチセンサが反応した場合 stop music2; start music1; OnRev(OUT_A+OUT_C); //1秒後退 Wait(100); Off(OUT_A+OUT_C );3秒間停止 Wait(300); i=0; stop music1; start music2; }
360度回点の場合も回転する前に後退するプログラムを入れました。
if(SENSOR_2 == 1){//タッチセンサが反応した場合 stop music2; start music1; OnRev(OUT_A+OUT_C);//一秒後退 Wait(100); repeat(2){//360度回転する命令 OnFwd(OUT_A); OnRev(OUT_C); Wait(140); stop music1; start music2; }
1,BrickxCCをダウンロード
2,LEGO社のwebページからUSB Tower patch(上から三番目のUSB Tower patchのところをクリックするとダウンロード画面が出る)をダウンロードする
3,ダウンロードしたファイルを解凍しSetup.exeを実行する
*検証は不十分ですがたぶんUSBタワーをパソコンにつけてからpatchをダウンロードしたほうがいいと思う。
Firmwareを最新のものにした前提で行う必要がある
よろしければコメントお願いします。 また、上記のvistaでの使用法についてのことも受け付けています