Não conheço muito bom, mas o que me parece que está causando o problema são os delay, envio de comando sequencial HIGH e LOW, enfim, algo desse tipo.
Tente comentar a linha calculoSensor(); para ver no que dá. O código ficaria assim:
#include <IRremote.h>
#define echoPin 8
#define trigPin 7
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
int valor;
int led = 6;
int contador;
long distancia;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(led, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
valor = results.value;
if(valor == 15300)
{
ligaLed();
}
if(valor == 14790)
{
desligaLed();
}
irrecv.resume();
}
if(contador==1)
{
digitalWrite(led, HIGH);
//calculoSensor();
}else if(contador ==3);
{
digitalWrite(led, LOW);
}
Serial.println(contador);
}
void ligaLed()
{
contador =1;
}
void desligaLed()
{
contador =3;
}
void calculoSensor()
{
//seta o pino 12 com um pulso baixo "LOW" ou desligado ou ainda 0
digitalWrite(trigPin, LOW);
// delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 12 com pulso alto "HIGH" ou ligado ou ainda 1
digitalWrite(trigPin, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 12 com pulso baixo novamente
digitalWrite(trigPin, LOW);
//pulseInt lê o tempo entre a chamada e o pino entrar em high
long duration = pulseIn(echoPin,HIGH);
//Esse calculo é baseado em s = v . t, lembrando que o tempo vem dobrado
//porque é o tempo de ida e volta do ultrassom
distancia = (duration /29) / 2 ;
}