BASIC4MCU | 질문게시판 | 답변 : master님 적외선 추가 질문입니다 ㅠㅠ
페이지 정보
작성자 master 작성일2018-10-23 15:13 조회7,236회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=5497
본문
//#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 Speed=153;//int RmEN=5,Rm1= 8,Rm2= 9; // 오른쪽 모터 제어선 IN2int LmEN=6,Lm3=10,Lm4=11; // 왼쪽 모터의 Enable&PWMint Gled=12,Yled=7,Rled=13;int sensorpin=2;//void SmartCar_Stop(){ // 정지digitalWrite(Gled,LOW); digitalWrite(Rled,HIGH); digitalWrite(Yled,LOW);digitalWrite(Rm1,LOW); digitalWrite(Rm2,LOW); // 정지digitalWrite(Lm3,LOW); digitalWrite(Lm4,LOW); // 정지}//void SmartCar_Go(){ // 전진digitalWrite(Rm1,HIGH); digitalWrite(Rm2,LOW);digitalWrite(Lm3,HIGH); digitalWrite(Lm4,LOW);digitalWrite(Gled,HIGH); digitalWrite(Rled,LOW); digitalWrite(Yled,LOW);}//void SmartCar_Back(){ // 후진digitalWrite(Rm1,LOW); digitalWrite(Rm2,HIGH);digitalWrite(Lm3,LOW); digitalWrite(Lm4,HIGH);digitalWrite(Gled,HIGH); digitalWrite(Rled,LOW); digitalWrite(Yled,HIGH);}//void SmartCar_Left(){ // 좌회전digitalWrite(Rm1,HIGH); digitalWrite(Rm2,LOW);digitalWrite(Lm3,HIGH); digitalWrite(Lm4,LOW);digitalWrite(Gled,LOW); digitalWrite(Rled,LOW); digitalWrite(Yled,HIGH);}//void SmartCar_Right(){ // 우회전digitalWrite(Rm1,HIGH); digitalWrite(Rm2,LOW);digitalWrite(Lm3,HIGH); digitalWrite(Lm4,LOW);digitalWrite(Gled,LOW); digitalWrite(Rled,LOW); digitalWrite(Yled,HIGH);}// 제어명령을 실제로 수행하는 함수void controllerByBTCommand(char szBTCmd){if(szBTCmd=='+'){ // 모터의 speed upSpeed+=20; if(Speed>255)Speed=255;analogWrite(RmEN,Speed); analogWrite(LmEN,Speed);Serial.print("Speed Up "); Serial.println(Speed);}else if(szBTCmd=='-'){ // 모터의 speed downSpeed-=20; if(Speed<0)Speed=0;analogWrite(RmEN,Speed); analogWrite(LmEN,Speed);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_BW; }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(Rm1,OUTPUT); pinMode(Rm2,OUTPUT);pinMode(Lm3,OUTPUT); pinMode(Lm4,OUTPUT);pinMode(Gled,OUTPUT); pinMode(Yled,OUTPUT); pinMode(Rled,OUTPUT);Serial.begin(9600); // PC와 아두이노간 시리얼 통신속도를 9600bps로 설정bluetooth.begin(9600); // 블루투스와 아두이노간 시리얼 통신속도를 9600bps로 설정analogWrite(RmEN,Speed); // 오른쪽 모터의 Enable 핀 활성화analogWrite(LmEN,Speed); // 왼쪽 모터의 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++;}
모터 함수에서 스피드 설정없이 핀만 제어 했으니 이 코드로 돌려보세요
댓글 0
조회수 7,236등록된 댓글이 없습니다.