BASIC4MCU | 질문게시판 | 라인트레이싱과 카운트
페이지 정보
작성자 촙아두 작성일2020-11-09 20:49 조회2,641회 댓글1건본문
int motor2=2,motor3=3,motor4=4,motor6=6;
int line1=22,line2=24,line3=26;
//
int l_s,c_s,r_s;
//
int count = 0;
void setup(){
analogReference(DEFAULT);
Serial.begin(9600);
pinMode(motor2,OUTPUT); pinMode(motor3,OUTPUT); pinMode(motor4,OUTPUT); pinMode(motor6,OUTPUT);
}
//
void motor_F() { analogWrite(motor2, 0); analogWrite(motor3,254); analogWrite(motor4,246); analogWrite(motor6, 0); } // 전진
void motor_R() { analogWrite(motor2, 0); analogWrite(motor3,254); analogWrite(motor4, 0); analogWrite(motor6,246); } // 우
void motor_R2(){ analogWrite(motor2, 0); analogWrite(motor3,254); analogWrite(motor4, 0); analogWrite(motor6, 0); }
void motor_L() { analogWrite(motor2,254); analogWrite(motor3, 0); analogWrite(motor4,246); analogWrite(motor6, 0); } // 좌
void motor_O() { analogWrite(motor2, 0); analogWrite(motor3,115); analogWrite(motor4,245); analogWrite(motor6, 0); } // 원운동하기
//
void sw_in(){ l_s=digitalRead(22); c_s=digitalRead(24); r_s=digitalRead(26); }
//
void linetracing(){
sw_in();
if ((l_s==0)&&(r_s==0)){ motor_F(); } // 전진
else if((l_s==1)&&(r_s==0)){ motor_R(); } // 우
else if((l_s==0)&&(r_s==1)){ motor_L(); } // 좌
else if((l_s==1)&&(r_s==1)){ motor_F(); } // 전진
else { return; }
}
//
void loop(){
linetracing();
sw_in();
if((l_s==1)&&(r_s==1)&&(c_s==1)){ count++; delay(100); }
//
if(count<2){ linetracing(); }
else if(count==2){ // 프로그램
motor_F(); delay(500); // 전진
motor_R2(); delay(1400); // 약한 우
while(1){
sw_in();
if((l_s==0)||(r_s==0)||(c_s==0))
{ break; }
motor_O(); // 원운동하기
}
motor_L(); delay(1000); // 좌회전
}
}
마스터님께서 감사하게도 잘 정리해주셔서 사용해봤습니다. 원래는 int count=0; 가 루프안에 지역변수로 작용했는데 카운트를 하지 않고 라인트레이싱만 했습니다.그래서 int count=0; 을 전역변수로 두어 루프문을 빠져나오게 하였는데 이번에는 라인트레이싱을 하지 않고 전진하다 count==2 부터 바로 작용이 되는것같은 현상이발견되었습니다.(if((l_s==1)&&(r_s==1)&&(c_s==1)) 조건이 만족하지 않았음에도 )loop문에 linetracing(); 만 둔다면 라인트레이싱을 하는데 저렇게 함수를 짰는데 왜 안되는지.. 모르겠습니다 어떤점이 문제인지 알려주신다면 감사하겠습니다.[ 제가 이 함수에서 원하는건 라인트레이싱을 하다가 (l_s==1)&&(r_s==1)&&(c_s==1) 를 2번미만일 땐 라인트레이싱 하고 2번체크되었을 때는 전진하고 약한 우 이후에(l_s==0)||(r_s==0)||(c_s==0)가 만족할 때 까지 원운동을 하고 만족한다면 좌회전하는 프로그램이 끝난 후 다시 라인트레이싱 하는 프로그램입니다 ( 이 때 2번체크 된 이후에프로그램이 동작하는 와중에 (l_s==1)&&(r_s==1)&&(c_s==1) 가 체크가 항상되는데 이걸 무시하고 프로그램이 돌아가는 지 궁금합니다 첫단추부터 제대로 되지 않아서 확인이 불가능해서..)
댓글 1
조회수 2,641master님의 댓글
master 작성일
디버깅은 물건을 가지고 있는 사람이 동작시켜가면서 체크해야 합니다.
즉, 다른 사람은 도와주지 못한다는 뜻입니다.
잘 체크해서 해결해보세요