BASIC4MCU | 질문게시판 | 답변 : 라인트레이서 조도센서 질
페이지 정보
작성자 master 작성일2022-11-27 14:37 조회605회 댓글0건본문
int IN1=8,IN2=9,IN3=10,IN4=11;
int ULTRASENS_T=5,ULTRASENS_E=7;
int leftLineSensor=13,rightLineSensor=12;
int ENA=3,ENB=6;
//
void forward(){
analogWrite(3,90); analogWrite(6,90);
digitalWrite(IN1,1); digitalWrite(IN2,0); digitalWrite(IN3,1); digitalWrite(IN4,0);
}
//
void back() { digitalWrite(IN1,0); digitalWrite(IN2,1); digitalWrite(IN3,0); digitalWrite(IN4,1); }
void left() { digitalWrite(IN1,0); digitalWrite(IN2,0); digitalWrite(IN3,1); digitalWrite(IN4,0); }
void right(){ digitalWrite(IN1,1); digitalWrite(IN2,0); digitalWrite(IN3,0); digitalWrite(IN4,0); }
void stop() { digitalWrite(IN1,0); digitalWrite(IN2,0); digitalWrite(IN3,0); digitalWrite(IN4,0); }
//
void avd1(){ analogWrite(3,190); analogWrite(6,90); } // 회피 1차 동작
void avd2(){ analogWrite(3,90); analogWrite(6,190); } // 회피 2차 동작
void avd3(){ analogWrite(3,190); analogWrite(6,40); } // 회피 3차 동작
//
long howclose(){
long duration=0,distance=0;
digitalWrite(ULTRASENS_T,1); delayMicroseconds(10); digitalWrite(ULTRASENS_T,0);
duration=pulseIn(ULTRASENS_E,1);
distance=duration/29/2;
Serial.print(distance); Serial.println("cm");
return distance;
}
//
void setup(){
Serial.begin(9600);
pinMode(A4, INPUT); pinMode(2, OUTPUT);
//
pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); // A 모터
pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); // B 모터
pinMode(leftLineSensor,INPUT); pinMode(rightLineSensor,INPUT);
pinMode(ULTRASENS_T,OUTPUT); pinMode(ULTRASENS_E,INPUT);
}
//
void loop(){
Serial.println(analogRead(A4)); // if 값은 주변 환경 조도값에 따라 변경
if(analogRead(A4)<80)digitalWrite(2, HIGH); else digitalWrite(2, LOW);
//
long distance=howclose();
if(distance>20){
if (!digitalRead(leftLineSensor)&& !digitalRead(rightLineSensor)){ forward(); } // 양쪽 센서가 '미감지(반사신호OK) 경우 : 전진
else if(!digitalRead(leftLineSensor)&& digitalRead(rightLineSensor)){ left(); } // 왼쪽 센서만 '선감지(반사신호X)' 경우 : 좌회전
else if( digitalRead(leftLineSensor)&& !digitalRead(rightLineSensor)){ right(); } // 오른쪽 센서만 '선감지(반사신호X)' 경우 : 우회전
else if( digitalRead(leftLineSensor)&& digitalRead(rightLineSensor)){ stop(); } // 양쪽 센서 모두 '선감지(반사신호X)' 경우 : 정지
delay(100);
}
else if(distance<10){ stop(); delay(0); }
else{ avd1(); delay(1300); avd2(); delay(2700); avd3(); delay(2000); } // 10 < distance < 20
}
댓글 0
조회수 605등록된 댓글이 없습니다.