BASIC4MCU | 질문게시판 | 답변 : 아두이노 블루투스와 초음파센서를 이용한 장애물 정지
페이지 정보
작성자 master 작성일2023-09-25 16:59 조회2,075회 댓글1건본문
#include <SoftwareSerial.h>
#define BT_RXD 3
#define BT_TXD 4
SoftwareSerial bluetooth(BT_RXD,BT_TXD);
//
int R_1pin=8,R_2pin=9,R_Epin=5;
int L_3pin=10,L_4pin=11,L_Epin=6;
//
int L_Motor=0,L_Spd=185;
int R_Motor=0,R_Spd=160;
int mode=='s'; // 초기조건 정지
//
void setup(){
pinMode(R_1pin,OUTPUT); pinMode(R_2pin,OUTPUT); pinMode(R_Epin,OUTPUT);
pinMode(L_3pin,OUTPUT); pinMode(L_4pin,OUTPUT); pinMode(L_Epin,OUTPUT);
Serial.begin(9600); Serial.println("Welcome Eduino!");
bluetooth.begin(9600);
}
//
void loop(){
if(bluetooth.available()){
char Blue_Val=bluetooth.read();
Serial.print(Blue_Val);
if(Blue_val=='g'){ mode='g'; Go(); } // "g" 버튼,명령 : 전진
if(Blue_val=='b'){ mode='b'; Back()(); } // "b" 버튼,명령 : 후진
if(Blue_val=='r'){ mode='r'; R_role(); } // "r" 버튼,명령 : 우회전
if(Blue_val=='l'){ mode='l'; L_role(); } // "l" 버튼,명령 : 좌회전
if(Blue_val=='q'){ mode='q'; L_rotation(); } // "q" 버튼,명령 : 제자리 좌회전
if(Blue_val=='w'){ mode='w'; R_rotation(); } // "w" 버튼,명령 : 제자리 우회전
if(Blue_val=='s'){ mode='s'; Stop(); } // "s" 버튼,명령 : 정지
}
//---------------------------------------
if(mode=='g'){ // 전진 시에만 거리체크
if(Ultra_d<150){
Serial.println("150 이하.");
Motor(0,0); delay(1000); // 후진
analogWrite(R_Epin,0); analogWrite(L_Epin,0); delay(200);
mode='s'; // 정지
}
}
}
//
void Stop(){
digitalWrite(R_1pin,1); digitalWrite(R_2pin,1); analogWrite(R_Epin,R_Spd);
digitalWrite(L_3pin,1); digitalWrite(L_4pin,1); analogWrite(L_Epin,L_Spd);
}
void Go(){
digitalWrite(R_1pin,1); digitalWrite(R_2pin,0); analogWrite(R_Epin,R_Spd);
digitalWrite(L_3pin,1); digitalWrite(L_4pin,0); analogWrite(L_Epin,L_Spd);
}
void Back(){
digitalWrite(R_1pin,0); digitalWrite(R_2pin,1); analogWrite(R_Epin,R_Spd);
digitalWrite(L_3pin,0); digitalWrite(L_4pin,1); analogWrite(L_Epin,L_Spd);
}
void R_role(int R,int L){
digitalWrite(R_1pin,1); digitalWrite(R_2pin,0); analogWrite(R_Epin,max(R_Spd*0.4,90));
digitalWrite(L_3pin,0); digitalWrite(L_4pin,1); analogWrite(L_Epin,255);
}
void L_role(int R,int L){
digitalWrite(R_1pin,0); digitalWrite(R_2pin,1); analogWrite(R_Epin,255);
digitalWrite(L_3pin,1); digitalWrite(L_4pin,0); analogWrite(L_Epin,max(L_Spd*0.4,90));
}
void L_rotation(){
digitalWrite(R_1pin,1); digitalWrite(R_2pin,0); analogWrite(R_Epin,R_Spd);
digitalWrite(L_3pin,0); digitalWrite(L_4pin,1); analogWrite(L_Epin,L_Spd);
}
void R_rotation(){
digitalWrite(R_1pin,0); digitalWrite(R_2pin,1); analogWrite(R_Epin,R_Spd);
digitalWrite(L_3pin,1); digitalWrite(L_4pin,0); analogWrite(L_Epin,L_Spd);
}
거리센서가 뭔지 모르겠지만
if(mode=='g'){ // 전진 시에만 거리체크
// 여기에서 거리측정을 해야 합니다.
if(Ultra_d<150){
댓글 1
조회수 2,075둘둘이님의 댓글
둘둘이 작성일아하 저기서 거리를 측전해야하는군요 한번 해보겠습니다 감사합니다 !