답변 : 블랙 라인을 이용한 주행 자동차 소스 제작중 어려움이 있어 부탁드립니다.
페이지 정보
작성자 master 작성일19-11-30 05:46 조회3,575회 댓글0건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2019-11-30 오전 5:41:29
// by Ok-Hyun Park
//
const int Left_motor_back = 8,Left_motor_go = 9; // 좌측모터후진(IN1) // 좌측모터전진(IN2)
const int Right_motor_back=11,Right_motor_go=10; // 우측모터전진(IN3) // 우측모터후진(IN4)
const int SensorRight=3,SensorLeft=4;
//
int SL,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_PULLUP); // 우측센서포트를 입력으로 정의
pinMode(SensorLeft ,INPUT_PULLUP); // 좌측센서포트를 입력으로 정의
}
//
void run(){ // 전진
analogWrite(Right_motor_go,50); analogWrite(Right_motor_back,0);
analogWrite(Left_motor_go ,50); 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);
analogWrite(Left_motor_go , 0); analogWrite(Left_motor_back ,0);
//delay(time*100);
}
//
void spin_left(int time){ //좌측스핀(좌측후진,우측직진)
analogWrite(Right_motor_go,200); analogWrite(Right_motor_back, 0);
analogWrite(Left_motor_go , 0); analogWrite(Left_motor_back ,200);
delay(time*100);
}
//
void right(){ //우회전(우측정지,좌측직진)
analogWrite(Right_motor_go, 0); analogWrite(Right_motor_back,0);
analogWrite(Left_motor_go ,50); analogWrite(Left_motor_back ,0);
//delay(time*100);
}
//
void spin_right(int time){ //우측스핀(우측후진,좌측전진)
analogWrite(Right_motor_go, 0); analogWrite(Right_motor_back,200);
analogWrite(Left_motor_go ,200); analogWrite(Left_motor_back , 0);
delay(time*100);
}
//
void back(int time){ //후진
analogWrite(Right_motor_go,0); analogWrite(Right_motor_back,150);
analogWrite(Left_motor_go ,0); analogWrite(Left_motor_back ,150);
delay(time*100);
}
//
void loop(){
SR=!digitalRead(SensorRight);
SL=!digitalRead(SensorLeft);
if ( SL && SR)run(); // 전진
else if( SL && !SR)left(); // 좌회전
else if(!SL && SR)right(); // 우회전
else brake(); // 정지
}
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)
위 핀들이 모두 PWM 핀인가보죠?
모터 드라이버모듈이 L298인 경우
L298모듈의 EN핀의 점퍼가 꼽혀있어야합니다.
모터 토크가 작으면 힘이 없어서 동작이 안될 수 있습니다.
이 경우에는 PWM값에 50이나 200을 주지말고 255 최대 출력으로 구동하세요
4개의 핀이 모두 PWM 핀이 아니라면 디지털로 제어하세요
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2019-11-30 오전 5:45:52
// by Ok-Hyun Park
//
const int Left_motor_back = 8,Left_motor_go = 9; // 좌측모터후진(IN1) // 좌측모터전진(IN2)
const int Right_motor_back=11,Right_motor_go=10; // 우측모터전진(IN3) // 우측모터후진(IN4)
const int SensorRight=3,SensorLeft=4;
//
int SL,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_PULLUP); // 우측센서포트를 입력으로 정의
pinMode(SensorLeft ,INPUT_PULLUP); // 좌측센서포트를 입력으로 정의
}
//
void run(){ // 전진
digitalWrite(Right_motor_go,1); digitalWrite(Right_motor_back,0);
digitalWrite(Left_motor_go ,1); digitalWrite(Left_motor_back ,0);
//delay(time*100);
}
//
void brake(){ //제동,정지
digitalWrite(Right_motor_go,0); digitalWrite(Right_motor_back,0);
digitalWrite(Left_motor_go ,0); digitalWrite(Left_motor_back ,0);
//delay(time*100);
}
//
void left(){ //좌회전(좌측정지,우측직진)
digitalWrite(Right_motor_go,1); digitalWrite(Right_motor_back,0);
digitalWrite(Left_motor_go ,0); digitalWrite(Left_motor_back ,0);
//delay(time*100);
}
//
void spin_left(int time){ //좌측스핀(좌측후진,우측직진)
digitalWrite(Right_motor_go,1); digitalWrite(Right_motor_back,0);
digitalWrite(Left_motor_go ,0); digitalWrite(Left_motor_back ,1);
delay(time*100);
}
//
void right(){ //우회전(우측정지,좌측직진)
digitalWrite(Right_motor_go,0); digitalWrite(Right_motor_back,0);
digitalWrite(Left_motor_go ,1); digitalWrite(Left_motor_back ,0);
//delay(time*100);
}
//
void spin_right(int time){ //우측스핀(우측후진,좌측전진)
digitalWrite(Right_motor_go,0); digitalWrite(Right_motor_back,1);
digitalWrite(Left_motor_go ,1); digitalWrite(Left_motor_back ,0);
delay(time*100);
}
//
void back(int time){ //후진
digitalWrite(Right_motor_go,0); digitalWrite(Right_motor_back,1);
digitalWrite(Left_motor_go ,0); digitalWrite(Left_motor_back ,1);
delay(time*100);
}
//
void loop(){
SR=!digitalRead(SensorRight);
SL=!digitalRead(SensorLeft);
if ( SL && SR)run(); // 전진
else if( SL && !SR)left(); // 좌회전
else if(!SL && SR)right(); // 우회전
else brake(); // 정지
}
댓글 : 0
조회수 : 3,575
등록된 댓글이 없습니다.