BASIC4MCU | 질문게시판 | 답변 : 아두이노와 초음파 센서로 모터 제어 코드 질문있습니다.
페이지 정보
작성자 master 작성일2022-12-07 17:00 조회497회 댓글1건본문
int trig=3,echo=4;
//
unsigned long duration,distance;
//
#define FORWARD 1 // 모터 정방향
#define BACKWARD 2 // 모터 역방향
#define RELEASE 3 // 모터 정지
int enablePin=5,motorPin1=7,motorPin2=6,motorPin3=9,motorPin4=8;
//
void setup(){
Serial.begin(9600);
// 초음파 인풋
pinMode(trig,OUTPUT); pinMode(echo,INPUT);
// 모터 인풋
pinMode(enablePin,OUTPUT); digitalWrite(enablePin,1);
pinMode(motorPin1,OUTPUT); pinMode(motorPin2,OUTPUT);
pinMode(motorPin3,OUTPUT); pinMode(motorPin4,OUTPUT);
motorMove(RELEASE);
}
//
void loop(){
digitalWrite(trig,1); delayMicroseconds(10); digitalWrite(trig,0);
long duration=pulseIn(echo,1);
long distance=(duration*340)/2/10000;
//
if(distance>50){ // 50cm 이상 // 물제가 감지 안되었을때 0, 멈춰있다가
digitalWrite(motorPin1,0); digitalWrite(motorPin2,0); // 왼쪽은 정지
digitalWrite(motorPin3,0); digitalWrite(motorPin4,0); // 오른쪽은 정지
}
else if(distance>30){ // 30~50cm // 50 cm 앞에 물체가 감지 되었을때 왼쪽 작동
digitalWrite(motorPin1,1); digitalWrite(motorPin2,0); // 왼쪽은 정회전
digitalWrite(motorPin3,0); digitalWrite(motorPin4,0); // 오른쪽은 정지
}
else if(distance>10){ // 10~30cm // 30cm 앞에 물체가 감지 되었을때 오른쪽 작동
digitalWrite(motorPin1,0); digitalWrite(motorPin2,0); // 왼쪽은 정지
digitalWrite(motorPin3,1); digitalWrite(motorPin4,0); // 오른쪽은 정회전
}
else{ // 0~10cm // 10cm 앞에 물체가 왔을때 둘다 돌아가는
digitalWrite(motorPin1,1); digitalWrite(motorPin2,0); // 왼쪽 정회전
digitalWrite(motorPin3,1); digitalWrite(motorPin4,0); // 오른쪽 정회전
}
}
//
void motorMove(int key){
switch(key){
case 1:
digitalWrite(motorPin1,1); digitalWrite(motorPin2,0);
digitalWrite(motorPin3,1); digitalWrite(motorPin4,0);
break;
case 2:
digitalWrite(motorPin1,0); digitalWrite(motorPin2,1);
digitalWrite(motorPin3,0); digitalWrite(motorPin4,1);
break;
case 3:
digitalWrite(motorPin1,1); digitalWrite(motorPin2,1);
digitalWrite(motorPin3,1); digitalWrite(motorPin4,1);
break;
}
}
댓글 1
조회수 497blackbunn님의 댓글
blackbunn 작성일도와주셔서 감사합니다