Go Down

Topic: Sensor (Read 828 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy