Go Down

Topic: Sensor (Read 727 times) previous topic - next topic

sabing

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


robtillaart

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.

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

LegendBR

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:

Code: [Select]
#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 ;
  }

Go Up