여러분은 라인트레이서의 꽃이 무엇이라고 생각하시나요?
저는 뭐니뭐니해도 라인트레이서의 꽃은 길을 찾아가는 것이라고 생각합니다.
처음 시작하셨을 때부터 기다려오셨을 심장부, 길 찾기!
지금 시작하겠습니다.
이것이 오늘 배울 곳!
---------------------------------------------------------------------------
핵심어
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. 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 : 돌기
'나래온 1기(~2012.6) > 라인트레이서 이야기' 카테고리의 다른 글
(3부작) 라인트레이서 이야기 - 번외 #4 힘찬 시작을 위하여, 모터 파워 온! (0) | 2011.08.03 |
---|---|
(3부작) 라인트레이서 이야기 - 번외 #3 모든 일의 시작, 초기화! (0) | 2011.08.03 |
(3부작) 라인트레이서 이야기 - 번외 #2 WinAVR은 뭘까? (0) | 2011.08.03 |
(3부작) 라인트레이서 이야기 - 번외 #1 AVRStudio는 뭘까? (0) | 2011.08.03 |
(3부작) 라인트레이서 이야기 - 4. BreezeCore 독해 길잡이 (0) | 2010.07.31 |