RC카를 dabble를사용하여 ...
프로필
- 매너온도
- 37.1°C
RC카를 dabble를사용하여 만드려고 하는데
#include
#include
// 모터 제어 핀 정의
#define A_1A 6
#define A_1B 11
#define B_1A 3
#define B_1B 5
// 초음파 센서 핀 정의
#define trigPin 8
#define echoPin 9
SoftwareSerial Bluetooth(1, 2); // RX, TX
unsigned long previousMillis = 0; // 이전 시간 값을 저장하는 변수
const long interval = 100; // 초음파 센서를 검사할 시간 간격 (밀리초 단위)
const int stopDistance = 25; // 장애물을 감지할 거리 (cm 단위)
void setup() {
Bluetooth.begin(9600);
pinMode(A_1A, OUTPUT);
pinMode(A_1B, OUTPUT);
pinMode(B_1A, OUTPUT);
pinMode(B_1B, OUTPUT);
digitalWrite(A_1A, LOW);
digitalWrite(A_1B, LOW);
digitalWrite(B_1A, LOW);
digitalWrite(B_1B, LOW);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600); // 디버깅을 위한 시리얼 모니터 시작
}
void loop() {
// 현재 시간 값을 가져옵니다.
unsigned long currentMillis = millis();
// 일정 시간 간격이 지났는지 확인합니다.
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
int distance = getDistanceCM();
Serial.println(distance); // 거리 값을 시리얼 모니터에 출력
// 장애물이 일정 거리 이내에 있을 경우 정지
if (distance < stopDistance) {
stop();
}
}
// 블루투스 명령을 우선적으로 처리합니다.
if (Bluetooth.available() > 0) {
char command = Bluetooth.read();
executeCommand(command);
}
}
int getDistanceCM() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2; // 시간(duration)을 거리(cm)로 변환
return distance;
}
void executeCommand(char command) {
switch (command) {
case 'F':
forward();
break;
case 'B':
back();
break;
case 'L':
left();
break;
case 'R':
right();
break;
case 'S':
stop();
break;
default:
// 알 수 없는 명령을 수신했을 때 실행할 코드
break;
}
}
void forward() {
digitalWrite(A_1A, HIGH);
digitalWrite(A_1B, LOW);
digitalWrite(B_1A, HIGH);
digitalWrite(B_1B, LOW);
}
void back() {
digitalWrite(A_1A, LOW);
digitalWrite(A_1B, HIGH);
digitalWrite(B_1A, LOW);
digitalWrite(B_1B, HIGH);
}
void left() {
digitalWrite(A_1A, HIGH);
digitalWrite(A_1B, LOW);
digitalWrite(B_1A, LOW);
digitalWrite(B_1B, HIGH);
}
void right() {
digitalWrite(A_1A, LOW);
digitalWrite(A_1B, HIGH);
digitalWrite(B_1A, HIGH);
digitalWrite(B_1B, LOW);
}
void stop() {
digitalWrite(A_1A, LOW);
digitalWrite(A_1B, LOW);
digitalWrite(B_1A, LOW);
digitalWrite(B_1B, LOW);
}
이거 뭐가 잘못된건지 아시나요?
∙ 조회 58
댓글 1
댓글 작성자가 삭제한 댓글이예요.
지금 당근 앱을 다운로드하고
따뜻한 동네생활을 경험해보세요!
SoftwareSerial Bluetooth(1, 2);
위 파라미터값을 3, 4번으로 바꿔보심이?
아두이노 우노에서는 보통 디지털 핀번호 1,2번은 시리얼 통신에 사용되므로 잘 안씀.