Você deve colocar algum "contador" para desligar o acionamento do motor, após algumas interações do loop sem receber sinal do controle.
#include <IRremote.h>
int SemSinal = 0; // Controla quantas vezes rodou sem sinal
int motor1pin1 = 3;
int motor1pin2 = 4;
int motor2pin1 = 5;
int motor2pin2 = 6;
int led1 = 8;
int led2 = 9;
int receiver = A0;
IRrecv irrecv(receiver);
decode_results results;
void setup(){
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
pinMode(motor2pin1, OUTPUT);
pinMode(motor2pin2, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(receiver, INPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop(){
if (irrecv.decode(&results)){
SemSinal = 0;
switch(results.value){
//CONTROLE
case 16736925:{ // Mode
digitalWrite(motor1pin1,HIGH);
digitalWrite(motor1pin2,LOW);
digitalWrite(motor2pin1,HIGH);
digitalWrite(motor2pin2,LOW);
Serial.println("IR - FRENTE");
break;
}
case 16761405:{ // >>/
digitalWrite(motor1pin1,HIGH);
digitalWrite(motor1pin2,LOW);
digitalWrite(motor2pin1,LOW);
digitalWrite(motor2pin2,HIGH);
Serial.println(" GIRAR HORARIO ");
break;
}
case 16720605:{ // >//
digitalWrite(motor1pin1,LOW);
digitalWrite(motor1pin2,HIGH);
digitalWrite(motor2pin1,HIGH);
digitalWrite(motor2pin2,LOW);
Serial.println("GIRAR ANTI-HORARIO");
break;
}
case 16754775:{ // VOL -
digitalWrite(motor1pin1,LOW);
digitalWrite(motor1pin2,HIGH);
digitalWrite(motor2pin1,LOW);
digitalWrite(motor2pin2,HIGH);
Serial.println("IR - TRAS");
break;
}
case 16712445:{ // /<<
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
Serial.println("LIGAR LEDs");
break;
}
case 16753245:{ // on/off
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
Serial.println("APAGAR LEDs");
break;
}
}
delay(100);
irrecv.resume();
}
SemSinal++;
if (SemSinal == 100) // Se passou 100 vezes e não teve sinal, desliga os motores.
{
digitalWrite(motor1pin1,LOW);
digitalWrite(motor1pin2,LOW);
digitalWrite(motor2pin1,LOW);
digitalWrite(motor2pin2,LOW);
}
}