내 Line Follower에서 Atmega16A 및 L293D 모터 드라이버를 사용하고 있습니다. 나는 흰 줄만 따르는 코드를 사용하고 있지만 이제 나는 검은 줄을 따라야한다.Line Follower Robot에서 흰색에서 검은 색 라인으로 코드를 변경할 수 없습니다.
처음에는 색상으로 연결되어 있다고 생각했지만 색상 코드를 변경해 보았지만 선 색상을 변경하면 아무런 결과도 얻지 못했습니다. 이 같은 매크로 정의를 변경, 모든
#include <avr/io.h>
#include "util/delay.h"
#define s1 ((PINA)&(0x01))
#define s2 ((PINA)&(0x02))
#define ms ((PINA)&(0b00000100))
void forward()
{
PORTD=0b00001001;
}
void left()
{
PORTD=0b00000001;
}
void right()
{
PORTD=0b00001000;
}
void follow()
{
if((ms!=0)&&(s1==0)&&(s2==0))
{
forward();
} else if (s1!=0)
{
left();
}
else if (s2!=0)
{
right();
}
//
// else if((ms==0)&&(s1==0)&&(s2==0))
// {
// right();
// // _delay_ms(150);
//
// }
else if((ms!=0)&&(s1!=0)&&(s2==0))
{
forward();
}
else if((ms!=0)&&(s1==0)&&(s2!=0))
{
forward();
}
else if((ms!=0)&&(s1!=0)&&(s2!=0))
{
forward();
}
else if (ms==0)
{
if (s1!=0)
{
while(ms==0)
{
left();
}
}
else if (s2!=0)
{
while(ms==0)
{
right();
}
}
}
else
{
forward();
}
}
int main(void)
{
DDRA = 0b00000000;
PORTA=0xFF;
DDRD = 0b11111111;
while(1)
{
follow();
}
}
'if ((ms! = 0) && (s1 == 0) && (s2 == 0))'은 무엇을 의미합니까? 센서 읽는거야? – jabujavi
단지 작은 힌트지만,이 코드가 당신의 것이라면 이미 알고있을 것입니다 ... 아마도 세 개의 광 센서 (ms, 중앙 하나, 왼쪽 하나는 s1, 오른쪽은 s2) 하나는 흰색 아래에 흰색이 있으면 1을 출력하고 검정색이면 0을 출력합니다. 이제 검은 색 선을 따라갑니다 (즉, 중간에 유지하려고 시도). 어떻게 그 행동을 되돌릴 수 있습니까? 한 가지 더 : 필요없는 "if"사례가 많이 있습니다. – frarugi87