Pessoal estou iniciando e com muitas duvidas...

Consegui fazer com que um led ascenda ao receber o comando do IR de um controle remoto ao pressionar um botão e desligar ao pressionar OUTRO botão, porém preciso que ele apague ao pressionar O MESMO BOTÃO, se alguem puder me ajudar agradeço... 

segue regra:

if (results.value == 0xFFA956)//recebe o sinal do botao espessifico
digitalWrite(ledpin6, HIGH); //liga led 6 se botao pressionado
else if (results.value == 0xFF59A6)
digitalWrite (ledpin6,LOW); //desliga led 6 se outro botao pressionado

Exibições: 929

Responder esta

Respostas a este tópico

Ismael,

sem conhecer o resto do código, vamos utilizar o contorno com uma variável de flag.

////////////////////

int meuFlag = 0; // 0 para desligada, 1 para ligada. Lado de fora do loop()

...

...

////////////////////////////////////////////

if ((results.value == 0xFFA956) && (meuFlag == 0))

        // se recebeu o sinal do botao específico e o flag estiver ZERO

           {

           digitalWrite(ledpin6, HIGH); //liga led 6

           meuFlag = 1; //para o programa nao "esquecer" que esta ligada.

           delay(500); //aguardo meio segundo... (se não, vai ficar piscando)

            }
else if ((results.value == 0xFF5956) && (meuFlag == 1))

           // se o mesmo botao for pressionao e o Flag estiver em UM

           {

           digitalWrite (ledpin6,LOW); //desliga led 6

           meuFlag = 0;

          delay(500);

          }

/////////////////////

Existem outras formas mais estéticas... mas estou sem compilador aqui...

Por favor, verifique o funcionamento, inclusive, se o "delay" está muito ou pouco.

Abraços.

Segue o codigo inteiro... agora ligou mas não desliga.

#include <IRremote.h>
int RECV_PIN = 11; //Leitor IR na IN 11
IRrecv irrecv(RECV_PIN);
int ledpin6=6;
int ledpin7=7;
int meuFlag = 0; // 0 para desligada, 1 para ligada. Lado de fora do loop()

decode_results results;

void setup()
{
pinMode(ledpin6,OUTPUT);
pinMode(ledpin7,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Inicia o receptor
}

void loop()
{
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume();
}
if ((results.value == 0xFFA956) && (meuFlag == 0))
// se recebeu o sinal do botao específico e o flag estiver ZERO
{
digitalWrite(ledpin6, HIGH); //liga led 6
meuFlag = 1; //para o programa nao "esquecer" que esta ligada.
delay(500); //aguardo meio segundo... (se não, vai ficar piscando)
}
else if ((results.value == 0xFF5956) && (meuFlag == 1))
// se o mesmo botao for pressionao e o Flag estiver em UM
{
digitalWrite (ledpin6,LOW); //desliga led 6
meuFlag = 0;
delay(500);
}

}

Ismael,

O erro foi meu:

ao invés disso:

else if ((results.value == 0xFF5956) && (meuFlag == 1))

seria isso:

else if ((results.value == 0xFFA956) && (meuFlag == 1))

Abraços.

funcionou :) era só o codigo do else IF que estava diferente

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço