// 모터B의 핀배열
#define B1A 5// motor B 속도조절
#define B1B 6// motor B 방향조절
// 모터A의 핀배열
#define A1A 9 // motor A 속도조절 analogWrite
#define A1B 10 // motor A 방향조절
int carSpeed = 10500; // RC카의 속도
void setup() {
Serial.begin(9600); // 시리얼 통신 초기화(0번:RX, 1번:TX로 사용), 하드웨어 시리얼 포트로 블루투스와 통신
pinMode(A1A, OUTPUT);
pinMode(A1B, OUTPUT);
pinMode(B1A, OUTPUT);
pinMode(B1B, OUTPUT);
}
void loop() {
if (Serial.available()) {
char command = Serial.read(); // 블루투스로 수신된 명령어를 command에 저장
if (command == 'F' || command == 'f') {
// F 또는 f를 입력으로 받는 경우 RC카를 전진시키는 함수 호출
moving_forward();
}
else if (command == 'B' || command == 'b') {
// B 또는 b를 입력으로 받는 경우 RC카를 후진시키는 함수 호출
moving_backward();
}
else if (command == 'L' || command == 'l') {
// L 또는 l을 입력으로 받는 경우 RC카를 왼쪽으로 회전시키는 함수 호출
moving_left();
}
else if (command == 'R' || command == 'r') {
// R 또는 r을 입력으로 받는 경우 RC카를 오른쪽으로 회전시키는 함수 호출
moving_right();
}
else if (command == 'S' || command == 's') {
// S 또는 s를 입력으로 받는 경우 RC카를 정지시키는 함수 호출
stop_moving();
}
else {
// 인식하지 못하는 명령어 수신시 RC카를 정지시키는 함수 호출
stop_moving();
}
}
// 일정시간 지연
delay(100);
}
void moving_forward() {
// 모터A를 정방향으로 회전
digitalWrite(A1B, HIGH);
analogWrite(A1A, 255-carSpeed);
// 모터B를 정방향으로 회전
digitalWrite(B1B, HIGH);
analogWrite(B1A, 255-carSpeed);/carspeed 작을수록 빠름 정방향, 역방향은 클수록 빠름
}
void moving_backward() {
// 모터A를 역방향으로 회전
digitalWrite(A1B, LOW);
analogWrite(A1A, carSpeed);
// 모터B를 역방향으로 회전
digitalWrite(B1B, LOW);
analogWrite(B1A, carSpeed);
}
void moving_left() {
// 모터A를 정방향으로 회전
digitalWrite(A1B, HIGH);
analogWrite(A1A, carSpeed);
// 모터B를 역방향으로 회전
digitalWrite(B1B, LOW);
analogWrite(B1A, carSpeed);
}
void moving_right() {
// 모터A를 역방향으로 회전
digitalWrite(A1B, LOW);
analogWrite(A1A, carSpeed);
// 모터B를 정방향으로 회전
digitalWrite(B1B, HIGH);
analogWrite(B1A, carSpeed);
}
void stop_moving() {
// 모터A와 모터B를 비활성화
analogWrite(A1A, LOW);
analogWrite(A1B, LOW);
digitalWrite(B1A, LOW);
digitalWrite(B1B, LOW);
}
Comments
Please log in or sign up to comment.