BASIC4MCU | 질문게시판 | 아두이노 rc카 조종
페이지 정보
작성자 아이스 작성일2018-08-20 21:48 조회6,803회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=5291
본문
1. 아래 소스는 제가 만든 소스인데 블루투스 와 적외선 리모컨으로 조종이 가능할까요?#include <boarddefs.h>#include <IRremote.h>#include <IRremoteInt.h>#include <ir_Lego_PF_BitStreamEncoder.h>//=====================================////차량 속도 제어#define level1 0x08//속도 제어 레벨1#define level2 0x09//속도 제어 레벨2#define level3 0x0A//속도 제어 레벨3#define level4 0x0B//속도 제어 레벨4#define level5 0x0C//속도 제어 레벨5#define level6 0x0D//속도 제어 레벨6#define level7 0x0E//속도 제어 레벨7#define level8 0x0F//속도 제어 레벨8//==============================//==============================int RECV_PIN = 2;IRrecv irrecv(RECV_PIN);decode_results results;int on = 0;//标志位unsigned long last = millis();long run_car = 0x00FF18E7;//버튼2long back_car = 0x00FF4AB5;//버튼8long left_car = 0x00FF10EF;//버튼4long right_car = 0x00FF5AA5;//버튼6long stop_car = 0x00FF38C7;//버튼5long left_turn = 0x00ff30CF;//버튼1long right_turn = 0x00FF7A85;//버튼3//==============================int Left_motor_back=9;int Left_motor_go=5;int Right_motor_go=6;int Right_motor_back=10;int Right_motor_en=8;int Left_motor_en=7;int control;//PWM 제어량void setup(){//pinMode(Left_motor_go,OUTPUT); // PIN 5 (PWM)pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)pinMode(Right_motor_go,OUTPUT);// PIN 6 (PWM)pinMode(Right_motor_back,OUTPUT);// PIN 10 (PWM)pinMode(Right_motor_en,OUTPUT);// PIN 8 (PWM)pinMode(Left_motor_en,OUTPUT);// PIN 7 (PWM)pinMode(13, OUTPUT);Serial.begin(9600);irrecv.enableIRIn();control=0;}void run(){digitalWrite(Left_motor_en,HIGH);digitalWrite(Left_motor_en,HIGH);digitalWrite(Right_motor_go,HIGH);digitalWrite(Right_motor_back,LOW);analogWrite(Right_motor_go,control);//analogWrite(Right_motor_back,0);analogWrite(Right_motor_go,200);analogWrite(Right_motor_back,0);digitalWrite(Left_motor_go,HIGH);digitalWrite(Left_motor_back,LOW);analogWrite(Left_motor_go,200);analogWrite(Left_motor_back,0);analogWrite(Left_motor_go,control-15);//delay(time * 100);}void brake(){digitalWrite(Right_motor_go,LOW);digitalWrite(Right_motor_back,LOW);digitalWrite(Left_motor_go,LOW);digitalWrite(Left_motor_back,LOW);//delay(time * 100);}void left(){digitalWrite(Right_motor_go,HIGH);digitalWrite(Right_motor_back,LOW);analogWrite(Right_motor_go,control);analogWrite(Right_motor_go,200);analogWrite(Right_motor_back,0);digitalWrite(Left_motor_go,LOW);digitalWrite(Left_motor_back,LOW);analogWrite(Left_motor_go,0);analogWrite(Left_motor_back,0);//delay(time * 100);}void spin_left(){digitalWrite(Right_motor_go,HIGH);digitalWrite(Right_motor_back,LOW);analogWrite(Right_motor_go,control);analogWrite(Right_motor_go,200);analogWrite(Right_motor_back,0);digitalWrite(Left_motor_go,LOW);digitalWrite(Left_motor_back,HIGH);//analogWrite(Left_motor_go,0);analogWrite(Left_motor_go,0);analogWrite(Left_motor_back,200);analogWrite(Left_motor_back,control);//delay(time * 100);}void right(){digitalWrite(Right_motor_go,LOW);digitalWrite(Right_motor_back,LOW);analogWrite(Right_motor_go,0);analogWrite(Right_motor_back,0);digitalWrite(Left_motor_go,HIGH);digitalWrite(Left_motor_back,LOW);analogWrite(Left_motor_go,control);analogWrite(Left_motor_go,200);analogWrite(Left_motor_back,0);//analogWrite(Left_motor_back,0);////delay(time * 100); //}void spin_right(){digitalWrite(Right_motor_go,LOW);digitalWrite(Right_motor_back,HIGH);analogWrite(Right_motor_go,0);analogWrite(Right_motor_back,control);analogWrite(Right_motor_back,200);digitalWrite(Left_motor_go,HIGH);digitalWrite(Left_motor_back,LOW);analogWrite(Left_motor_go,200);analogWrite(Left_motor_back,0);analogWrite(Left_motor_go,control);//delay(time * 100); //}void back(){digitalWrite(Right_motor_go,LOW);digitalWrite(Right_motor_back,HIGH);analogWrite(Right_motor_go,0);analogWrite(Right_motor_back,control);analogWrite(Right_motor_back,150);digitalWrite(Left_motor_go,LOW);digitalWrite(Left_motor_back,HIGH);analogWrite(Left_motor_go,0);analogWrite(Left_motor_back,150);analogWrite(Left_motor_back,control-15);////delay(time * 100); //}void dump(decode_results *results){int count = results->rawlen;if (results->decode_type == UNKNOWN){//Serial.println("Could not decode message");brake();}/*else{if (results->decode_type == NEC){Serial.print("Decoded NEC: ");}else if (results->decode_type == SONY){Serial.print("Decoded SONY: ");}else if (results->decode_type == RC5){Serial.print("Decoded RC5: ");}else if (results->decode_type == RC6){Serial.print("Decoded RC6: ");}Serial.print(results->value, HEX);Serial.print(" (");Serial.print(results->bits, DEC);Serial.println(" bits)");}Serial.print("Raw (");Serial.print(count, DEC);Serial.print("): ");for (int i = 0; i < count; i++){if ((i % 2) == 1){Serial.print(results->rawbuf[i]*USECPERTICK, DEC);}else{Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);}Serial.print(" ");}Serial.println("");*/}void loop(){if (irrecv.decode(&results)){// If it's been at least 1/4 second since the last// IR received, toggle the relayif (millis() - last > 250){on = !on;//标志位置反digitalWrite(13, on ? HIGH : LOW);dump(&results);}if (results.value == run_car )//버튼2run();//前进if (results.value == back_car )//버튼8back();//后退if (results.value == left_car )//버튼4left();//左转if (results.value == right_car )//버튼6right();//右转if (results.value == stop_car )//버튼5brake();//停车if (results.value == left_turn )//버튼1spin_left();//左旋转if (results.value == right_turn )//버튼3spin_right();//右旋转last = millis();irrecv.resume(); // Receive the next value}}2. 위 소스에 아래 소스도 합치려고 했는데 넣으면 에러가 나더라구요....void loop(){while(Serial.available())switch (Serial.read()){case run_car:run();break;case back_car:back();break;case left_car:left();break;case right_car:right();break;case stop_car:brake();break;case left_turn:spin_left();break;case right_turn:spin_right();break;//======속도선택=====case level1:control=50;break;case level2:control=100;break;case level3:control=140;break;case level4:control=160;break;case level5:control=180;break;case level6:control=200;break;case level7:control=220;break;case level8:control=255;break;default:brake();break;}}
댓글 1
조회수 6,803아이스님의 댓글
아이스 작성일소스2개를 합치려고 합니다..