험비자동차 코드

자동차 IR 리모컨 활용 최근 버전

#include <AFMotor.h>            // Adafruit 모터 쉴드 라이브러리 사용
#include <SoftwareSerial.h>     //블루투스 통신을 위한 기본 헤더 선언
#include <IRremote.h>//IR리모컨라이브러리                             
SoftwareSerial BTSerial(2, 3);  // 블루투스 모듈과 통신을 위한 아두이노 연결핀(TX = 2 , RX = 3)

//
int RECV_PIN = A4;//포트설정
IRrecv irrecv(RECV_PIN);
decode_results results;//구조체정의
int on = 0;//플래그
unsigned long last = millis();

long go_forward = 0x00FF18E7;//2번 버튼
long go_backward = 0x00FF4AB5;//8번 버튼
long go_left = 0x00FF10EF;//4번 버튼
long go_right = 0x00FF5AA5;//6번 버튼
long stop_car = 0x00FF38C7;//5번 버튼
long left_turn = 0x00ff30CF;//1번 버튼
long right_turn = 0x00FF7A85;//3번 버튼
long fire_cannon = 0x00FFA857; //+ 버튼
//
//모터의 전후좌우 방향을 컨트롤하는 PIN번호를 상수로 선언
AF_DCMotor MOTOR1(1);     // 모터쉴드 M1 지정
AF_DCMotor MOTOR2(2);     // 모터쉴드 M2 지정
AF_DCMotor MOTOR3(3);     // 모터쉴드 M3 지정
AF_DCMotor MOTOR4(4);     // 모터쉴드 M4 지정
#define ActionTime 3000
/*  for (i=0; i <255; i++) {
    motor.setSpeed(i);
    delay(20);
  }
*/

void Fire_Cannon() {

  digitalWrite(9, HIGH);
  delay(3000);
  digitalWrite(9, LOW);
  delay(1000);
  
}

void Stop_Car() {
  MOTOR1.run(RELEASE);
  MOTOR2.run(RELEASE);
  MOTOR3.run(RELEASE);
  MOTOR4.run(RELEASE);
  delay(20);
}

void Go_Forward() {
  MOTOR1.run(FORWARD);
  MOTOR2.run(FORWARD);
  MOTOR3.run(FORWARD);
  MOTOR4.run(FORWARD);
  delay(20);
}

void Go_Backward() {
  MOTOR1.run(BACKWARD);
  MOTOR2.run(BACKWARD);
  MOTOR3.run(BACKWARD);
  MOTOR4.run(BACKWARD);
  delay(20);
}

void Go_Left() {
  MOTOR1.run(FORWARD);
  MOTOR2.run(BACKWARD);
  MOTOR3.run(BACKWARD);
  MOTOR4.run(FORWARD);
  delay(20);
}

void Go_Right() {
  MOTOR1.run(BACKWARD);
  MOTOR2.run(FORWARD);
  MOTOR3.run(FORWARD);
  MOTOR4.run(BACKWARD);
  delay(20);
}

void Spin_Left() {
  MOTOR1.run(FORWARD);
  MOTOR2.run(BACKWARD);
  MOTOR3.run(FORWARD);
  MOTOR4.run(BACKWARD);
  delay(20);
}

void Spin_Right() {
  MOTOR1.run(BACKWARD);
  MOTOR2.run(FORWARD);
  MOTOR3.run(BACKWARD);
  MOTOR4.run(FORWARD);
  delay(20);
}
//
//void dump(decode_results *results)
//{
//  int count = results->rawlen;
//  if (results->decode_type == UNKNOWN) 
//  {
//    brake();
//  } 
//}
void setup() {
  BTSerial.begin(9600); //블루투스와 통신하기 위한 속도설정(모듈의속도 확인필요)
  Serial.begin(9600);   // 시리얼(모니터) 통신 속도를 설정
  MOTOR1.setSpeed(150);
  MOTOR2.setSpeed(150);
  MOTOR3.setSpeed(150);
  MOTOR4.setSpeed(150);
  irrecv.enableIRIn();
  pinMode(9, OUTPUT);
}

void loop() {
/* 기본 동작  
  Go_Forward();
  Stop_Release();
  Go_Left();
  Stop_Release();
  Go_Right();
  Stop_Release();
  Go_Backward();
  Stop_Release();
*/
    
  if (irrecv.decode(&results)) //IR리모컨 라이브러리 호출
  {
    Serial.println(results.value, HEX);

    if(results.value == fire_cannon) // 대포 발사
      Fire_Cannon();


      
//     if (millis() - last > 250) //수신신호 결정
//    {
//      on = !on;//수신신호 반전
//      digitalWrite(13, on ? HIGH : LOW);//수신신호를 LED(13)로 표시
//      dump(&results);//수신신호 디코딩
//    }
    if (results.value == go_forward )//2번 버튼
      Go_Forward();//전진
    if (results.value == go_backward )//8번 버튼
      Go_Backward();//후진
    if (results.value == go_left )//4번 버튼
      Go_Left();//좌회전
    if (results.value == go_right )//6번 버튼
      Go_Right();//우회전
    if (results.value == stop_car )//5번 버튼
      Stop_Car();//정지
    if (results.value == left_turn )//1번 버튼
      Spin_Left();//좌스핀
    if (results.value == right_turn )//3번 버튼
      Spin_Right();//우스핀
    last = millis();      
    irrecv.resume(); // Receive the next value
  }   
  
  
  

}