BASIC4MCU | 질문게시판 | 아두이노 자율주행 + 조종
페이지 정보
작성자 Valentin1020 작성일2021-06-23 11:23 조회2,416회 댓글1건본문
<전체 코드>#include <SoftwareSerial.h>//모터 PIN 설정#define LEFT_A1 4#define LEFT_B1 5#define RIGHT_A2 6#define RIGHT_B2 7//블루투스 PIN 설정#define BLUE_TX 2#define BLUE_RX 3#define IR_TRIG 10#define IR_ECHO 11SoftwareSerial mySerial(BLUE_TX, BLUE_RX);char value, mode;void forward() {digitalWrite(LEFT_A1, HIGH);digitalWrite(LEFT_B1, LOW);digitalWrite(RIGHT_A2, HIGH);digitalWrite(RIGHT_B2, LOW);}void backward() {digitalWrite(LEFT_A1, LOW);digitalWrite(LEFT_B1, HIGH);digitalWrite(RIGHT_A2, LOW);digitalWrite(RIGHT_B2, HIGH);}void left() {digitalWrite(LEFT_A1, LOW);digitalWrite(LEFT_B1, HIGH);digitalWrite(RIGHT_A2, HIGH);digitalWrite(RIGHT_B2, LOW);}void right() {digitalWrite(LEFT_A1, HIGH);digitalWrite(LEFT_B1, LOW);digitalWrite(RIGHT_A2, LOW);digitalWrite(RIGHT_B2, HIGH);}void stop() {digitalWrite(LEFT_A1, LOW);digitalWrite(LEFT_B1, LOW);digitalWrite(RIGHT_A2, LOW);digitalWrite(RIGHT_B2, LOW);}void setup() {Serial.begin(9600);mySerial.begin(9600);pinMode(LEFT_A1, OUTPUT);pinMode(RIGHT_A2, OUTPUT);pinMode(LEFT_B1, OUTPUT);pinMode(RIGHT_B2, OUTPUT);pinMode(IR_TRIG, OUTPUT);pinMode(IR_ECHO, INPUT);Serial.println("Arduino Bluetooth Car is ready to start");}void loop() {if (mySerial.available()) {mode = mySerial.read();Serial.print(mode);if (mode == 'm') {while (mySerial.available()) /{value = mySerial.read();Serial.print(value);if (value == 'l') {Serial.println("left");left();} else if (value == 'r') {Serial.println("right");right();} else if (value == 'f') {Serial.println("forward");forward();} else if (value == 'b') {Serial.println("backward");backward();}else if (value == 's') {Serial.println("stop");stop();}}}if (mode == 'n') {while (mode) {float duration, distance;digitalWrite(IR_TRIG, HIGH);delay(10);digitalWrite(IR_TRIG, LOW);duration = pulseIn(IR_ECHO, HIGH);distance = ((float)(340 * duration) / 10000) / 2;Serial.print("\nDIstance : ");Serial.println(distance);if (distance < 20) {Serial.println("stop");stop();backward();int rnd = random(0, 2);if (rnd == 0) {Serial.println("right");right();} else {Serial.println("left");left();}} else {Serial.println("forward");forward();}}}}}loop 안에 있는 자율주행코드와 블루투스 조종코드를 앱에서 보내는 블루투스 값(자율 주행은 'm', 조종은 'n') 으로 나누어 실행하고 싶습니다. 그런데 자율 주행은 작동을 하는데, 블루투스를 통한 조종은 제대로 작동을 안 하네요... 어떻게 해결하면 좋을까요?
댓글 1
조회수 2,416master님의 댓글
master 작성일
int rnd,mode='a'; // 초기모드 자동
float duration,distance;
//
void loop(){
if(mySerial.available()){
mode=mySerial.read(); Serial.print(mode);
if(mode=='l'){ Serial.println("left"); left(); }
if(mode=='r'){ Serial.println("right"); right(); }
if(mode=='f'){ Serial.println("forward"); forward(); }
if(mode=='b'){ Serial.println("backward"); backward(); }
if(mode=='s'){ Serial.println("stop"); stop(); }
}
//
if(mode=='a'){ // 자동모드
digitalWrite(IR_TRIG,1); delayMicroseconds(10); digitalWrite(IR_TRIG,0);
duration=pulseIn(IR_ECHO,1);
distance=((float)(340 * duration)/10000)/2; Serial.print("\nDIstance : "); Serial.println(distance);
//
if(distance<20){
Serial.println("stop"); stop(); backward();
rnd=random(0,2);
if(rnd==0){ Serial.println("right"); right(); } else { Serial.println("left"); left(); }
}
else{ Serial.println("forward"); forward(); }
}
}