자동차 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 } }