Sensor

eu estou com problema que na logica de programação eu so consigo ligar o led desilgar eu tenho que ficar apertando várias vezes o mesmo botão para conseguir ligar eu estou usando um sensor infravermelho de controle remoto olha a logica de programação

#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 ;
}

Please use google translate and modify your post so the international section can read it too.

Por favor, use google translate e modificar o seu post para a seção internacional pode lê-lo também.

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 ; 
  }