BASIC4MCU | 질문게시판 | 블랙 라인을 이용한 주행 자동차 소스 제작중 어려움이 있어 부탁드립니다.
페이지 정보
작성자 쿤싼 작성일2019-11-29 15:24 조회6,707회 댓글0건본문
int Left_motor_back=8; //좌측모터후진(IN1)
int Left_motor_go=9; //좌측모터전진(IN2)
int Right_motor_go=10; // 우측모터전진(IN3)
int Right_motor_back=11; // 우측모터후진(IN4)
const int SensorRight = 3; //우측센서
const int SensorLeft = 4; //좌측센서
int SL; //좌측센서 상태
int SR; //우측센서 상태
void setup()
{
//모터구동을을 위한 초기화
pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)
pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)
pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM)
pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)
pinMode(SensorRight, INPUT); //우측센서포트를 입력으로 정의
pinMode(SensorLeft, INPUT); //좌측센서포트를 입력으로 정의
}
void run() // 전진
{
analogWrite(Right_motor_go,50);//PWM값 0~255 조정,모터의 회전속도 조절.
analogWrite(Right_motor_back,0);
analogWrite(Left_motor_go,50);//PWM값 0~255 조정,모터의 회전속도 조절.
analogWrite(Left_motor_back,0);
//delay(time * 100); //딜레이
}
void brake() //제동, 정지
{
analogWrite(Right_motor_go,0);
analogWrite(Right_motor_back,0);
analogWrite(Left_motor_go,0);
analogWrite(Left_motor_back,0);
//delay(time * 100);//딜레이
}
void left() //좌회전(좌측정지,우측직진)
{
analogWrite(Right_motor_go,50);
analogWrite(Right_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
analogWrite(Left_motor_go,0);
analogWrite(Left_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
//delay(time * 100); //딜레이
}
void spin_left(int time) //좌측스핀(좌측후진,우측직진)
{
analogWrite(Right_motor_go,200);
analogWrite(Right_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
analogWrite(Left_motor_go,0);
analogWrite(Left_motor_back,200);//PWM값 0~255 조정,모터의 회전속도 조절.
delay(time * 100); //딜레이
}
void right() //우회전(우측정지, 좌측직진)
{
analogWrite(Right_motor_go,0);
analogWrite(Right_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
analogWrite(Left_motor_go,50);
analogWrite(Left_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
//delay(time * 100); //딜레이
}
void spin_right(int time) //우측스핀(우측후진, 좌측전진)
{
analogWrite(Right_motor_go,0);
analogWrite(Right_motor_back,200);//PWM값 0~255 조정,모터의 회전속도 조절.
analogWrite(Left_motor_go,200);
analogWrite(Left_motor_back,0);//PWM값 0~255 조정,모터의 회전속도 조절.
delay(time * 100); //딜레이
}
void back(int time) //후진
{
analogWrite(Right_motor_go,0);
analogWrite(Right_motor_back,150);//PWM값 0~255 조정,모터의 회전속도 조절.
analogWrite(Left_motor_go,0);
analogWrite(Left_motor_back,150);//PWM값 0~255 조정,모터의 회전속도 조절.
delay(time * 100); //딜레이
}
void loop()
{
while(1)
{
//신호가 있으면 LOW 신호가 없으면 HIGH
SR = digitalRead(SensorRight);
SL = digitalRead(SensorLeft);
if (SL == LOW&&SR==LOW)
run(); //전진
else if (SL == HIGH & SR == LOW)// 좌회전
left();
else if (SR == HIGH & SL == LOW) // 우회전
right();
else // 정지
brake();
}
}
loop문에서 디지 털 값으로 설정 된 값을 아날로그 값으로 바꾸고 싶어서
시도해 보았습니다.
void loop()
{
while(1)
{
//신호가 있으면 LOW 신호가 없으면 HIGH
SR = analogRead(SensorRight);
SL = analogRead(SensorLeft);
if (SL == 0&&SR==0)
run(); //전진
else if (SL >= 100 & SR <= 50)// 좌회전
left();
else if (SR >= 100 & SL <= 50) // 우회전
right();
else // 정지
brake();
}
잘못된 부분이 있는 거 같습니다.
도움 주시면 감사하겠습니다.
댓글 0
조회수 6,707등록된 댓글이 없습니다.