본문 바로가기

나래온 1기(~2012.6)/라인트레이서 이야기

(3부작) 라인트레이서 이야기 - 번외 #5 라인트레이서의 꽃, 길 찾기!

 여러분은 라인트레이서의 꽃이 무엇이라고 생각하시나요?
 저는 뭐니뭐니해도 라인트레이서의 꽃은 길을 찾아가는 것이라고 생각합니다.
 처음 시작하셨을 때부터 기다려오셨을 심장부, 길 찾기!
 지금 시작하겠습니다.

것이 오늘 배울 곳!
---------------------------------------------------------------------------
핵심어
1. while(조건) : 조건 안의 내용이 참(= 1)일 동안 반복합니다.
2. goto (목표) : 목표 부분으로 건너뜁니다.
3. P(포트)(숫자) : 포트의 숫자 번 비트를 말합니다.
4. TRACE 시리즈 : 교차로보다 약간 앞으로 가게 해 줍니다.(* 중요하지 않아 굵게 표시 안함)

센서 위치
-          -          *          *          -          -
                      L_S      R_S
 *         *          -          -          *          *
LLL_S LL_S                           RR_S RRR_S
-          -          *          *          -          -
                      L_BS R_BS (* 안 씁니다. 왜 만들었을까요?)

---------------------------------------------------------------------------

 자, 다 보셨나요?
 이제는 익숙해진 소스로 시작해 봅시다.
void AUTO_TRACE2(unsigned char dir,unsigned int next_speed, unsigned char type, unsigned int brake, int speed)
{
 while(1)
 { 
  if((LLL_S)&&(RRR_S))
  {
   TRACE2(speed);
   goto MEET;
  }
  else if((LLL_S)&&(RRR_S==0))
  {
   TRACE_E(speed);
   if((type==E)&&LLL_S) goto MEET;
   else if((type==T)&&(L_S||R_S))
   {
    m_bra=0;
    while(RRR_S==0)
    {
    DC_MOVE(-(speed/10)*3,speed);
    }
    goto MEET;
   }
  } 
  else if((RRR_S)&&(LLL_S==0))
  {
   TRACE_A(speed);
   if((type==A)&&RRR_S) goto MEET;
   else if((type==T)&&(L_S||R_S))
   {
   m_bra=0;
    while(LLL_S==0)
    {
    DC_MOVE(speed,-(speed/10)*3);
    }
    goto MEET;
   } 
  } 
  else TRACE2(speed);
 }
 MEET:
 AUTO_TURN(dir,type,brake,next_speed);
}


해설
무한반복 시작
 1. LLL_S와 RRR_S 모두 인식되면 궤도로 돌아온 후 무조건 meet로 간다
 2. LLL_S만 인식되면 궤도로 돌아온 후
 교차로 E : meet 이동
 교차로 T : RRR_S 인식 될 때까지 왼쪽으로 턴 후 meet(* 굴곡 처리하느라 생긴 듯 합니다)
 3. RRR_S만 인식되면 궤도로 돌아온 후
 교차로 A : meet 이동
 교차로 T : LLL_S 인식 될 때까지 오른쪽으로 턴 후 meet로 이동
 4. 모두 아니면 교차로보다 약간 앞으로 가게 합니다
무한반복 끝
meet : 돌기