サブゴール1レポート

1.タッチセンサを使った課題
ソース
program test {
	
	#include 
	#include 
	#include 
	#include 
	sensor touch1 on 1
	touch1 is switch as boolean
	event tPress_touch1EventPress when touch1.pressed
	
	
	
	main {
		ext InterfaceType "kRoverBot"
		rcx_ClearTimers
		bbs_GlobalReset([A B C])
		start TouchWatcher0
		rcx_Priority( 8)
		trigger tPress_touch1EventPress
		try {
			forever {
				bb_Forward(A, C, 200)
				bb_SpinLeft(A, C, 180)
			}
		} retry on fail
	}
	
	
	watcher TouchWatcher0 monitor tPress_touch1EventPress
	{ 
		rcx_Priority( 3 )
		try {
			bb_Backward(A, C, 100)
			bb_PlayNote( 698, 20, 20 )
			bb_RandomMove(A, C, 200 )
		} restart on fail
	} restart on event
}

フローチャート
リピート無限開始→もしタッチセンサが押されたら
↓        ↓
前進2秒      後退1秒
↓        ↓
左スピン1.8秒   音の再生(ファ#)
↓        ↓
リピート無限終了 ランダムな動き2秒

考察
競技2等に使う場合、タッチセンサが押された時、後退し方向転換する必要があるがこの課題では考えない事にした。
約左スピン1.8秒でマシンが逆向きに変わるが、厳密ではないので追求していく必要がある。
2.光センサを使った課題
ソース
program test {
	
	#include 
	#include 
	#include 
	#include 
	sensor light1 on 1
	light1 is light as percent
	event lDark_light1EventLow when light1 < 35
	
	
	main {
		ext InterfaceType "kRoverBot"
		rcx_ClearTimers
		bbs_GlobalReset([A B C])
		start LightWatcher0
		rcx_Priority( 8)
		trigger lDark_light1EventLow
		try {
			forever {
				bb_Forward(A, C, 200)
				bb_ZigZag(A, C, 1, 50 )
			}
		} retry on fail
	}
	
	
	watcher LightWatcher0 monitor lDark_light1EventLow
	{
		rcx_Priority( 4 )
		try {
			bb_Backward(A, C, 100)
			bb_Shake(A, C, 1, 50 )
		} restart on fail
	} restart on event
}


フローチャート
リピート無限開始→もしライト<35
↓        ↓
前進2秒      後退1秒
↓        ↓
ジグザグ1回転   シェイク1回転
↓
リピート無限終了

考察
はじめから設定されている、光センサの値を50で反応するようにしたら、緑色でも反応してしまった。
そこで、黒色の光センサの反応ラインを調べてみると、32、33だったので35未満で反応するようにした。

3.角度センサを使った課題
ソース
program test {
	
	#include 
	#include 
	#include 
	#include 
	sensor rotation2 on 2
	rotation2 is rotation as angle
	event equal_rotation2EventEqual when rotation2 = 200
	
	
	main {
		ext InterfaceType "kRoverBot"
		rcx_ClearTimers
		bbs_GlobalReset([A B C])
		start RotationWatcher0
		rcx_Priority( 8)
		trigger equal_rotation2EventEqual
		try {
			bb_Forward(A, C, 2000)
		} retry on fail
	}
	
	
	watcher RotationWatcher0 monitor equal_rotation2EventEqual
	{
		rcx_Priority( 5 )
		try {
			off [ A B C  ] 
			stop tasks
		} restart on fail
	} restart on event
}

フローチャート
前進20秒→もし回転数=200
     ↓
     エンジンオフA,B,C
     ↓
     プログラムの終了

考察
ヘルプから、1回転ときには角度センサの値が16増加する事がわかった。プログラムでは、200になると
止めているけれど10回転させた後停止させるには160にすれば問題ないだろう。
感想
実際、実験できた時間はRCXの通信が悪くて何回もインストールしたので短くなってしまった。もっと 手際よくできればよかった。CDの説明も足りないような気がする。
topページへ