BASIC4MCU | 질문게시판 | 아두이노 블루투스와 초음파센서를 이용한 장애물 정지
페이지 정보
작성자 둘둘이 작성일2023-09-22 16:20 조회978회 댓글2건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=23229
작성일
본문
블루투스 모듈을 이용해 리모콘으로 조종을 하다 앞에 물체가 있으면 멈추고 그뒤에 다시 리모컨을 이용해 움직이는 코딩을 하고 싶은데 어디가 잘못된건가요 ㅠ ㅠ
#include <SoftwareSerial.h> //가상 시리얼 통신을 위한 라이브러리 선언#define BT_RXD 3 // 아두이노의 4번핀을 RX(받는 핀)로 설정#define BT_TXD 4 // 아두이노 3번핀을 TX(보내는 핀)로 설정SoftwareSerial bluetooth(BT_RXD,BT_TXD); //블루투스 통신을 위한 설정int RightMotor_E_pin = 5; // 오른쪽 모터의 Enable & PWMint LeftMotor_E_pin = 6; // 왼쪽 모터의 Enable & PWMint RightMotor_1_pin = 8; // 오른쪽 모터 제어선 IN1int RightMotor_2_pin = 9; // 오른쪽 모터 제어선 IN2int LeftMotor_3_pin = 10; // 왼쪽 모터 제어선 IN3int LeftMotor_4_pin = 11; // 왼쪽 모터 제어선 IN4int L_MotorSpeed = 185; // 왼쪽 모터 속도int R_MotorSpeed = 160; // 오른쪽 모터 속도int R_Motor = 0;int L_Motor = 0;int mode = 0;void setup() {pinMode(RightMotor_E_pin, OUTPUT); // 출력모드로 설정pinMode(RightMotor_1_pin, OUTPUT);pinMode(RightMotor_2_pin, OUTPUT);pinMode(LeftMotor_3_pin, OUTPUT);pinMode(LeftMotor_4_pin, OUTPUT);pinMode(LeftMotor_E_pin, OUTPUT);Serial.begin(9600);bluetooth.begin(9600);Serial.println("Welcome Eduino!");}void loop() {if(bluetooth.available()){char Blue_Val = bluetooth.read();Serial.print(Blue_Val);control_SmartCar(Blue_Val);if (Ultra_d < 150) {Serial.println("150 이하.");motor_role(LOW, LOW); // 후진delay(1000);analogWrite(RightMotor_E_pin, 0);analogWrite(LeftMotor_E_pin, 0);delay(200);if(mode == 0){motor_role(R_Motor, L_Motor);}else if(mode == 1){Right_role(R_Motor, L_Motor);}else if(mode == 2){Left_role(R_Motor, L_Motor);}else if(mode == 4){left_rotation(R_Motor, L_Motor);}else if(mode == 5){right_rotation(R_Motor, L_Motor);}else{analogWrite(RightMotor_E_pin, 0);analogWrite(LeftMotor_E_pin, 0);}}}void control_SmartCar(char Blue_val){if( Blue_val == 'g' ){ // "g" 버튼, 명령 : 전진R_Motor = HIGH; L_Motor = HIGH; mode = 0;}else if( Blue_val == 'r' ){ // "r" 버튼, 명령 : 우회전mode = 1;}else if( Blue_val == 'l' ){ // "l" 버튼, 명령 : 좌회전mode = 2;}else if( Blue_val == 'b' ){ // "b" 버튼, 명령 : 후진R_Motor = LOW; L_Motor = LOW; mode = 0;}else if( Blue_val == 's' ){ // "s" 버튼, 명령 : 정지R_Motor = HIGH; L_Motor = HIGH; mode = 3;}else if( Blue_val == 'q' ){ // "q" 버튼, 명령 : 제자리 좌회전mode = 4;}else if( Blue_val == 'w' ){ // "w" 버튼, 명령 : 제자리 우회전mode = 5;}else{ // 지정하지 않은 주소입력.}}void motor_role(int R_motor, int L_motor){digitalWrite(RightMotor_1_pin, R_motor);digitalWrite(RightMotor_2_pin, !R_motor);digitalWrite(LeftMotor_3_pin, L_motor);digitalWrite(LeftMotor_4_pin, !L_motor);analogWrite(RightMotor_E_pin, R_MotorSpeed); // 우측 모터 속도값analogWrite(LeftMotor_E_pin, L_MotorSpeed); // 좌측 모터 속도값}void Right_role(int R_motor, int L_motor){digitalWrite(RightMotor_1_pin, R_motor);digitalWrite(RightMotor_2_pin, !R_motor);digitalWrite(LeftMotor_3_pin, L_motor);digitalWrite(LeftMotor_4_pin, !L_motor);analogWrite(RightMotor_E_pin, max(R_MotorSpeed*0.4,90)); // 우측 모터 속도값analogWrite(LeftMotor_E_pin, 255); // 좌측 모터 속도값}void Left_role(int R_motor, int L_motor){digitalWrite(RightMotor_1_pin, R_motor);digitalWrite(RightMotor_2_pin, !R_motor);digitalWrite(LeftMotor_3_pin, L_motor);digitalWrite(LeftMotor_4_pin, !L_motor);analogWrite(RightMotor_E_pin, 255); // 우측 모터 속도값analogWrite(LeftMotor_E_pin, max(L_MotorSpeed*0.4,90)); // 좌측 모터 속도값}void left_rotation(int R_motor, int L_motor){digitalWrite(RightMotor_1_pin, HIGH);digitalWrite(RightMotor_2_pin, LOW);digitalWrite(LeftMotor_3_pin, LOW);digitalWrite(LeftMotor_4_pin, HIGH);analogWrite(RightMotor_E_pin, R_MotorSpeed); // 우측 모터 속도값analogWrite(LeftMotor_E_pin, L_MotorSpeed); // 좌측 모터 속도값}void right_rotation(int R_motor, int L_motor){digitalWrite(RightMotor_1_pin, LOW);digitalWrite(RightMotor_2_pin, HIGH);digitalWrite(LeftMotor_3_pin, HIGH);digitalWrite(LeftMotor_4_pin, LOW);analogWrite(RightMotor_E_pin, R_MotorSpeed); // 우측 모터 속도값analogWrite(LeftMotor_E_pin, L_MotorSpeed); // 좌측 모터 속도값}
댓글 2
조회수 978master님의 댓글
master 작성일
if(Ultra_d<150){
Serial.println("150 이하.");
motor_role(0,0); delay(1000); // 후진
analogWrite(RightMotor_E_pin,0); analogWrite(LeftMotor_E_pin,0); delay(200);
return; // <-- 추가
} // <-- 추가
둘둘이님의 댓글
둘둘이
댓글 감사합니다! 혹시 추가해서 해봤는데도 장애물을 보고 멈추지 않는데 다른부분 틀린곳이 있을까요? ㅠ ㅠ