void PuzzleLineTracer::puzzleLineTrace()

in str/apps/src/PuzzleLineTracer.cpp [29:78]


void PuzzleLineTracer::puzzleLineTrace ( int8_t currentPosition, int8_t beforePosition, int8_t nextPosition )
{
	// 現在位置からの接続番号の付与
	connectPosition = connectNumberManager[currentPosition][nextPosition] ;
	// 行先への角度を取得する
	if ( beforePosition == 0x00 ) {
		beforeDegree = 0 ;
	} else {
		beforeConnectPosition = connectNumberManager[beforePosition][currentPosition] ;
		beforeDegree = allConnectPosition[beforePosition][beforeConnectPosition][DEGREE] ;
	}
	nextDegree = allConnectPosition[currentPosition][connectPosition][DEGREE] ;
	// 行先までの距離を取得する
	traceDistance = distance.getDistanceCurrent ( walker.get_count_L (), walker.get_count_R () ) ;
	nextDistance = allConnectPosition[currentPosition][connectPosition][DISTANCE] + traceDistance ;
	// 現在の角度と行先への角度から車体を動かす角度を計算する
	moveDegree = nextDegree - beforeDegree ;
	// 値が取れているか確認用のログ
	char msg[32] ;
	sprintf ( msg, "Degree>  Current:%d,Next:%d", currentDegree, nextDegree ) ;
	msg_f ( msg, 4 ) ;
	sprintf ( msg, "         Move:%d", moveDegree ) ;
	msg_f ( msg, 5 ) ;
    sprintf ( msg, "Position>Current:%d,Next:%d", currentPosition, connectPosition ) ; 
    msg_f ( msg, 6 ) ;
	sprintf ( msg, "Distance>Next:%ld,Trace:%ld", nextDistance, traceDistance ) ;
	msg_f ( msg, 7 ) ;
	// 車体を動かして角度を合わせる
	ev3_speaker_play_tone ( NOTE_FS6, 100 ) ;
	tslp_tsk ( 100 ) ;
	for ( int i = 0 ; i < moveDegree ; i++ ) {
		walker.run ( 0, ( ( moveDegree * 3 ) / 4 ) * -1 ) ;
		tslp_tsk ( 4 ) ;
	}
	walker.run ( 0, 0 ) ;
	tslp_tsk ( 100 ) ;
	// ラインをトレースする
	ev3_speaker_play_tone ( NOTE_FS6, 100 ) ;
	msg_f ( "OK", 8 ) ;
	while ( traceDistance < nextDistance ) {
		traceDistance = distance.getDistanceCurrent ( walker.get_count_L (), walker.get_count_R () ) ;
		lineTracer.speedControl.setPid ( 1.2, 2.4, 0.04, 30.0 );
		lineTracer.turnControl.setPid ( 2.4, 0.8, 0.02, 30.0 );
		lineTracer.runLine ( walker.get_count_L (), walker.get_count_R (), colorSensor.getBrightness () ) ;
		walker.run( lineTracer.getForward (), lineTracer.getTurn () ) ;
		tslp_tsk ( 4 ) ;
	}
	lineTracer.setForward ( -1 ) ;
	ev3_speaker_play_tone ( NOTE_FS6, 100 ) ;
}