BASIC4MCU | 질문게시판 | 답변 : RC카에 적외선 감지센서를 달아서 사용할려고하는데 잘 안돼네요 ㅠㅠ
페이지 정보
작성자 master 작성일2018-10-17 18:23 조회33,301회 댓글5건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=5412
작성일
작성일
작성일
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-10-17 오후 6:27:53// by Ok-Hyun Park이번에 RC카를 만들게 됐는데RC카에 적외선 감지센서를 달아 RC카 구동중에 센서에 물체가 감지가 되면 우회전을 하게 할려고 했습니다근데 생각보다 너무 어렵네요 ㅠㅠ 빨간색으로 표시한게 제가 추가한 코딩입니다 ㅠㅠ제가 초보자라 아직 많이 모릅니다 전문가분들의 도움이 절실합니다 ㅠㅠ///*명령*1.블루투스 g->Go 전진 명령*2.블루투스 b->Back 후진 명령*3.블루투스 l->left 좌회전 명령*4.블루투스 r->right 우회전 명령*5.블루투스 s->stop 정지 명령**/#include <SoftwareSerial.h> // 시리얼 통신을 위한 라이브러리 선언#define BT_RXD 3 // 아두이노의 4번핀을 RX(받는 핀)로 설정#define BT_TXD 4 // 아두이노 3번핀을 TX(보내는 핀)로 설정SoftwareSerial bluetooth(BT_RXD,BT_TXD); // 블루투스 통신을 위한 설정//#define CAR_DIR_FW 1 // 전진.#define CAR_DIR_BW 2 // 후진.#define CAR_DIR_LF 3 // 좌회전.#define CAR_DIR_RF 4 // 우회전#define CAR_DIR_ST 5 // 정지.//char E_carDir=0;int Edu_count=0;//int RmEN=5,Rm1_pin= 8,Rm2_pin= 9; // 오른쪽 모터 제어선 IN2int LmEN=6,Lm3_pin=10,Lm4_pin=11; // 왼쪽 모터의 Enable&PWMint Gled=12,Yled=7,Rled=13;int sensorpin=2;int Speed=153; // 최대 속도의 60%int pSpeed=0;//void SmartCar_Stop(){ // 정지if(E_carDir==CAR_DIR_FW||E_carDir==CAR_DIR_LF||E_carDir==CAR_DIR_RF){for(int i=Speed; i>=0; i=i-5){ analogWrite(RmEN,i); analogWrite(LmEN,i); delay(20); }}else if(E_carDir==CAR_DIR_BW){for(int i=Speed; i>=0; i=i-5){ analogWrite(RmEN,i); analogWrite(LmEN,i); delay(20); }}digitalWrite(Gled,LOW); digitalWrite(Rled,HIGH); digitalWrite(Yled,LOW);digitalWrite(RmEN,LOW); digitalWrite(LmEN,LOW); // 정지}//void SmartCar_Go(){ // 전진digitalWrite(Rm1_pin,HIGH); digitalWrite(Rm2_pin,LOW);digitalWrite(Lm3_pin,HIGH); digitalWrite(Lm4_pin,LOW);for(int i=pSpeed; i<=Speed; i=i+5){ analogWrite(RmEN,i); analogWrite(LmEN,i); delay(20); }digitalWrite(Gled,HIGH); digitalWrite(Rled,LOW); digitalWrite(Yled,LOW);pSpeed=Speed;}//void SmartCar_Back(){ // 후진digitalWrite(Rm1_pin,LOW); digitalWrite(Rm2_pin,HIGH);digitalWrite(Lm3_pin,LOW); digitalWrite(Lm4_pin,HIGH);for(int i=pSpeed;i<=Speed;i=i+5){ analogWrite(RmEN,i); analogWrite(LmEN,i); delay(20); }digitalWrite(Gled,HIGH); digitalWrite(Rled,LOW); digitalWrite(Yled,HIGH);pSpeed=Speed;}//void SmartCar_Left(){ // 좌회전digitalWrite(Rm1_pin,HIGH); digitalWrite(Rm2_pin,LOW);digitalWrite(Lm3_pin,HIGH); digitalWrite(Lm4_pin,LOW);for(int i=pSpeed;i<=Speed;i=i+5){ analogWrite(RmEN,i*1.4); analogWrite(LmEN,i*0.2); delay(50); } // 140%// 20%digitalWrite(Gled,LOW); digitalWrite(Rled,LOW); digitalWrite(Yled,HIGH);pSpeed=Speed;}//void SmartCar_Right(){ // 우회전digitalWrite(Rm1_pin,HIGH); digitalWrite(Rm2_pin,LOW);digitalWrite(Lm3_pin,HIGH); digitalWrite(Lm4_pin,LOW);for(int i=pSpeed;i<=Speed;i=i+5){ analogWrite(RmEN,i*0.2); analogWrite(LmEN,i*1.4); delay(50); } // 20%// 140%digitalWrite(Gled,LOW); digitalWrite(Rled,LOW); digitalWrite(Yled,HIGH);pSpeed=Speed;}// 제어명령을 실제로 수행하는 함수void controllerByBTCommand(char szBTCmd){if(szBTCmd=='+'){ // 모터의 speed uppSpeed=Speed; Speed+=20; Speed=min(Speed,255); Serial.print("Speed Up "); Serial.println(Speed);}else if(szBTCmd=='-'){ // 모터의 speed downpSpeed=Speed; Speed-=20; Speed=max(Speed,50); Serial.print("Speed down "); Serial.println(Speed);}else if(szBTCmd=='g')E_carDir=CAR_DIR_FW; // 전진else if(szBTCmd=='s')E_carDir=CAR_DIR_ST; // 정지else if(szBTCmd=='b')E_carDir=CAR_DIR_BW; // 후진else if(szBTCmd=='l')E_carDir=CAR_DIR_LF; // 좌회전else if(szBTCmd=='r')E_carDir=CAR_DIR_RF; // 우회전}// 방향 전환에 따른 동작 명령 함수//void Sensor(){int state=digitalRead(sensorpin); Serial.print("sensorpin="); Serial.println(state);if(state==0){ E_carDir=CAR_DIR_RF; }Serial.println("Warning");pSpeed=Speed;}//void SmartCar_Update(){Sensor();if (E_carDir==CAR_DIR_FW)SmartCar_Go(); // 전진else if(E_carDir==CAR_DIR_BW)SmartCar_Back(); // 후진else if(E_carDir==CAR_DIR_LF)SmartCar_Left(); // 좌회전else if(E_carDir==CAR_DIR_RF)SmartCar_Right(); // 우회전else if(E_carDir==CAR_DIR_ST)SmartCar_Stop(); // 정지.}//void setup(){// declare the ledPin as an OUTPUT:pinMode(RmEN,OUTPUT); pinMode(Rm1_pin,OUTPUT); pinMode(Rm2_pin,OUTPUT);pinMode(LmEN,OUTPUT); pinMode(Lm3_pin,OUTPUT); pinMode(Lm4_pin,OUTPUT);pinMode(Gled,OUTPUT); pinMode(Yled,OUTPUT); pinMode(Rled,OUTPUT);pinMode(sensorpin,INPUT);Serial.begin(9600); // PC와 아두이노간 시리얼 통신속도를 9600bps로 설정bluetooth.begin(9600); // 블루투스와 아두이노간 시리얼 통신속도를 9600bps로 설정digitalWrite(RmEN,HIGH); // 오른쪽 모터의 Enable 핀 활성화digitalWrite(LmEN,HIGH); // 왼쪽 모터의 Enable 핀 활성화}//void loop(){char szRecvCmd=bluetooth.read(); // 블루투스 통신을 통한 명령 받기controllerByBTCommand(szRecvCmd);SmartCar_Update(); // 스마트카 상태 업데이트if ((Edu_count%20)==0){ Edu_count=0; delay(10); }else if((Edu_count%10)==0){ delay(10); }Edu_count++;}
댓글 5
조회수 33,301윤재님의 댓글
윤재 작성일이대로 업로드 했는데도 센서가 작동을 안하네요 ㅠㅠ
윤재님의 댓글
윤재 작성일센서의 out핀을 디지털 2번핀에 꽂았는데 혹시 다른핀 사용해봐야되나요?ㅠㅠ
master님의 댓글
master
소스에 오타가 있었는데요
다시 복사해서 돌려보세요
윤재님의 댓글
윤재
됩니다! 감사합니다 ㅠㅠ
윤재님의 댓글
윤재
master님 혹시 하나만 더 여쭤봐도될까요? ㅠㅠ