2017-01-17 12 views
0

내 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(); 
    } 

} 
+0

'if ((ms! = 0) && (s1 == 0) && (s2 == 0))'은 무엇을 의미합니까? 센서 읽는거야? – jabujavi

+0

단지 작은 힌트지만,이 코드가 당신의 것이라면 이미 알고있을 것입니다 ... 아마도 세 개의 광 센서 (ms, 중앙 하나, 왼쪽 하나는 s1, 오른쪽은 s2) 하나는 흰색 아래에 흰색이 있으면 1을 출력하고 검정색이면 0을 출력합니다. 이제 검은 색 선을 따라갑니다 (즉, 중간에 유지하려고 시도). 어떻게 그 행동을 되돌릴 수 있습니까? 한 가지 더 : 필요없는 "if"사례가 많이 있습니다. – frarugi87

답변

0

첫째 : 다음은 코드 -

#define s1 ((PINA)&(0x01)); 
#define s2 (((PINA)>>1)&(0x01)); 
#define ms (((PINA)>>2)&(0x01)); 

그런 다음 linefollow에서 이러한 매크로() 비교를 사용합니다. 이제 s1, s2 또는 ms가 &의 출력을 0/1으로하고 그 센서 아래에 검은 색/흰색 표면을 각각 표시합니다. (사용되는 라인 센서의 종류에 따라 다르다.)

당신은 현재 코드가 검은 색 표면을 따르는 흰색 라인에 대한 것이라고 말했듯이, 흰색 표면에 이어지는 검은 색 라인에 대해서는 0s를 1s로 변경하고 그 반대의 경우도 마찬가지입니다. .

if((ms!=1)&&(s1==1)&&(s2==1)) 
{ 
    forward(); 
} else if (s1!=1) 
{ 
    left(); 
} 
else if (s2!=1) 
{ 
    right(); 
} 

BTW, 나는 또한 코드 일부를 포함 할 것 같다 당신이 중복되는 경우 - 다른 경우 제거하는 것이 좋습니다 싶습니다. 해피 봇 제작. :)