사용된 코드
#include <SoftwareSerial.h>
const int TxPin = 2; // Bluetooth 전송핀(Tx)
const int RxPin = 3; // 블루투스 수신핀(rx)
SoftwareSerial BTSerial(TxPin, RxPin); // RX, TX
const int TrigPin = 4; // 초음파 센서 TrigPin(거리 측정용 신호 발생)
const int EchoPin = 5; // 초음파 센서 EchoPin(반사된 신호 감지)
int read_distance(void) {
long duration;
int distance;
digitalWrite(TrigPin, LOW);
delayMicroseconds(5);
// TrigPin을 10 마이크로초 동안 HIGH 로 설정하여 센서가 트리거된다.
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// pulseIn()는 trigPin 신호 발생 후, 반사된 신호, 즉, EchoPin 을 읽어서
// 반사된 소리가 돌아온 시간, 즉, 지속 시간(펄스의 길이)을 마이크로초(1/1,000,000) 단위로 반환한다.
duration = pulseIn(EchoPin, HIGH);
// 거리 계산(소리는 초당 340m(34,000) 를 이동)
// 즉, 34,000cm /1,000,000 = 0.034 는 마이크로 초에 이동 거리,
// 거기에 시간을 곱하면 이것이 장애물과의 거리임.
// 그런데 왕복이므로 2 로 나누어 준다.
distance = duration * 0.034 / 2;
return distance;
}
void setup() {
Serial.begin(9600);
BTSerial.begin(9600);
Serial.println("START");
pinMode(8, OUTPUT); pinMode(9, OUTPUT);
pinMode(10, OUTPUT); pinMode(11, OUTPUT);
digitalWrite(8, LOW); digitalWrite(9, LOW);
digitalWrite(10, LOW); digitalWrite(11, LOW);
pinMode(EchoPin, INPUT);
pinMode(TrigPin, OUTPUT);
}
void loop() {
char X;
int distance;
if (BTSerial.available()) { // BT 로 부터 수신한 데이터 확인
X = BTSerial.read(); // BT 로 부터 수신된 데이터를 X 에 저장
Serial.print(X); // 시리얼 모니터로 수신한 데이터 출력
}
// if (Serial.available()) {
// BTSerial.write(Serial.read());
// X = Serial.read();
// }
if (X == 'f') {
distance = read_distance();
//Serial.println(distance);
if (distance > 10) { // 장애물과의 거리가 10cm 이상이면 전진
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
} else { // 장애물과의 거리가 10cm 이상이 아니면 정지
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
}
if (X == 'b') { // 후진
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
}
if (X == 'l') { // 좌회전
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
}
if (X == 'r') { // 우회전
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
}
if (X == 's') { // 정지
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
}
'유수봉 교수의 AI' 카테고리의 다른 글
유수봉 교수의 AI-9주차 (0) | 2024.05.03 |
---|---|
유수봉 교수의 AI-8주차 (0) | 2024.04.26 |
유수봉 교수의 AI-6주차 (0) | 2024.04.12 |
유수봉 교수의 AI-5주차 (0) | 2024.04.12 |
유수봉 교수의 AI - 04 - 졸업작품(3) (0) | 2024.04.04 |