#include // assign pin values for each of the motors const int motor1_1 = 3; // motor 1 is right const int motor1_2 = 4; const int motor2_1 = 5; // motor 2 is left const int motor2_2 = 6; const int motor3_1 = A0; // motor 3 is up and down const int motor3_2 = A2; unsigned long motor1_timeout = 0; unsigned long motor2_timeout = 0; unsigned long motor3_timeout = 0; unsigned long TIMEOUT = 250; // make timeout value 500 ms // assign pin value for the IR receiver pin int RECV_PIN = 10; IRrecv irrecv(RECV_PIN); decode_results results; // define HEX values for blimp motions long BLIMP_FORWARD = 0xA25D01FE; // these are the same as the TV remote I'm using long BLIMP_BACKWARD = 0xA25D817E; long BLIMP_LEFT = 0xA25D8A75; //0xF24A08F7 long BLIMP_RIGHT = 0xA25DB24D; // 0xF24A48B7; long BLIMP_UP = 0xA25D04FB; //0xF24A8877; long BLIMP_DOWN = 0xA25D7B84; // 0xF24A28D7 void setup(){ pinMode(13, OUTPUT); digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); pinMode(motor1_1, OUTPUT); pinMode(motor1_2, OUTPUT); pinMode(motor2_1, OUTPUT); pinMode(motor2_2, OUTPUT); pinMode(motor3_1, OUTPUT); pinMode(motor3_2, OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop(){ // read signal from IR controller if (irrecv.decode(&results)) { digitalWrite(13, HIGH); Serial.println(results.value, HEX); if (results.value == BLIMP_FORWARD){ // for blimp forward, have both motors move forward simultaneously digitalWrite(motor1_1, HIGH); digitalWrite(motor1_2, LOW); digitalWrite(motor2_1, HIGH); digitalWrite(motor2_2, LOW); motor1_timeout = millis(); motor2_timeout = millis(); }else if (results.value == BLIMP_BACKWARD){// for blimp backward, have both motors move backward simultaneously digitalWrite(motor1_1, LOW); digitalWrite(motor1_2, HIGH); digitalWrite(motor2_1, LOW); digitalWrite(motor2_2, HIGH); motor1_timeout = millis(); motor2_timeout = millis(); }else if (results.value == BLIMP_LEFT){ // blimp left, have right motor go forward, and left motor go backwards digitalWrite(motor1_1, HIGH); digitalWrite(motor1_2, LOW); digitalWrite(motor2_1, LOW); digitalWrite(motor2_2, HIGH); motor1_timeout = millis(); motor2_timeout = millis(); }else if (results.value == BLIMP_RIGHT){ // blimp right, have left motor go forward, and right motor go backwards digitalWrite(motor1_1, LOW); digitalWrite(motor1_2, HIGH); digitalWrite(motor2_1, HIGH); digitalWrite(motor2_2, LOW); motor1_timeout = millis(); motor2_timeout = millis(); }else if (results.value == BLIMP_UP){ // blimp up, have motor go forwards digitalWrite(motor3_1, HIGH); digitalWrite(motor3_2, LOW); motor3_timeout = millis(); }else if (results.value == BLIMP_DOWN){ // blimp down, have motor go backwards digitalWrite(motor3_1, LOW); digitalWrite(motor3_2, HIGH); motor3_timeout = millis(); } irrecv.resume(); // Receive the next value } if (millis()-motor1_timeout >= TIMEOUT){ // if no signal in 500 ms, turn motors off digitalWrite(motor1_1, LOW); digitalWrite(motor1_2, LOW); } if (millis()-motor2_timeout >= TIMEOUT){ digitalWrite(motor2_1, LOW); digitalWrite(motor2_2, LOW); } if (millis()-motor3_timeout >= TIMEOUT){ digitalWrite(motor3_1, LOW); digitalWrite(motor3_2, LOW); } digitalWrite(13, LOW); }