Pages: [1]   Go Down
Author Topic: Sensor  (Read 651 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 212
Posts: 13531
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

Rob Tillaart

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

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: